72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <functional>
|
|
|
|
|
|
using FsmStateId = int;
|
|
using FsmEvent = int;
|
|
|
|
struct States;
|
|
struct Transitions;
|
|
|
|
|
|
class Fsm
|
|
{
|
|
private:
|
|
FsmStateId mCurrentState;
|
|
std::unique_ptr<States> mStates;
|
|
std::unique_ptr<Transitions> mTransitions;
|
|
|
|
public:
|
|
Fsm(
|
|
FsmStateId id,
|
|
std::function<int(void*)> onEnter = nullptr,
|
|
std::function<int(void*)> onExit = nullptr);
|
|
~Fsm();
|
|
|
|
|
|
/**
|
|
*
|
|
* @param onEnter[IN] 상태변수 진입시 호출 함수 포인터
|
|
* @param onExit[IN] 상태변수 탈출시 호출 함수 포인터
|
|
*/
|
|
int addState(
|
|
FsmStateId id,
|
|
std::function<int(void*)> onEnter = nullptr,
|
|
std::function<int(void*)> onExit = nullptr);
|
|
|
|
/**
|
|
* @brief 트랜지션 추가
|
|
*
|
|
* @param stateFrom[IN] 특정 상태 탈출 시 실행되는 함수 포인터
|
|
* @param stateTo[IN] 특정 상태 진입 시 실행되는 함수 포인터
|
|
* @param event[IN] 이벤트
|
|
* @param onTransition[IN] 상태전이 함수
|
|
* @param onGuard[IN] 가드 판단 함수
|
|
* @return error
|
|
*/
|
|
int addTransition(
|
|
FsmStateId from,
|
|
FsmStateId to,
|
|
FsmEvent event,
|
|
std::function<int(void*)> onTransition = nullptr,
|
|
std::function<int(void*)> onGuard = nullptr);
|
|
|
|
/**
|
|
* @brief data의 값으로 상태전이를 실시한다
|
|
* @param data[IN] 트리거 된 이벤트 매개 데이터
|
|
* @return error
|
|
*/
|
|
int trigger(
|
|
FsmEvent event,
|
|
void* data = nullptr);
|
|
|
|
/**
|
|
* @brief 현재 상태 변수 포인터 반환
|
|
* @return 현재 상태변수 포인터
|
|
*/
|
|
FsmStateId getCurrentState();
|
|
};
|
|
|