#include <buffer.h>
Inheritance diagram for ost::Buffer:
Public Member Functions | |
Buffer (size_t capacity) | |
Create a buffer object of known capacity. | |
virtual | ~Buffer () |
In derived functions, may be used to free the actual memory used to hold buffered data. | |
size_t | getSize (void) |
Return the capacity of the buffer as specified at creation. | |
size_t | getUsed (void) |
Return the current capacity in use for the buffer. | |
size_t | wait (void *buf, timeout_t timeout=0) |
Let one or more threads wait for an object to become available in the buffer. | |
size_t | post (void *buf, timeout_t timeout=0) |
Post an object into the buffer and enable a waiting thread to receive it. | |
size_t | peek (void *buf) |
Peek at the current content (first object) in the buffer. | |
virtual bool | isValid (void) |
New virtual to test if buffer is a valid object. | |
Static Public Attributes | |
const size_t | timeout |
value to return when a timed operation returned with a timeout. | |
Protected Member Functions | |
virtual size_t | onPeek (void *buf)=0 |
Invoke derived class buffer peeking method. | |
virtual size_t | onWait (void *buf)=0 |
Invoke derived class object request from buffer. | |
virtual size_t | onPost (void *buf)=0 |
Invoke derived class posting of object to buffer. | |
Related Functions | |
(Note that these are not member functions.) | |
size_t | get (Buffer &b, void *o, timeout_t t=0) |
size_t | put (Buffer &b, void *o, timeout_t t=0) |
size_t | peek (Buffer &b, void *o) |
Producer threads post objects into the buffer, and consumer threads wait for and receive objects from the buffer. Semaphores are used to to block the buffer from overflowing and indicate when there is data available, and mutexes are used to protect multiple consumers and producer threads from stepping over each other.
The buffer class is an abstract class in that the actual data being buffered is not directly specified within the buffer class itself. The buffer class should be used as a base class for a class that actually impliments buffering and which may be aware of the data types actually are being buffered. A template class could be created based on buffer for this purpose. Another possibility is to create a class derived from both Thread and Buffer which can be used to implement message passing threads.
|
Create a buffer object of known capacity.
|
|
In derived functions, may be used to free the actual memory used to hold buffered data.
|
|
Return the capacity of the buffer as specified at creation.
|
|
Return the current capacity in use for the buffer. Free space is technically getSize() - getUsed().
|
|
New virtual to test if buffer is a valid object.
Reimplemented in ost::FixedBuffer. |
|
Invoke derived class buffer peeking method.
Implemented in ost::FixedBuffer. |
|
Invoke derived class posting of object to buffer.
Implemented in ost::FixedBuffer. |
|
Invoke derived class object request from buffer.
Implemented in ost::FixedBuffer. |
|
Peek at the current content (first object) in the buffer.
|
|
Post an object into the buffer and enable a waiting thread to receive it.
|
|
Let one or more threads wait for an object to become available in the buffer. The waiting thread(s) will wait forever if no object is ever placed into the buffer.
|
|
|
|
|
|
|
|
value to return when a timed operation returned with a timeout.
|