2026-06-05 13:44:39 +09:00

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();
};