// the state engine executes the state machine states
void StateMachine::StateEngine(void)
{
    EventData* pDataTemp = NULL;

    // TBD - lock semaphore here
    // while events are being generated keep executing states
    while (_eventGenerated) {
        pDataTemp = _pEventData;  // copy of event data pointer
        _pEventData = NULL;       // event data used up, reset ptr
        _eventGenerated = false;  // event used up, reset flag        

        // execute the state passing in event data, if any
        const StateStruct* pStateMap = GetStateMap();
#ifdef _DEBUG_
        KAL::DebugConsole::Write(LOG_LEVEL_NOTICE, "STATE_MACHINE", "Called by %s %p with currentState = %d, _maxStates = %d, pStateFunc = %p", ST_name, this, currentState, _maxStates, &pStateMap[currentState]);
#endif
        if(&pStateMap[currentState] != (const StateStruct*) NULL) (this->*pStateMap[currentState].pStateFunc)(pDataTemp);
        else  KAL::DebugConsole::Write(LOG_LEVEL_ERROR, "STATE_MACHINE", "Pointer to state %d function is NULL", currentState);

        // if event data was used, then delete it
        if (pDataTemp) {
            delete pDataTemp;
            pDataTemp = NULL;
        }
    }
    // TBD - unlock semaphore here
}
示例#2
0
文件: StateMachine.cpp 项目: k-p/kfl
// the state engine executes the state machine states
void StateMachine::StateEngine(void)
{
    EventData* pDataTemp = NULL;
 
    // TBD - lock semaphore here
    // while events are being generated keep executing states
    while (_eventGenerated) {         
        pDataTemp = _pEventData;  // copy of event data pointer
        _pEventData = NULL;       // event data used up, reset ptr
        _eventGenerated = false;  // event used up, reset flag
 
        assert(currentState < _maxStates);
 
        // execute the state passing in event data, if any
        const StateStruct* pStateMap = GetStateMap();
        (this->*pStateMap[currentState].pStateFunc)(pDataTemp);
 
        // if event data was used, then delete it
        if (pDataTemp) {
            delete pDataTemp;
            pDataTemp = NULL;
        }
    }
    // TBD - unlock semaphore here
}