Loading...
Searching...
No Matches
ml::StateManager< StateEnum > Class Template Reference

Single-enum state machine with enter/exit callbacks. More...

#include <StateManager.h>

Public Member Functions

 StateManager ()=default
 Default constructor — initial state is the zero-value of StateEnum.
template<typename T = StateEnum>
 StateManager (std::enable_if_t<!std::is_void_v< T >, T > initialState)
 Construct with an explicit initial state.
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T >, T > getState () const
 Return the current state value.
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T >, bool > isState (T state) const
 Return true if currently in state.
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > onStateEnter (std::function< void(T)> callback)
 Register a callback invoked after each state transition.
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > onStateExit (std::function< void(T)> callback)
 Register a callback invoked before each state transition.
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > setState (T newState)
 Transition to a new state.

Detailed Description

template<typename StateEnum = void>
class ml::StateManager< StateEnum >

Single-enum state machine with enter/exit callbacks.

StateManager<StateEnum> stores one active state value and fires optional callbacks on every transition. It is used in two places:

All methods are guarded by std::enable_if so they exist only when StateEnum is not void. The void specialization at the bottom of this file is a no-op that compiles cleanly when the manifest declares no State enum.

Usage

struct MyManifest {
enum class State { Idle, Running, Paused };
};
class MyComponent : public ml::ComponentWith<MyManifest> {};
MyComponent c;
c.onStateEnter([](MyManifest::State s){
if (s == MyManifest::State::Running) startAnimation();
});
c.onStateExit([](MyManifest::State s){
if (s == MyManifest::State::Running) stopAnimation();
});
c.setState(MyManifest::State::Running); // fires exit(Idle), then enter(Running)
c.isState(MyManifest::State::Running); // true
c.getState(); // MyManifest::State::Running
Component< M, Traits... > ComponentWith
Alias for Component<M, Traits...>.
Definition Component.h:150
Template Parameters
StateEnumAn enum class type representing the possible states. Defaults to void (selects the no-op specialization).
See also
Customizable, MultiCustomStateManager, GatherStates

StateManager.

Definition at line 84 of file StateManager.h.

Constructor & Destructor Documentation

◆ StateManager() [1/2]

template<typename StateEnum = void>
template<typename T = StateEnum>
ml::StateManager< StateEnum >::StateManager ( std::enable_if_t<!std::is_void_v< T >, T > initialState)
explicit

Construct with an explicit initial state.

Parameters
initialStateThe state to start in. The enter callback is not fired during construction.

◆ StateManager() [2/2]

template<typename StateEnum = void>
ml::StateManager< StateEnum >::StateManager ( )
default

Default constructor — initial state is the zero-value of StateEnum.

Member Function Documentation

◆ getState()

template<typename StateEnum = void>
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T >, T > ml::StateManager< StateEnum >::getState ( ) const

Return the current state value.

Returns
The active StateEnum value.

◆ isState()

template<typename StateEnum = void>
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T >, bool > ml::StateManager< StateEnum >::isState ( T state) const

Return true if currently in state.

Parameters
stateThe state value to compare against.
Returns
true if the current state equals state.

◆ onStateEnter()

template<typename StateEnum = void>
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > ml::StateManager< StateEnum >::onStateEnter ( std::function< void(T)> callback)

Register a callback invoked after each state transition.

The callback receives the newly entered state. Only one enter callback is active at a time; calling this again replaces it.

Parameters
callbackFunction called with the new state after each transition.

◆ onStateExit()

template<typename StateEnum = void>
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > ml::StateManager< StateEnum >::onStateExit ( std::function< void(T)> callback)

Register a callback invoked before each state transition.

The callback receives the state being left. Only one exit callback is active at a time; calling this again replaces it.

Parameters
callbackFunction called with the old state before each transition.

◆ setState()

template<typename StateEnum = void>
template<typename T = StateEnum>
std::enable_if_t<!std::is_void_v< T > > ml::StateManager< StateEnum >::setState ( T newState)

Transition to a new state.

Fires the exit callback with the current state, updates the stored state to newState, then fires the enter callback with the new state. Either callback may be unset (nullptr), in which case it is skipped.

Parameters
newStateThe state to transition into.

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