RTOS Wrapper
API reference
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
hf::FlagsSaver< FlagId, kCount > Class Template Referencefinal

Concrete two-state flag bitset. More...

#include <FlagsSaver.h>

Inheritance diagram for hf::FlagsSaver< FlagId, kCount >:
hf::FlagsReader< FlagId, kCount > hf::FlagsWriter< FlagId, kCount >

Public Types

using Base = FlagsReader< FlagId, kCount >
 
using Snapshot = typename Base::Snapshot
 
- Public Types inherited from hf::FlagsReader< FlagId, kCount >
using Snapshot = FlagsSnapshot< kWordCount >
 

Public Member Functions

 FlagsSaver () noexcept=default
 
 ~FlagsSaver () override
 
 FlagsSaver (const FlagsSaver &)=delete
 
FlagsSaver & operator= (const FlagsSaver &)=delete
 
bool Set (FlagId id, uint32_t now_ms=0) noexcept override
 Mark id set. Idempotent: returns false if state was already Set (no event signalled).
 
bool Clear (FlagId id, uint32_t now_ms=0) noexcept override
 Mark id cleared. Idempotent: returns false if state was already Cleared (no event signalled).
 
bool ClearAll (uint32_t now_ms=0) noexcept override
 Reset every slot to Cleared and signal a change.
 
bool IsSet (FlagId id) const noexcept override
 True if id is currently set.
 
void Snapshot_ (Snapshot &out) const noexcept override
 Copy current bit state + sequence + last-change timestamp into out.
 
uint32_t Seq () const noexcept override
 
uint32_t LastChangeMs () const noexcept override
 Most recent now_ms value passed to Set / Clear (0 if never).
 
bool WaitForChange (uint32_t timeout_ms) noexcept override
 Block up to timeout_ms waiting for any change since the last call to WaitForChange or ClearWaitEvent.
 
bool ClearWaitEvent () noexcept override
 Discard any pending change-signal without waiting.
 
- Public Member Functions inherited from hf::FlagsReader< FlagId, kCount >
virtual ~FlagsReader () noexcept=default
 
- Public Member Functions inherited from hf::FlagsWriter< FlagId, kCount >
virtual ~FlagsWriter () noexcept=default
 

Static Public Attributes

static constexpr std::size_t kWordCount = Base::kWordCount
 
- Static Public Attributes inherited from hf::FlagsReader< FlagId, kCount >
static constexpr std::size_t kWordCount
 

Private Member Functions

bool WriteSlot_ (FlagId id, bool set, uint32_t now_ms) noexcept
 
void SignalChange_ () noexcept
 
bool EnsureEventGroup_ () noexcept
 

Private Attributes

std::atomic< uint64_t > words_ [kWordCount] {}
 
std::atomic< uint32_t > seq_ {0}
 
std::atomic< uint32_t > last_change_ms_ {0}
 
OS_EventGroup event_group_ {}
 
bool event_group_created_ {false}
 

Static Private Attributes

static constexpr OS_Ulong kEventBit_ = 0x1U
 

Detailed Description

template<typename FlagId, std::size_t kCount>
class hf::FlagsSaver< FlagId, kCount >

Concrete two-state flag bitset.

Template Parameters
FlagIdStrongly-typed enum (or any integer-castable type) indexing slots; must produce values in [0, kCount).
kCountNumber of slots.

Member Typedef Documentation

◆ Base

template<typename FlagId , std::size_t kCount>
using hf::FlagsSaver< FlagId, kCount >::Base = FlagsReader<FlagId, kCount>

◆ Snapshot

template<typename FlagId , std::size_t kCount>
using hf::FlagsSaver< FlagId, kCount >::Snapshot = typename Base::Snapshot

Constructor & Destructor Documentation

◆ FlagsSaver() [1/2]

template<typename FlagId , std::size_t kCount>
hf::FlagsSaver< FlagId, kCount >::FlagsSaver ( )
defaultnoexcept

◆ ~FlagsSaver()

template<typename FlagId , std::size_t kCount>
hf::FlagsSaver< FlagId, kCount >::~FlagsSaver ( )
inlineoverride

◆ FlagsSaver() [2/2]

template<typename FlagId , std::size_t kCount>
hf::FlagsSaver< FlagId, kCount >::FlagsSaver ( const FlagsSaver< FlagId, kCount > &  )
delete

Member Function Documentation

◆ Clear()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::Clear ( FlagId  id,
uint32_t  now_ms = 0 
)
inlineoverridevirtualnoexcept

