mtl/include/mtl/fsm.hpp
2024-03-06 23:02:00 -07:00

43 lines
592 B
C++

#pragma once
#include <cstdint>
namespace mtl {
class fsm_event {
private:
public:
};
template <typename T>
T fsm_state_instance;
template <typename FSMType, typename InitState>
class fsm {
FSMType* state = nullptr;
protected:
virtual void react(const mtl::fsm_event& event) = 0;
virtual void entry() {}
virtual void exit() {}
template <typename T>
void change_state() {
state = &fsm_state_instance<T>;
}
public:
fsm() {
state = &fsm_state_instance<InitState>;
}
template <typename T>
void dispatch(const T& event) {
state->react(event);
}
};
} // namespace mtl