1
0

worker.h 619 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef _WORKER_HPP_
  2. #define _WORKER_HPP_
  3. #include <ev++.h>
  4. struct task
  5. {
  6. uint32_t m_cmd_code;
  7. uint32_t m_hash_id;
  8. char m_d[1];
  9. void destroy()
  10. {
  11. free(this);
  12. }
  13. template<typename T> const T&body()const
  14. {
  15. const void*x=&m_d[0];
  16. return *(T*)x;
  17. }
  18. template<typename T> T&body()
  19. {
  20. void*x=&m_d[0];
  21. return *(T*)x;
  22. }
  23. static size_t align(size_t n)
  24. {
  25. return (n+31)&~0x1F;
  26. }
  27. template<typename T> static task*alloc()
  28. {
  29. return (task*)malloc(align(sizeof(T)+sizeof(task)));
  30. }
  31. };
  32. struct worker
  33. {
  34. virtual void stop()=0;
  35. virtual void request(task*tk)=0;
  36. static worker*instance();
  37. };
  38. #endif