OsEventBuffer.cpp 2.3 KB

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