1
0

worker.h 646 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. int m_site_data = 0;
  9. char m_d[1];
  10. void destroy()
  11. {
  12. free(this);
  13. }
  14. template<typename T> const T&body()const
  15. {
  16. const void*x=&m_d[0];
  17. return *(T*)x;
  18. }
  19. template<typename T> T&body()
  20. {
  21. void*x=&m_d[0];
  22. return *(T*)x;
  23. }
  24. static size_t align(size_t n)
  25. {
  26. return (n+31)&~0x1F;
  27. }
  28. template<typename T> static task*alloc()
  29. {
  30. return (task*)malloc(align(sizeof(T)+sizeof(task)));
  31. }
  32. };
  33. struct worker
  34. {
  35. virtual void stop()=0;
  36. virtual void request(task*tk)=0;
  37. static worker*instance();
  38. };
  39. #endif