Initialize `flag' member variable in state structure
[eleutheria.git] / fsm / types.h
blobea9fe679d02a4fa8d83f99aedae7345d5ca4aaad
1 #ifndef TYPES_H
2 #define TYPES_H
4 #include "../genstructs/htable/htable.h"
6 #define MAX_EVT_DESC 64
8 typedef struct event {
9 char evt_desc[MAX_EVT_DESC];
10 void (*evt_actionf)(void *data);
11 struct state *evt_newstate;
12 } event_t;
14 typedef struct state {
15 htable_t *evttable;
16 unsigned int *st_key;
17 unsigned char flag;
18 } state_t;
20 #define STATE_REACHABLE (1 << 0)
21 #define STATE_IS_REACHABLE(pstate) ((pstate)->flag & STATE_REACHABLE)
22 #define STATE_MARK_AS_REACHABLE(pstate) (pstate)->flag |= STATE_REACHABLE;
23 #define STATE_MARK_AS_UNREACHABLE(pstate) (pstate)->flag &= ~STATE_REACHABLE;
25 typedef enum {
26 ST_OK,
27 ST_EXISTS,
28 ST_NOMEM,
29 ST_NOTFOUND
30 } stret_t;
32 typedef struct pqnode {
33 void *data;
34 unsigned int evtkey;
35 unsigned int prio;
36 STAILQ_ENTRY(pqnode) pq_next;
37 } pqnode_t;
39 typedef struct fsm {
40 htable_t *sttable; /* hash table for states */
41 state_t *cstate; /* current state of fsm */
42 unsigned int nqueues; /* number of priority queues */
43 void *mobj; /* mutual exclusion object */
44 void (*fsm_pq_lock)(const struct fsm *);
45 void (*fsm_pq_unlock)(const struct fsm *);
46 STAILQ_HEAD(pqhead, pqnode) *pqtable;
47 } fsm_t;
49 typedef struct pqhead pqhead_t;
51 typedef enum {
52 FSM_CLEAN,
53 FSM_DIRTY,
54 FSM_EMPTY,
55 FSM_EPRIO,
56 FSM_EEXISTS,
57 FSM_ENOMEM,
58 FSM_ENOTFOUND,
59 FSM_OK
60 } fsmret_t;
62 #endif /* TYPES_H */