ring_buffer.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // #include "ring_buffer.h"
  2. // #include "error_define.h"
  3. // #include "log_helper.h"
  4. // namespace am {
  5. // template<typename T>
  6. // ring_buffer<T>::ring_buffer(unsigned int size)
  7. // {
  8. // _size = size;
  9. // _head = _tail = 0;
  10. // _buf = new uint8_t[size];
  11. // }
  12. // template<typename T>
  13. // ring_buffer<T>::~ring_buffer()
  14. // {
  15. // if (_buf)
  16. // delete[] _buf;
  17. // }
  18. // template<typename T>
  19. // void ring_buffer<T>::put(const void *data, int len, const T &type)
  20. // {
  21. // std::lock_guard<std::mutex> locker(_lock);
  22. // if (_head + len <= _size) {
  23. // memcpy(_buf + _head, data, len);
  24. // _head += len;
  25. // } else if (_head + len > _size) {
  26. // int remain = len - (_size - _head);
  27. // if (len - remain > 0)
  28. // memcpy(_buf + _head, data, len - remain);
  29. // if (remain > 0)
  30. // memcpy(_buf, (unsigned char *) data + len - remain, remain);
  31. // _head = remain;
  32. // }
  33. // struct ring_frame<T> frame;
  34. // frame.len = len;
  35. // frame.type = type;
  36. // _frames.push(frame);
  37. // }
  38. // template<typename T>
  39. // int ring_buffer<T>::get(void *data, int len, T &type)
  40. // {
  41. // std::lock_guard<std::mutex> locker(_lock);
  42. // int retLen = 0;
  43. // if (_frames.size() <= 0) {
  44. // retLen = 0;
  45. // return retLen;
  46. // }
  47. // struct ring_frame<T> frame = _frames.front();
  48. // _frames.pop();
  49. // if (frame.len > len) {
  50. // al_error("ringbuff::get need larger buffer");
  51. // return 0;
  52. // }
  53. // type = frame.type retLen = frame.len;
  54. // if (_tail + frame.len <= _size) {
  55. // memcpy(data, _buf + _tail, frame.len);
  56. // _tail += frame.len;
  57. // } else {
  58. // int remain = frame.len - (_size - _tail);
  59. // if (frame.len - remain > 0)
  60. // memcpy(data, _buf + _tail, frame.len - remain);
  61. // if (remain > 0)
  62. // memcpy((unsigned char *) data + frame.len - remain, _buf, remain);
  63. // _tail = remain;
  64. // }
  65. // return retLen;
  66. // }
  67. // } // namespace am