EventBuffer.cpp 2.1 KB

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