Make the FSM_STATE work better with optional loggins set by a define and standardize on using enum class by default.
This commit is contained in:
parent
8df6898d0b
commit
0aeb5b4ceb
8 changed files with 49 additions and 42 deletions
|
@ -3,11 +3,11 @@
|
|||
|
||||
using namespace fmt;
|
||||
|
||||
enum MyState {
|
||||
enum class MyState {
|
||||
START, RUNNING, END
|
||||
};
|
||||
|
||||
enum MyEvent {
|
||||
enum class MyEvent {
|
||||
STARTED, PUSH, QUIT
|
||||
};
|
||||
|
||||
|
@ -15,34 +15,34 @@ class MyFSM : DeadSimpleFSM<MyState, MyEvent> {
|
|||
public:
|
||||
void event(MyEvent ev) override {
|
||||
switch(_state) {
|
||||
FSM_STATE(START, start, ev);
|
||||
FSM_STATE(RUNNING, push, ev);
|
||||
FSM_STATE(END, quit, ev);
|
||||
FSM_STATE(MyState, START, start, ev);
|
||||
FSM_STATE(MyState, RUNNING, push, ev);
|
||||
FSM_STATE(MyState, END, quit, ev);
|
||||
}
|
||||
}
|
||||
|
||||
void start(MyEvent ev) {
|
||||
println("<<< START");
|
||||
state(RUNNING);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
|
||||
void push(MyEvent ev) {
|
||||
println("<<< RUN");
|
||||
state(RUNNING);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
|
||||
void quit(MyEvent ev) {
|
||||
println("<<< STOP");
|
||||
state(END);
|
||||
state(MyState::END);
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
MyFSM fsm;
|
||||
|
||||
fsm.event(STARTED);
|
||||
fsm.event(PUSH);
|
||||
fsm.event(PUSH);
|
||||
fsm.event(PUSH);
|
||||
fsm.event(QUIT);
|
||||
fsm.event(MyEvent::STARTED);
|
||||
fsm.event(MyEvent::PUSH);
|
||||
fsm.event(MyEvent::PUSH);
|
||||
fsm.event(MyEvent::PUSH);
|
||||
fsm.event(MyEvent::QUIT);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue