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

Implements a smart buffer specifically designed for character device drivers. More...

#include <DeviceBuffer.hxx>

Inheritance diagram for DeviceBuffer< T >:
DeviceBufferBase

Public Types

typedef T member_type
 

Public Member Functions

void destroy ()
 Destroy an existing DeviceBuffer 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.
 
- Public Member Functions inherited from DeviceBufferBase
void signal_condition ()
 Signal the wakeup condition.
 
void signal_condition_from_isr ()
 Signal the wakeup condition from an ISR context.
 
void flush ()
 flush all the data out of the buffer and reset the buffer.
 
size_t pending ()
 Return the number of items in the queue.
 
size_t space ()
 Return the number of items for which space is available.
 
void select_insert ()
 Add client to list of clients needing woken.
 
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.
 

Static Public Member Functions

static DeviceBuffercreate (size_t size, size_t level=0)
 Create a DeviceBuffer instance.
 
static constexpr unsigned member_size ()
 

Private Member Functions

 DeviceBuffer (size_t size, size_t level)
 Constructor.
 
 ~DeviceBuffer ()
 Destructor.
 
 DISALLOW_COPY_AND_ASSIGN (DeviceBuffer)
 

Private Attributes

data []
 buffer data
 

Additional Inherited Members

- Protected Member Functions inherited from DeviceBufferBase
 DeviceBufferBase (size_t size, size_t level)
 Constructor.
 
 ~DeviceBufferBase ()
 Destructor.
 
- Protected Attributes inherited from DeviceBufferBase
uint16_t level
 level of space required in buffer in order to wakeup, 0 if unused
 
uint16_t size
 size in items of buffer
 
uint16_t count
 total number of items in buffer
 
uint16_t readIndex
 read index
 
uint16_t writeIndex
 write index
 

Detailed Description

template<typename T>
class DeviceBuffer< T >

Implements a smart buffer specifically designed for character device drivers.

Technically, the private metadata for the size and index counters should more properly be implemented as size_t types. The choice of uint16_t types is simply to save memory as 2^16 is normally a reasonable maximum size for this type of metadata.

Definition at line 215 of file DeviceBuffer.hxx.

Member Typedef Documentation

◆ member_type

template<typename T >
typedef T DeviceBuffer< T >::member_type

Definition at line 236 of file DeviceBuffer.hxx.

Constructor & Destructor Documentation

◆ DeviceBuffer()

template<typename T >
DeviceBuffer< T >::DeviceBuffer ( size_t  size,
size_t  level 
)
inlineprivate

Constructor.

Parameters
sizesize in items for the buffer.
levelminimum amount of space required in buffer to restart transmitting, unused for receive.

Definition at line 337 of file DeviceBuffer.hxx.

◆ ~DeviceBuffer()

template<typename T >
DeviceBuffer< T >::~DeviceBuffer ( )
inlineprivate

Destructor.

Definition at line 344 of file DeviceBuffer.hxx.

Member Function Documentation

◆ create()

template<typename T >
static DeviceBuffer * DeviceBuffer< T >::create ( size_t  size,
size_t  level = 0 
)
inlinestatic

Create a DeviceBuffer instance.

Parameters
sizesize in items for the DeviceBuffer
levelminimum amount of space required in buffer to restart transmitting, unused for receive.
Returns
newly created DeviceBuffer instance

Definition at line 224 of file DeviceBuffer.hxx.

◆ data_read_pointer()

template<typename T >
size_t DeviceBuffer< 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 continuous memory. May be less than total number of items in the buffer.

Definition at line 304 of file DeviceBuffer.hxx.

◆ data_write_pointer()

template<typename T >
size_t DeviceBuffer< 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 continuous memory. May be less than total amount of space avaiable.

Definition at line 320 of file DeviceBuffer.hxx.

◆ destroy()

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

Destroy an existing DeviceBuffer instance.

Definition at line 248 of file DeviceBuffer.hxx.

◆ get()

template<typename T >
size_t DeviceBuffer< 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

Definition at line 281 of file DeviceBuffer.hxx.

◆ member_size()

template<typename T >
static constexpr unsigned DeviceBuffer< T >::member_size ( )
inlinestaticconstexpr
Returns
the size of each member in bytes.

Definition at line 239 of file DeviceBuffer.hxx.

◆ put()

template<typename T >
size_t DeviceBuffer< 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

Definition at line 258 of file DeviceBuffer.hxx.

Member Data Documentation

◆ data

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

buffer data

Definition at line 351 of file DeviceBuffer.hxx.


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