Loading...
Searching...
No Matches
StateManager.h
Go to the documentation of this file.
1//
2// Created by Dave Smith on 10/5/25.
3//
4
5#ifndef STATEMANAGER_H
6#define STATEMANAGER_H
7
8#include <type_traits>
9#include <functional>
10
11namespace ml
12{
14
21 template<typename T>
22 struct StateCallback
23 {
24 using type = std::function<void(T)>;
25 };
26
27 template<>
28 struct StateCallback<void>
29 {
30 using type = std::function<void()>;
31 };
32
34
79 template<typename StateEnum = void>
85 {
86 private:
87 std::conditional_t<
88 !std::is_void_v<StateEnum>,
89 StateEnum,
90 int
91 > _currentState{};
92
93 typename StateCallback<StateEnum>::type _onEnterCallback;
94 typename StateCallback<StateEnum>::type _onExitCallback;
95
96 public:
103 template<typename T = StateEnum>
104 explicit StateManager(std::enable_if_t<!std::is_void_v<T>, T> initialState);
105
107 StateManager() = default;
108
117 template<typename T = StateEnum>
118 std::enable_if_t<!std::is_void_v<T>>
119 onStateEnter(std::function<void(T)> callback);
120
129 template<typename T = StateEnum>
130 std::enable_if_t<!std::is_void_v<T>>
131 onStateExit(std::function<void(T)> callback);
132
142 template<typename T = StateEnum>
143 std::enable_if_t<!std::is_void_v<T>>
144 setState(T newState);
145
151 template<typename T = StateEnum>
152 std::enable_if_t<!std::is_void_v<T>, T>
153 getState() const;
154
161 template<typename T = StateEnum>
162 std::enable_if_t<!std::is_void_v<T>, bool>
163 isState(T state) const;
164 };
165
172 template<>
173 class StateManager<void> {};
174
175} // namespace ml
176
177#include "../../../src/Resources/StateManager.tpp"
178#endif // STATEMANAGER_H
std::enable_if_t<!std::is_void_v< T > > setState(T newState)
Transition to a new state.
StateManager(std::enable_if_t<!std::is_void_v< T >, T > initialState)
Construct with an explicit initial state.
std::enable_if_t<!std::is_void_v< T > > onStateExit(std::function< void(T)> callback)
Register a callback invoked before each state transition.
std::enable_if_t<!std::is_void_v< T >, T > getState() const
Return the current state value.
StateManager()=default
Default constructor — initial state is the zero-value of StateEnum.
std::enable_if_t<!std::is_void_v< T > > onStateEnter(std::function< void(T)> callback)
Register a callback invoked after each state transition.
std::enable_if_t<!std::is_void_v< T >, bool > isState(T state) const
Return true if currently in state.
Definition Component.h:18