Template Class StateManager#

Class Documentation#

template<size_t N>
class StateManager#

Creates a state manager using a thread safe bitset object.

std::bitset does not provide atomic operations. This class achieves atomicity by protecting a bitset object with a mutex. Set, clear, and is_set functions are also provided.

The size N of the bitset object should be known at compile time.

All get and set and clear operations are done in a thread-safe manner using a mutex to protect operations. All set and clear operations notify any waiting threads.

The wait functions set a bitset indicating which bits are being waited on, and can be cancelled. When cancelled an exception is thrown.

Public Functions

inline StateManager(const std::map<size_t, std::string> &names_in)#
inline StateManager()#
inline void initialize(bool set_all = false)#
inline std::bitset<N> get() const#
inline std::bitset<N> get_pending() const#
inline void cancel_wait()#

cancels all waiting threads and resets all pending bits

template<typename ...StateBits>
inline void set(StateBits... states)#

set multiple state bits in variadic list

Parameters:

states[in] variadic list of state bits to set

template<typename ...StateBits>
inline void clear(StateBits... states)#

clear multiple state bits in variadic list

Parameters:

states[in] variadic list of state bits to clear

inline void set_and_clear(size_t setstate, size_t clrstate)#

atomically set and clear the specified state bits

Parameters:
  • setstate[in] state bit to set

  • clrstate[in] state bit to clear

inline void set_and_clear(std::initializer_list<size_t> setstates, std::initializer_list<size_t> clrstates)#

atomically set and clear the specified state bits

Parameters:
  • setstates[in] list of state bits to set

  • clrstates[in] list of state bits to clear

inline void clear_all()#

clear all state bits

inline bool is_clear(size_t state) const#

is the specified state bit clear?

Parameters:

state[in] state bit to check

Returns:

true|false

template<typename ...StateBits>
inline bool are_all_clear(StateBits... states) const#

are all of the specified state bits clear?

Parameters:

states[in] variadic list of state bits to check

Returns:

true|false

inline bool is_set(size_t state) const#

is the specified state bit set?

Parameters:

state[in] state bit to check

Returns:

true|false

template<typename ...StateBits>
inline bool are_all_set(StateBits... states) const#

are all of the specified state bits set?

Parameters:

states[in] variadic list of state bits to check

Returns:

true|false

template<typename ...StateBits>
inline bool is_any_set(StateBits... states) const#

is any one of the specified state bits set?

Parameters:

states[in] variadic list of state bits to check

Returns:

true|false

inline bool is_any_set() const#

is any state bit in the bitset set?

Returns:

true|false

inline void wait_for_state_set(size_t state)#

wait for specified state to be set

this can throw an exception

Parameters:

state[in] state bit to wait for

inline void wait_for_state_clear(size_t state)#

wait for specified state to be clear

this can throw an exception

Parameters:

state[in] state bit to wait for

template<typename ...StateBits>
inline void wait_for_states_clear(StateBits... states)#

wait for specified states to be clear

this can throw an exception

Parameters:

states[in] state bits to wait for

inline void wait_for_match(const StateManager &obj)#

wait for all state bits to match those of another StateManager object

this can throw an exception

Parameters:

obj[in] reference to another StateManager object for comparison

inline std::string get_state_name(size_t state) const#

returns the name of a single state bit

Parameters:

state[in] state bit enum in a std::bitset

Returns:

string

inline std::string get_set_names()#

returns a space-delimited string of names of all set states

Returns:

space-delimited string

inline std::string get_clear_names()#

returns a space-delimited string of names of all clear states

Returns:

space-delimited string

inline std::string get_pending_names()#

returns a space-delimited string of names of all pending states

Returns:

space-delimited string