Mark id cleared. Idempotent: returns false if state was already Cleared (no event signalled).

Implements hf::FlagsWriter< FlagId, kCount >.

◆ ClearAll()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::ClearAll ( uint32_t  now_ms = 0)
inlineoverridevirtualnoexcept

Reset every slot to Cleared and signal a change.

Implements hf::FlagsWriter< FlagId, kCount >.

◆ ClearWaitEvent()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::ClearWaitEvent ( )
inlineoverridevirtualnoexcept

Discard any pending change-signal without waiting.

Implements hf::FlagsReader< FlagId, kCount >.

◆ EnsureEventGroup_()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::EnsureEventGroup_ ( )
inlineprivatenoexcept

◆ IsSet()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::IsSet ( FlagId  id) const
inlineoverridevirtualnoexcept

True if id is currently set.

Implements hf::FlagsReader< FlagId, kCount >.

◆ LastChangeMs()

template<typename FlagId , std::size_t kCount>
uint32_t hf::FlagsSaver< FlagId, kCount >::LastChangeMs ( ) const
inlineoverridevirtualnoexcept

Most recent now_ms value passed to Set / Clear (0 if never).

Implements hf::FlagsReader< FlagId, kCount >.

◆ operator=()

template<typename FlagId , std::size_t kCount>
FlagsSaver & hf::FlagsSaver< FlagId, kCount >::operator= ( const FlagsSaver< FlagId, kCount > &  )
delete

◆ Seq()

template<typename FlagId , std::size_t kCount>
uint32_t hf::FlagsSaver< FlagId, kCount >::Seq ( ) const
inlineoverridevirtualnoexcept

Monotonic change counter; increments on every Set/Clear that actually toggled state.

Implements hf::FlagsReader< FlagId, kCount >.

◆ Set()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::Set ( FlagId  id,
uint32_t  now_ms = 0 
)
inlineoverridevirtualnoexcept

Mark id set. Idempotent: returns false if state was already Set (no event signalled).

Parameters
now_msOptional timestamp recorded as LastChangeMs() when the bit actually transitioned. Pass 0 to skip.

Implements hf::FlagsWriter< FlagId, kCount >.

◆ SignalChange_()

template<typename FlagId , std::size_t kCount>
void hf::FlagsSaver< FlagId, kCount >::SignalChange_ ( )
inlineprivatenoexcept

◆ Snapshot_()

template<typename FlagId , std::size_t kCount>
void hf::FlagsSaver< FlagId, kCount >::Snapshot_ ( Snapshot &  out) const
inlineoverridevirtualnoexcept

Copy current bit state + sequence + last-change timestamp into out.

Implements hf::FlagsReader< FlagId, kCount >.

◆ WaitForChange()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::WaitForChange ( uint32_t  timeout_ms)
inlineoverridevirtualnoexcept

Block up to timeout_ms waiting for any change since the last call to WaitForChange or ClearWaitEvent.

Returns
true on signal; false on timeout / waiter unavailable.

Implements hf::FlagsReader< FlagId, kCount >.

◆ WriteSlot_()

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::WriteSlot_ ( FlagId  id,
bool  set,
uint32_t  now_ms 
)
inlineprivatenoexcept

Member Data Documentation

◆ event_group_

template<typename FlagId , std::size_t kCount>
OS_EventGroup hf::FlagsSaver< FlagId, kCount >::event_group_ {}
private

◆ event_group_created_

template<typename FlagId , std::size_t kCount>
bool hf::FlagsSaver< FlagId, kCount >::event_group_created_ {false}
private

◆ kEventBit_

template<typename FlagId , std::size_t kCount>
constexpr OS_Ulong hf::FlagsSaver< FlagId, kCount >::kEventBit_ = 0x1U
staticconstexprprivate

◆ kWordCount

template<typename FlagId , std::size_t kCount>
constexpr std::size_t hf::FlagsSaver< FlagId, kCount >::kWordCount = Base::kWordCount
staticconstexpr

◆ last_change_ms_

template<typename FlagId , std::size_t kCount>
std::atomic<uint32_t> hf::FlagsSaver< FlagId, kCount >::last_change_ms_ {0}
private

◆ seq_

template<typename FlagId , std::size_t kCount>
std::atomic<uint32_t> hf::FlagsSaver< FlagId, kCount >::seq_ {0}
private

◆ words_

template<typename FlagId , std::size_t kCount>
std::atomic<uint64_t> hf::FlagsSaver< FlagId, kCount >::words_[kWordCount] {}
private

The documentation for this class was generated from the following file: