Список состояний конечного автомата.
?????????? ? ??????? ??????? ? ???????? ??????? ?????? ??????? ?????? ?????????/??????? ????????? ???????? ? ????? ?????. ? ?? ?????? ??? ??????? ??????????? ?? ?????? ?????: enum, ??????????? ??????????????? ?????????, ?????? ???? ????????? ??? ???????, ??????? switch, ?????????? ??? ??????, ? ??????????? ?? ?????????…
???????? ???????? ????????? (??????????????? ?????):
#define FOR_ALL_STATES(Action) \
Action(StateInitial) \
Action(StateInitializing) \
Action(StateReady) \
Action(StateTerminating)
????? ????? ???? ????? ????????? ?????????:
#define DEFINE_ENUM(Name) Name,
enum States {
FOR_ALL_STATES(DEFINE_ENUM)
};
#undef DEFINE_ENUM
? ????? – ???????? ????????? ???????-???????????? ??? ??????? ?? ?????????:
#define DEFINE_HANDLER(Name) \
States On ##Name(Events Event);
FOR_ALL_STATES(DEFINE_HANDLER)
#undef DEFINE_HANDLER
??? ?????? ???? ?????????, ??????? ??? ???????:
#define DEFINE_NAME(Name) #Name,
static const char* StateNames[] = {
FOR_ALL_STATES(DEFINE_NAME)
};
#undef DEFINE_NAME
Cross-posted from blog.not-a-kernel-guy.com.