EventBuffer.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "EventBuffer.h"
  2. #include "Log.h"
  3. namespace crown
  4. {
  5. //-----------------------------------------------------------------------------
  6. EventBuffer::EventBuffer() : m_size(0)
  7. {
  8. }
  9. //-----------------------------------------------------------------------------
  10. void EventBuffer::push_event(uint32_t event_type, void* event_data, size_t event_size)
  11. {
  12. if (m_size + sizeof(event_type) + sizeof(event_size) + event_size > MAX_OS_EVENT_BUFFER_SIZE)
  13. {
  14. flush();
  15. }
  16. Log::i("m_size: %d", m_size);
  17. char* cur = m_buffer + m_size;
  18. *(uint32_t*) cur = event_type;
  19. *(size_t*) (cur + sizeof(event_type)) = event_size;
  20. memcpy(cur + sizeof(event_type) + sizeof(event_size), event_data, event_size);
  21. m_size += sizeof(event_type) + sizeof(event_size) + event_size;
  22. Log::i("event type: %d", event_type);
  23. Log::i("event size: %d", event_size);
  24. }
  25. //-----------------------------------------------------------------------------
  26. void EventBuffer::push_event_buffer(char* event_buffer, size_t buffer_size)
  27. {
  28. if (m_size + buffer_size > MAX_OS_EVENT_BUFFER_SIZE)
  29. {
  30. flush();
  31. }
  32. char* cur = m_buffer + m_size;
  33. memcpy(cur, event_buffer, buffer_size);
  34. m_size += buffer_size;
  35. }
  36. //-----------------------------------------------------------------------------
  37. void* EventBuffer::get_next_event(uint32_t& event_type, size_t& event_size)
  38. {
  39. static size_t read = 0;
  40. if (read < m_size)
  41. {
  42. char* cur = m_buffer + read;
  43. // Saves type
  44. event_type = *(uint32_t*) cur;
  45. // Saves size
  46. event_size = *(size_t*)(cur + sizeof(uint32_t));
  47. // Set read to next event
  48. read += sizeof(size_t) + sizeof(uint32_t) + event_size;
  49. return cur + sizeof(size_t) + sizeof(uint32_t);
  50. }
  51. read = 0;
  52. return NULL;
  53. }
  54. //-----------------------------------------------------------------------------
  55. void EventBuffer::clear()
  56. {
  57. m_size = 0;
  58. }
  59. //-----------------------------------------------------------------------------
  60. void EventBuffer::flush()
  61. {
  62. m_size = 0;
  63. }
  64. //-----------------------------------------------------------------------------
  65. size_t EventBuffer::size() const
  66. {
  67. return m_size;
  68. }
  69. //-----------------------------------------------------------------------------
  70. char* EventBuffer::buffer()
  71. {
  72. return m_buffer;
  73. }
  74. } // namespace crown