| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifndef HW_EVENT_H_
- #define HW_EVENT_H_
- #include "hloop.h"
- #include "hdef.h"
- #define EVENT_ENTRY(p) container_of(p, hevent_t, pending_node)
- #define IDLE_ENTRY(p) container_of(p, hidle_t, node)
- #define TIMER_ENTRY(p) container_of(p, htimer_t, node)
- #define EVENT_ACTIVE(ev) \
- if (!ev->active) {\
- ev->active = 1;\
- ev->loop->nactives++;\
- }\
- #define EVENT_INACTIVE(ev) \
- if (ev->active) {\
- ev->active = 0;\
- ev->loop->nactives--;\
- }\
- #define EVENT_PENDING(ev) \
- do {\
- if (!ev->pending) {\
- ev->pending = 1;\
- ev->loop->npendings++;\
- hevent_t** phead = &ev->loop->pendings[HEVENT_PRIORITY_INDEX(ev->priority)];\
- ev->pending_next = *phead;\
- *phead = (hevent_t*)ev;\
- }\
- } while(0)
- #define EVENT_ADD(loop, ev, cb) \
- do {\
- ev->loop = loop;\
- ev->event_id = ++loop->event_counter;\
- ev->cb = (hevent_cb)cb;\
- EVENT_ACTIVE(ev);\
- } while(0)
- #define EVENT_DEL(ev) \
- do {\
- EVENT_INACTIVE(ev);\
- if (!ev->pending) {\
- SAFE_FREE(ev);\
- }\
- } while(0)
- #define EVENT_RESET(ev) \
- do {\
- ev->destroy = 0;\
- ev->active = 1;\
- ev->pending = 0;\
- } while(0)
- #endif // HW_EVENT_H_
|