Extract the FSM before beginning to use it.
This commit is contained in:
parent
b9025be45b
commit
dcf1a4020d
2 changed files with 20 additions and 18 deletions
16
fsm.hpp
Normal file
16
fsm.hpp
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
template<typename S, typename E>
|
||||||
|
class DeadSimpleFSM {
|
||||||
|
protected:
|
||||||
|
S _state = S::START;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void event(E event) = 0;
|
||||||
|
|
||||||
|
void state(S next_state) {
|
||||||
|
_state = next_state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FSM_T(S, F) case S: F(); break
|
22
fsmtest.cpp
22
fsmtest.cpp
|
@ -1,22 +1,8 @@
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
|
#include "fsm.hpp"
|
||||||
|
|
||||||
using namespace fmt;
|
using namespace fmt;
|
||||||
|
|
||||||
template<typename S, typename E>
|
|
||||||
class DeadSimpleFSM {
|
|
||||||
protected:
|
|
||||||
S _state = S::START;
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual void event(E event) = 0;
|
|
||||||
|
|
||||||
void state(S next_state) {
|
|
||||||
_state = next_state;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#define T(S, F) case S: F(); break
|
|
||||||
|
|
||||||
enum MyState {
|
enum MyState {
|
||||||
START, RUNNING, END
|
START, RUNNING, END
|
||||||
};
|
};
|
||||||
|
@ -29,9 +15,9 @@ class MyFSM : DeadSimpleFSM<MyState, MyEvent> {
|
||||||
public:
|
public:
|
||||||
void event(MyEvent ev) override {
|
void event(MyEvent ev) override {
|
||||||
switch(ev) {
|
switch(ev) {
|
||||||
T(STARTED, start);
|
FSM_T(STARTED, start);
|
||||||
T(PUSH, push);
|
FSM_T(PUSH, push);
|
||||||
T(QUIT, stop);
|
FSM_T(QUIT, quit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue