// 表驱动的自动状态机(FSM)
// VC2008
#include "stdafx.h"
#include <map>
// 状态
enum enState
{
enState_Open,
enState_Close,
// 数量
enState_Num
};
// 输入事件
enum enEvent
{
enEvent_Open,
enEvent_Close,
// 数量
enEvent_Num
};
// 状态转换表
struct FSM_Transition
{
enState m_curState;
enEvent m_Event;
enState m_NextState;
};
// 状态机
class FSM
{
public:
// 初始状态
FSM(enState s0) : m_curState(s0) {};
// 设置状态转换表
void ClearTrans() { m_TransTable.clear(); };
void AddTrans(const FSM_Transition& trans)
{
TransTableKey key = std::make_pair(trans.m_curState, trans.m_Event);
TransTable::iterator it_find = m_TransTable.find(key);
if(it_find != m_TransTable.end())
{
if(trans.m_curState !=