CPPMyth
Library to interoperate with MythTV server
Loading...
Searching...
No Matches
NSROOT::RingBuffer Class Reference
Collaboration diagram for NSROOT::RingBuffer:

Data Structures

struct  Chunk
 total size of unread data in the buffer More...

Public Member Functions

 RingBuffer (int capacity)
int capacity () const
int bytesAvailable ()
unsigned bytesUnread () const
bool full () const
void clear ()
int write (const char *data, int len)
RingBufferPacketnewPacket (int len)
void writePacket (RingBufferPacket *packet)
RingBufferPacketread ()
void freePacket (RingBufferPacket *p)

Private Member Functions

 RingBuffer (const RingBuffer &other)
RingBuffer & operator= (const RingBuffer &other)
void init ()
 chunk to write
RingBufferPacketneedPacket (int size)

Private Attributes

OS::Mutexm_ringlock
OS::Mutexm_poollock
const int m_capacity
unsigned m_count
 buffer size
unsigned m_unread
 total count of processed chunk
std::vector< Chunk * > m_buffer
Chunkm_read
 buffer of chunk
Chunkm_write
 chunk to read
std::list< RingBufferPacket * > m_pool

Detailed Description

Definition at line 55 of file ringbuffer.h.

Constructor & Destructor Documentation

◆ RingBuffer()

RingBuffer::RingBuffer ( int capacity)

Definition at line 42 of file ringbuffer.cpp.

◆ ~RingBuffer()

RingBuffer::~RingBuffer ( )
virtual

Definition at line 58 of file ringbuffer.cpp.

Member Function Documentation

◆ bytesAvailable()

int RingBuffer::bytesAvailable ( )

It returns the size in bytes of the next chunk to read.

Returns
the number of bytes

Definition at line 96 of file ringbuffer.cpp.

References m_read, and m_unread.

◆ bytesUnread()

unsigned RingBuffer::bytesUnread ( ) const

It returns the total size in bytes of all chunks remaining to be read.

Returns
the number of bytes

Definition at line 107 of file ringbuffer.cpp.

References m_unread.

◆ capacity()

int RingBuffer::capacity ( ) const

Buffer capacity is defined in CTOR and it cannot be changed. It is the number of chunk chained in the ring of the buffer. Each chunk can hold different size of payload.

Returns
the number of chunk in the ring buffer

Definition at line 91 of file ringbuffer.cpp.

◆ clear()

void RingBuffer::clear ( )

Clear all unread chunks.

Definition at line 119 of file ringbuffer.cpp.

References freePacket(), m_count, m_read, m_unread, and m_write.

◆ freePacket()

void RingBuffer::freePacket ( RingBufferPacket * p)

Recycle the payload for reuse.

Parameters
ppayload

Definition at line 204 of file ringbuffer.cpp.

Referenced by clear(), write(), and writePacket().

Here is the caller graph for this function:

◆ full()

bool RingBuffer::full ( ) const

When the buffer is full, writing new data will overwrite the next available chunk for reading.

Returns
true if the buffer is full

Definition at line 113 of file ringbuffer.cpp.

References m_read, m_unread, and m_write.

◆ init()

void RingBuffer::init ( )
private

chunk to write

Definition at line 75 of file ringbuffer.cpp.

References m_read, and m_write.

◆ needPacket()

RingBufferPacket * RingBuffer::needPacket ( int size)
private

Definition at line 211 of file ringbuffer.cpp.

◆ newPacket()

RingBufferPacket * RingBuffer::newPacket ( int len)

It returns a pointer to payload to be written. Its capacity is at least equal to requested size (len). After copying data and assigning the size, the payload can be written to the buffer. An unused payload MUST BE freed by caller using freePacket(RingBufferPacket*).

Parameters
lenrequested size in bytes
Returns
payload
See also
writePacket(RingBufferPacket*)

Definition at line 159 of file ringbuffer.cpp.

◆ read()

RingBufferPacket * RingBuffer::read ( )

Read the next chunk available. Returned pointer MUST BE freed by caller.

See also
freePacket(RingBufferPacket*)
Returns
new packet or nullptr

Definition at line 185 of file ringbuffer.cpp.

References m_read, and m_unread.

◆ write()

int RingBuffer::write ( const char * data,
int len )

Write a chunk in the buffer.

Parameters
datapointer to data
lenlength of data
Returns
the number of bytes written

Definition at line 134 of file ringbuffer.cpp.

References freePacket(), m_count, m_unread, and m_write.

◆ writePacket()

void RingBuffer::writePacket ( RingBufferPacket * packet)

Write a chunk in the buffer.

Parameters
packetpayload
See also
newPacket(int)

Definition at line 166 of file ringbuffer.cpp.

References freePacket(), m_count, m_unread, and m_write.

Field Documentation

◆ m_buffer

std::vector<Chunk*> NSROOT::RingBuffer::m_buffer
private

Definition at line 152 of file ringbuffer.h.

◆ m_capacity

const int NSROOT::RingBuffer::m_capacity
private

Definition at line 140 of file ringbuffer.h.

◆ m_count

unsigned NSROOT::RingBuffer::m_count
private

buffer size

Definition at line 141 of file ringbuffer.h.

Referenced by clear(), write(), and writePacket().

◆ m_pool

std::list<RingBufferPacket*> NSROOT::RingBuffer::m_pool
private

Definition at line 158 of file ringbuffer.h.

◆ m_poollock

OS::Mutex* NSROOT::RingBuffer::m_poollock
mutableprivate

Definition at line 139 of file ringbuffer.h.

◆ m_read

Chunk* NSROOT::RingBuffer::m_read
private

buffer of chunk

Definition at line 153 of file ringbuffer.h.

Referenced by bytesAvailable(), clear(), full(), init(), and read().

◆ m_ringlock

OS::Mutex* NSROOT::RingBuffer::m_ringlock
mutableprivate

Definition at line 138 of file ringbuffer.h.

◆ m_unread

unsigned NSROOT::RingBuffer::m_unread
private

total count of processed chunk

Definition at line 142 of file ringbuffer.h.

Referenced by bytesAvailable(), bytesUnread(), clear(), full(), read(), write(), and writePacket().

◆ m_write

Chunk* NSROOT::RingBuffer::m_write
private

chunk to read

Definition at line 154 of file ringbuffer.h.

Referenced by clear(), full(), init(), write(), and writePacket().


The documentation for this class was generated from the following files:
  • /home/jlb/src/janbar/PVR/cppmythlib/cppmyth/src/private/ringbuffer.h
  • /home/jlb/src/janbar/PVR/cppmythlib/cppmyth/src/private/ringbuffer.cpp