Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
RingBuffer< T > Class Template Reference

Implements a vanilla ring buffer. More...

#include <RingBuffer.hxx>

Public Member Functions

void destroy ()
 Destroy an existing ring buffer instance.
 
size_t put (const T *buf, size_t items)
 Insert a number of items to the buffer.
 
size_t get (T *buf, size_t items)
 remove a number of items from the buffer.
 
size_t data_read_pointer (T **buf)
 Get a reference to the current location in the buffer for read.
 
size_t data_write_pointer (T **buf)
 Get a reference to the current location in the buffer for write.
 
size_t consume (size_t items)
 Remove a number of items from the buffer by advancing the readIndex.
 
size_t advance (size_t items)
 Add a number of items to the buffer by advancing the writeIndex.
 
size_t items ()
 Number of items in the buffer.
 
size_t size ()
 Size of buffer in number of items.
 
size_t space ()
 space left in buffer of buffer in number items.
 

Static Public Member Functions

static RingBuffercreate (size_t size)
 Factory method to create a ring buffer instance.
 

Private Member Functions

 RingBuffer (size_t size)
 Constructor.
 
 RingBuffer ()
 Default Constructor.
 
 ~RingBuffer ()
 Default destructor.
 
 DISALLOW_COPY_AND_ASSIGN (RingBuffer)
 

Private Attributes

size_t _size
 size in items of ring buffer
 
size_t count
 total number of items in ring buffer
 
size_t readIndex
 read index
 
size_t writeIndex
 write index
 
data []
 ring buffer data
 

Detailed Description

template<typename T>
class RingBuffer< T >

Implements a vanilla ring buffer.

Not thread safe.

Definition at line 42 of file RingBuffer.hxx.

Constructor & Destructor Documentation

◆ RingBuffer()

template<typename T >
RingBuffer< T >::RingBuffer ( size_t  size)
inlineprivate

Constructor.

Parameters
sizesize in bytes for the ring buffer

Definition at line 225 of file RingBuffer.hxx.

Member Function Documentation

◆ advance()

template<typename T >
size_t RingBuffer< T >::advance ( size_t  items)
inline

Add a number of items to the buffer by advancing the writeIndex.

Parameters
itemstotal number of items to add
Returns
total number of items added

Definition at line 179 of file RingBuffer.hxx.

◆ consume()

template<typename T >
size_t RingBuffer< T >::consume ( size_t  items)
inline

Remove a number of items from the buffer by advancing the readIndex.

Parameters
itemstotal number of items to remove
Returns
total number of items removed

Definition at line 150 of file RingBuffer.hxx.

◆ create()

template<typename T >
static RingBuffer * RingBuffer< T >::create ( size_t  size)
inlinestatic

Factory method to create a ring buffer instance.

Parameters
sizesize in items for the ring buffer
Returns
the newly cleated RingBuffer object.

Definition at line 49 of file RingBuffer.hxx.

◆ data_read_pointer()

template<typename T >
size_t RingBuffer< T >::data_read_pointer ( T **  buf)
inline

Get a reference to the current location in the buffer for read.

Parameters
buflocation to store resulting reference
Returns
number of items in contiguous memory. May be less than total number of items in the buffer.

Definition at line 119 of file RingBuffer.hxx.

◆ data_write_pointer()

template<typename T >
size_t RingBuffer< T >::data_write_pointer ( T **  buf)
inline

Get a reference to the current location in the buffer for write.

Parameters
buflocation to store resulting reference
Returns
amount of space in contiguous memory. May be less than total amount of space avaiable.

Definition at line 135 of file RingBuffer.hxx.

◆ destroy()

template<typename T >
void RingBuffer< T >::destroy ( )
inline

Destroy an existing ring buffer instance.

Definition at line 61 of file RingBuffer.hxx.

◆ get()

template<typename T >
size_t RingBuffer< T >::get ( T *  buf,
size_t  items 
)
inline

remove a number of items from the buffer.

Parameters
bufreference to the data removed
itemstotal number of items to remove
Returns
total number of items removed
Todo:
(Stuart Baker) significant optimization opportunity

Definition at line 95 of file RingBuffer.hxx.

◆ items()

template<typename T >
size_t RingBuffer< T >::items ( )
inline

Number of items in the buffer.

Returns
number of items in the buffer

Definition at line 200 of file RingBuffer.hxx.

◆ put()

template<typename T >
size_t RingBuffer< T >::put ( const T *  buf,
size_t  items 
)
inline

Insert a number of items to the buffer.

Parameters
bufreference to the first item to insert
itemstotal number of items to insert
Returns
total number of items inserted
Todo:
(Stuart Baker) significant optimization opportunity

Definition at line 71 of file RingBuffer.hxx.

◆ size()

template<typename T >
size_t RingBuffer< T >::size ( )
inline

Size of buffer in number of items.

Returns
size of buffer in number of items

Definition at line 208 of file RingBuffer.hxx.

◆ space()

template<typename T >
size_t RingBuffer< T >::space ( )
inline

space left in buffer of buffer in number items.

Returns
space left in buffer in number of items

Definition at line 216 of file RingBuffer.hxx.

Member Data Documentation

◆ _size

template<typename T >
size_t RingBuffer< T >::_size
private

size in items of ring buffer

Definition at line 244 of file RingBuffer.hxx.

◆ count

template<typename T >
size_t RingBuffer< T >::count
private

total number of items in ring buffer

Definition at line 247 of file RingBuffer.hxx.

◆ data

template<typename T >
T RingBuffer< T >::data[]
private

ring buffer data

Definition at line 256 of file RingBuffer.hxx.

◆ readIndex

template<typename T >
size_t RingBuffer< T >::readIndex
private

read index

Definition at line 250 of file RingBuffer.hxx.

◆ writeIndex

template<typename T >
size_t RingBuffer< T >::writeIndex
private

write index

Definition at line 253 of file RingBuffer.hxx.


The documentation for this class was generated from the following file: