// 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 }
// 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 }