22#include "ringbuffer.h"
24#include "os/threads/mutex.h"
26using namespace NSROOT;
28RingBufferPacket::RingBufferPacket(
int _capacity)
31, data(new char [_capacity])
36RingBufferPacket::~RingBufferPacket()
42RingBuffer::RingBuffer(
int capacity)
43: m_ringlock(new OS::Mutex())
44, m_poollock(new OS::Mutex())
54 m_buffer.resize(capacity);
58RingBuffer::~RingBuffer()
61 for (std::vector<Chunk*>::iterator it = m_buffer.begin(); it != m_buffer.end(); ++it)
65 while (!m_pool.empty())
67 delete m_pool.front();
77 Chunk * previous =
nullptr;
78 for (std::vector<Chunk*>::iterator it = m_buffer.begin(); it != m_buffer.end(); ++it)
86 previous->next = *(m_buffer.begin());
102 while(
m_read->packet ==
nullptr)
104 return m_read->packet->size;
124 for (std::vector<Chunk*>::iterator it = m_buffer.begin(); it != m_buffer.end(); ++it)
128 (*it)->packet =
nullptr;
140 memcpy(_packet->data, data, len);
193 while (
m_read->packet ==
nullptr)
208 m_poollock->unlock();
219 m_poollock->unlock();
220 if (p->capacity >= size)
230 m_poollock->unlock();
232 p =
new RingBufferPacket(size);
RingBufferPacket * read()
unsigned m_count
buffer size
Chunk * m_write
chunk to read
unsigned m_unread
total count of processed chunk
void freePacket(RingBufferPacket *p)
unsigned bytesUnread() const
RingBufferPacket * newPacket(int len)
void init()
chunk to write
int write(const char *data, int len)
Chunk * m_read
buffer of chunk
void writePacket(RingBufferPacket *packet)
total size of unread data in the buffer