FSM/vscode/FSM_OOP/baseFSM/FSM_public.h

38 lines
1.3 KiB
C
Raw Normal View History

2024-01-23 20:05:30 +08:00
#ifndef __FSM_PUBLIC_H_
#define __FSM_PUBLIC_H_
2024-01-30 16:06:02 +08:00
#define BASE_FSM(ptr) ((FSM *)(ptr))
#define BASE_PTR (FSM *)
2024-01-23 20:05:30 +08:00
typedef struct _FSM FSM;
#define Step(pFSM) _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM)
2024-01-30 23:07:08 +08:00
#define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM);
2024-01-23 20:05:30 +08:00
typedef struct _FSMHandler FSMHandler;
// 这几个函数可认为是虚函数, 构造函数里不会初始化FSMVtbl, 必须由子类重新实现
typedef struct _FSMVtbl {
// 状态机控制
int (*selectEvent)(void *data); // 可以认为是纯虚函数, 子类必须重新实现
void (*reset)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
void (*step)(FSM *pFSM); // 子类重新实现可以添加一些打印信息
void (*initData)(FSM *pFSM); // 子类必须重新实现
void (*setupHandler)(FSMHandler *fcns); // 子类必须重新实现
void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现
2024-01-23 20:05:30 +08:00
}FSMVtbl;
int getFSMCurState(FSM *pFSM);
int getFSMCurEvent(FSM *pFSM);
2024-01-23 20:05:30 +08:00
void setChildNum(FSM *pFSM, int num);
void registerChildFSM(FSM *parent, FSM *child, int index);
const void *getData(FSM* pFSM);
void *_preloadIn(FSM *pFSM);
2024-01-30 23:07:08 +08:00
void _preloaderGetReady(FSM *pFSM);
FSMVtbl *_vptrFSM(FSM* pFSM);
2024-01-23 20:05:30 +08:00
#endif