1
0

hevent.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef HW_EVENT_H_
  2. #define HW_EVENT_H_
  3. #include "hloop.h"
  4. #include "hdef.h"
  5. #define EVENT_ENTRY(p) container_of(p, hevent_t, pending_node)
  6. #define IDLE_ENTRY(p) container_of(p, hidle_t, node)
  7. #define TIMER_ENTRY(p) container_of(p, htimer_t, node)
  8. #define EVENT_ACTIVE(ev) \
  9. if (!ev->active) {\
  10. ev->active = 1;\
  11. ev->loop->nactives++;\
  12. }\
  13. #define EVENT_INACTIVE(ev) \
  14. if (ev->active) {\
  15. ev->active = 0;\
  16. ev->loop->nactives--;\
  17. }\
  18. #define EVENT_PENDING(ev) \
  19. do {\
  20. if (!ev->pending) {\
  21. ev->pending = 1;\
  22. ev->loop->npendings++;\
  23. hevent_t** phead = &ev->loop->pendings[HEVENT_PRIORITY_INDEX(ev->priority)];\
  24. if (*phead == NULL) {\
  25. *phead = (hevent_t*)ev;\
  26. } else {\
  27. ev->pending_next = *phead;\
  28. *phead = (hevent_t*)ev;\
  29. }\
  30. }\
  31. } while(0)
  32. #define EVENT_ADD(loop, ev, cb) \
  33. do {\
  34. ev->loop = loop;\
  35. ev->event_id = ++loop->event_counter;\
  36. ev->cb = (hevent_cb)cb;\
  37. EVENT_ACTIVE(ev);\
  38. } while(0)
  39. #define EVENT_DEL(ev) \
  40. do {\
  41. EVENT_INACTIVE(ev);\
  42. ev->destroy = 1;\
  43. } while(0)
  44. #endif // HW_EVENT_H_