Buffer Class Reference

A thread-safe buffer for serializing and streaming class data. More...

#include <containers.h>

Inheritance diagram for Buffer:
Inheritance graph
[legend]

Public Member Functions

unsigned count (void)
 Get the number of objects in the buffer currently.
 operator bool ()
 Test if there is data waiting in the buffer.
bool operator! ()
 Test if the buffer is empty.
unsigned size (void)
 Get the size of the buffer.

Protected Member Functions

 Buffer (size_t typesize, size_t count)
 Create a buffer to hold a series of objects.
bool copy (void *data, timeout_t timeout)
 Copy the next object from the buffer.
void copy (void *data)
 Copy the next object from the buffer.
void * get (void)
 Get the next object from the buffer.
void * get (timeout_t timeout)
 Get the next object from the buffer.
virtual void * invalid (void) const
void * peek (unsigned item)
 Peek at pending data in buffer.
bool put (void *data, timeout_t timeout)
 Put (copy) an object into the buffer.
void put (void *data)
 Put (copy) an object into the buffer.
void release (void)
 Release must be called when we get an object from the buffer.
virtual ~Buffer ()
 Deallocate buffer and unblock any waiting threads.

Related Functions

(Note that these are not member functions.)



size_t get (Buffer &b, void *o, timeout_t t=0)
size_t peek (Buffer &b, void *o)
size_t put (Buffer &b, void *o, timeout_t t=0)

Detailed Description

A thread-safe buffer for serializing and streaming class data.

While the queue and stack operate by managing lists of reference pointers to objects of various mixed kind, the buffer holds physical copies of objects that being passed through it, and all must be the same size. For this reason the buffer is normally used through the bufferof<type> template rather than stand-alone. The buffer is accessed in fifo order.

Author:
David Sugar <dyfet@gnutelephony.org>

Definition at line 96 of file containers.h.


Constructor & Destructor Documentation

Buffer::Buffer ( size_t  typesize,
size_t  count 
) [protected]

Create a buffer to hold a series of objects.

Parameters:
size of each object in buffer.
count of objects in the buffer.

Member Function Documentation

bool Buffer::copy ( void *  data,
timeout_t  timeout 
) [protected]

Copy the next object from the buffer.

Buffer is auto-released.

Parameters:
data pointer to copy into.
timeout to wait when buffer is empty in milliseconds.
Returns:
true if object copied, or false if timed out.
void Buffer::copy ( void *  data  )  [protected]

Copy the next object from the buffer.

This blocks until an object becomes available. Buffer is auto-released.

Parameters:
data pointer to copy into.
unsigned Buffer::count ( void   ) 

Get the number of objects in the buffer currently.

Returns:
number of objects buffered.
void* Buffer::get ( void   )  [protected]

Get the next object from the buffer.

This blocks until an object becomes available.

Returns:
pointer to next object from buffer.

Reimplemented in bufferof< T >.

void* Buffer::get ( timeout_t  timeout  )  [protected]

Get the next object from the buffer.

Parameters:
timeout to wait when buffer is empty in milliseconds.
Returns:
pointer to next object in the buffer or NULL if timed out.

Reimplemented in bufferof< T >.

Buffer::operator bool (  ) 

Test if there is data waiting in the buffer.

Returns:
true if buffer has data.
bool Buffer::operator! (  ) 

Test if the buffer is empty.

Returns:
true if the buffer is empty.
void* Buffer::peek ( unsigned  item  )  [protected]

Peek at pending data in buffer.

This returns a pointer to objects relative to the head. In effect it is the same as get() for item = 0.

Parameters:
item to examine in buffer.
Returns:
pointer to item or NULL if invalid item number.
bool Buffer::put ( void *  data,
timeout_t  timeout 
) [protected]

Put (copy) an object into the buffer.

Parameters:
data to copy into the buffer.
timeout to wait if buffer is full.
Returns:
true if copied, false if timed out while full.
void Buffer::put ( void *  data  )  [protected]

Put (copy) an object into the buffer.

This blocks while the buffer is full.

Parameters:
data to copy into the buffer.
void Buffer::release ( void   )  [protected]

Release must be called when we get an object from the buffer.

This is because the pointer we return is a physical pointer to memory that is part of the buffer. The object we get cannot be removed or the memory modified while the object is being used.

unsigned Buffer::size ( void   ) 

Get the size of the buffer.

Returns:
size of the buffer.

Friends And Related Function Documentation

size_t get ( Buffer b,
void *  o,
timeout_t  t = 0 
) [related]

Definition at line 894 of file thread.h.

size_t peek ( Buffer b,
void *  o 
) [related]

Definition at line 902 of file thread.h.

Here is the call graph for this function:

size_t put ( Buffer b,
void *  o,
timeout_t  t = 0 
) [related]

Definition at line 898 of file thread.h.


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

Generated on 24 Sep 2014 for ucommon by  doxygen 1.6.1