A weird game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
turings-tarpit/fsmtest.cpp

63 lines
871 B

#include <fmt/core.h>
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 {
START, RUNNING, END
};
enum MyEvent {
STARTED, PUSH, QUIT
};
class MyFSM : DeadSimpleFSM<MyState, MyEvent> {
public:
void event(MyEvent ev) override {
switch(ev) {
T(STARTED, start);
T(PUSH, push);
T(QUIT, stop);
}
}
void start() {
println("<<< START");
state(RUNNING);
}
void push() {
println("<<< RUN");
state(RUNNING);
}
void quit() {
println("<<< STOP");
state(END);
}
};
int main() {
MyFSM fsm;
fsm.event(STARTED);
fsm.event(PUSH);
fsm.event(PUSH);
fsm.event(PUSH);
fsm.event(QUIT);
}