Loading...
Searching...
No Matches
StateManager.h
Go to the documentation of this file.
1// Copyright (c) 2025 Dave R. Smith. All rights reserved.
2// Malena Framework — Proprietary Software. See LICENSE for terms.
3
4//
5// Created by Dave Smith on 10/5/25.
6//
7
8#ifndef MALENA_STATEMANAGER_H
9#define MALENA_STATEMANAGER_H
10
12#include <type_traits>
13#include <functional>
14
15namespace ml
16{
18
25 template<typename T>
26 struct StateCallback
27 {
28 using type = std::function<void(T)>;
29 };
30
31 template<>
32 struct StateCallback<void>
33 {
34 using type = std::function<void()>;
35 };
36
38
84 template<typename StateEnum = void>
86 {
87 private:
88 std::conditional_t<
89 !std::is_void_v<StateEnum>,
90 StateEnum,
91 int
92 > _currentState{};
93
94 typename StateCallback<StateEnum>::type _onEnterCallback;
95 typename StateCallback<StateEnum>::type _onExitCallback;
96
97 public:
104 template<typename T = StateEnum>
105 explicit StateManager(std::enable_if_t<!std::is_void_v<T>, T> initialState);
106
108 StateManager() = default;
109
118 template<typename T = StateEnum>
119 std::enable_if_t<!std::is_void_v<T>>
120 onStateEnter(std::function<void(T)> callback);
121
130 template<typename T = StateEnum>
131 std::enable_if_t<!std::is_void_v<T>>
132 onStateExit(std::function<void(T)> callback);
133
143 template<typename T = StateEnum>
144 std::enable_if_t<!std::is_void_v<T>>
145 setState(T newState);
146
152 template<typename T = StateEnum>
153 std::enable_if_t<!std::is_void_v<T>, T>
154 getState() const;
155
162 template<typename T = StateEnum>
163 std::enable_if_t<!std::is_void_v<T>, bool>
164 isState(T state) const;
165 };
166
173 template<>
174 class StateManager<void> {};
175
176} // namespace ml
177
178#include "../../../src/Resources/StateManager.tpp"
179#endif // MALENA_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:22