Add initial finite state machine implementation
This commit is contained in:
parent
dd07c57d7a
commit
be6de4e7e3
42
include/mtl/fsm.hpp
Normal file
42
include/mtl/fsm.hpp
Normal file
@ -0,0 +1,42 @@
|
||||
#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
|
||||
Loading…
x
Reference in New Issue
Block a user