FSM cleanup:

- Use reinterpret_cast.
- Use using instead of typedef.
- Use PascalCase for CONDITION and ACTION.
- Use constexpr instead of #define.

Patch by: @phosit
Differential Revision: https://code.wildfiregames.com/D4868
This was SVN commit r27385.
This commit is contained in:
Stan 2023-01-07 21:41:30 +00:00
parent c8e24927b2
commit fc392a4367
2 changed files with 16 additions and 15 deletions

View File

@ -88,8 +88,8 @@ bool CFsmTransition::ApplyConditions() const
if (it->pFunction)
{
// Evaluate condition
CONDITION Condition = (CONDITION)it->pFunction;
eval &= Condition(it->pContext);
Condition* condition = reinterpret_cast<Condition*>(it->pFunction);
eval &= condition(it->pContext);
}
}
@ -106,8 +106,8 @@ bool CFsmTransition::RunActions() const
if (it->pFunction)
{
// Run action
ACTION Action = (ACTION)it->pFunction;
result &= Action(it->pContext, m_Event);
Action* action = reinterpret_cast<Action*>(it->pFunction);
result &= action(it->pContext, m_Event);
}
}

View File

@ -18,30 +18,31 @@
#ifndef FSM_H
#define FSM_H
#include <vector>
#include <set>
#include <limits>
#include <map>
#include <set>
#include <vector>
#define FSM_INVALID_STATE (unsigned int)(~0)
constexpr unsigned int FSM_INVALID_STATE{std::numeric_limits<unsigned int>::max()};
class CFsmEvent;
class CFsmTransition;
class CFsm;
typedef bool (*CONDITION)(void* pContext);
typedef bool (*ACTION)(void* pContext, const CFsmEvent* pEvent);
using Condition = bool(void* pContext);
using Action = bool(void* pContext, const CFsmEvent* pEvent);
typedef struct
struct CallbackFunction
{
void* pFunction;
void* pContext;
} CallbackFunction;
};
typedef std::set<unsigned int> StateSet;
typedef std::map<unsigned int, CFsmEvent*> EventMap;
typedef std::vector<CFsmTransition*> TransitionList;
typedef std::vector<CallbackFunction> CallbackList;
using StateSet = std::set<unsigned int>;
using EventMap = std::map<unsigned int, CFsmEvent*>;
using TransitionList = std::vector<CFsmTransition*>;
using CallbackList = std::vector<CallbackFunction>;
/**
* Represents a signal in the state machine that a change has occurred.