Quantum Leaps 696f5cef7b 4.5.02
2012-08-14 18:07:04 -04:00

41 lines
1.7 KiB
C

/*****************************************************************************
* Product: Generic State-Table event processor
* Date of the Last Update: Oct 22, 2007
*
* Copyright (C) 2002-2007 Miro Samek. All rights reserved.
*
* Contact information:
* e-mail: miro@quantum-leaps.com
*****************************************************************************/
#ifndef statetbl_h
#define statetbl_h
typedef struct EventTag {
uint16_t sig; /* signal of the event */
/* add event parameters by derivation from the Event structure */
} Event;
struct StateTableTag; /* forward declaration */
typedef void (*Tran)(struct StateTableTag *me, Event const *e);
typedef struct StateTableTag {
uint8_t state; /* the current active state */
Tran const *state_table; /* the State-Table */
uint8_t n_states; /* number of states */
uint8_t n_signals; /* number of signals */
Tran initial; /* the initial transition */
} StateTable;
void StateTable_ctor(StateTable *me,
Tran const *table, uint8_t n_states, uint8_t n_signals,
Tran initial);
void StateTable_init(StateTable *me);
void StateTable_dispatch(StateTable *me, Event const *e);
void StateTable_empty(StateTable *me, Event const *e);
/* macro for taking a state transition inside a transition function */
#define TRAN(target_) (((StateTable *)me)->state = (uint8_t)(target_))
#endif /* statetbl_h */