37 assert( trans!=NULL );
41 maxNumTransitions_ = maxNumTransitions;
44 currentState_ = initialState;
48 arrayTrans_ =
new TransitionType[ maxNumTransitions_ ];
49 memset( arrayTrans_, -1, maxNumTransitions_ *
sizeof(TransitionType));
58 std::cout <<
"bye, World!";
69 while (!Evlst_.empty())
82 void uFsm::insertInQueue( uint32_t event,
void *parameters )
85 Evlst_.push_back(newevent);
95 int32_t uFsm::hash( uint32_t sourceState, uint32_t event )
98 int32_t where = ( (
event << 8 ) + sourceState) % maxNumTransitions_;
101 while( (arrayTrans_[ (where + i ) % maxNumTransitions_].index != -1)
102 && (i < maxNumTransitions_) )
106 if ( i >= maxNumTransitions_ )
109 return ((where + i)%maxNumTransitions_) ;
119 int32_t uFsm::hash( uint32_t event )
123 int32_t where = ( (
event << 8 ) + currentState_) % maxNumTransitions_;
126 while( (arrayTrans_[(where+i) % maxNumTransitions_].source_state !=
128 arrayTrans_[(where+i) % maxNumTransitions_].event != event)
129 && i < maxNumTransitions_ )
133 result = (i >= maxNumTransitions_)?-1:((where + i) % maxNumTransitions_);
147 uint32_t event, uint32_t index )
152 hashIndex = hash(sourceState, event);
153 if ( hashIndex != -1 )
155 arrayTrans_[hashIndex].source_state = sourceState;
156 arrayTrans_[hashIndex].destination_state = destinationState;
157 arrayTrans_[hashIndex].event = event;
158 arrayTrans_[hashIndex].index = index;
173 int32_t transition_num;
176 insertInQueue(event, parameters);
178 while( !Evlst_.empty() )
183 if ( (transition_num = hash(pe->
id_)) >= 0 )
185 if ( arrayTrans_[transition_num].index == -1 )
194 arrayTrans_[transition_num].index])(pe->
parameters_);
197 currentState_ = arrayTrans_[transition_num].destination_state;
222 insertInQueue(event, parameters);
#define INTERNAL_ERROR
Internal error event.
void * parameters_
event parameters
TransitionFunc * functions_
uint32_t defineTransition(uint32_t sourceState, uint32_t destinationState, uint32_t event, uint32_t index)
int32_t id_
event identifier
void generateEvent(uint32_t event, void *parameters=NULL)
uFsm(uEventHandler *trans, uint32_t maxNumTransitions, uint32_t initialState)
bool control(uint32_t event, void *parameters=NULL)