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