UCommon
|
Manage a thread-safe queue of objects through reference pointers. More...
#include <containers.h>
Public Member Functions | |
ObjectProtocol * | fifo (timeout_t timeout=0) |
Get and remove last object posted to the queue. | |
size_t | getCount (void) |
Get number of object points currently in the queue. | |
ObjectProtocol * | lifo (timeout_t timeout=0) |
Get and remove first object posted to the queue. | |
ObjectProtocol * | operator[] (unsigned pos) |
ObjectProtocol * | peek (unsigned offset=0) |
Examine pending existing object in queue. | |
bool | post (ObjectProtocol *object, timeout_t timeout=0) |
Post an object into the queue by it's pointer. | |
queue (mempager *pager=((void *) 0), size_t number=0) | |
Create a queue that uses a memory pager for internally managed member objects for a specified maximum number of object pointers. | |
bool | remove (ObjectProtocol *object) |
Remove a specific object pointer for the queue. | |
~queue () | |
Destroy queue. |
Static Public Member Functions | |
static size_t | count (queue &queue) |
Convenience function to get count of objects in the queue. | |
static ObjectProtocol * | fifo (queue &queue, timeout_t timeout=0) |
Convenience function get first object from the queue. | |
static ObjectProtocol * | lifo (queue &queue, timeout_t timeout=0) |
Convenience function get last object from the queue. | |
static bool | post (queue &queue, ObjectProtocol *object, timeout_t timeout=0) |
Convenience function to post object into the queue. | |
static bool | remove (queue &queue, ObjectProtocol *object) |
Convenience function to remove an object from the queue. |
Protected Attributes | |
size_t | limit |
Friends | |
class | member |
Additional Inherited Members | |
![]() | |
void | add (OrderedObject *ordered) |
Add an object into the ordered index. | |
LinkedObject * | begin (void) const |
Return first object in list for iterators. | |
unsigned | count (void) const |
Count of objects this list manages. | |
LinkedObject * | end (void) const |
Return last object in list for iterators. | |
LinkedObject * | find (unsigned offset) const |
Find a specific member in the ordered list. | |
LinkedObject * | get (void) |
Get (pull) object off the list. | |
LinkedObject * | getIndexed (unsigned index) const |
Get an indexed member from the ordered index. | |
LinkedObject ** | index (void) const |
Return a pointer to the head of the list. | |
virtual void | lock_index (void) |
Used to synchronize lists managed by multiple threads. | |
LinkedObject * | operator* () const |
Return head object pointer. | |
void | operator*= (OrderedObject *object) |
Add object to our list. | |
OrderedIndex () | |
Create and initialize an empty index. | |
void | purge (void) |
Purge the linked list and then set the index to empty. | |
void | reset (void) |
Reset linked list to empty without purging. | |
virtual void | unlock_index (void) |
Used to synchronize lists managed by multiple threads. | |
virtual | ~OrderedIndex () |
Destroy index. | |
![]() | |
static void | gettimeout (timeout_t timeout, struct timespec *hires) |
Convert a millisecond timeout into use for high resolution conditional timers. | |
static pthread_condattr_t * | initializer (void) |
Support function for getting conditional attributes for realtime scheduling. |
Manage a thread-safe queue of objects through reference pointers.
This can be particularly interesting when used to enqueue/dequeue reference counted managed objects. Thread-safe access is managed through a conditional. Both lifo and fifo forms of queue access may be used. A pool of self-managed member objects are used to operate the queue. This queue is optimized for fifo access; while lifo is supported, it will be slow. If you need primarily lifo, you should use stack instead.
Definition at line 212 of file containers.h.
ucommon::queue::queue | ( | mempager * | pager = ((void *) 0) , |
size_t | number = 0 |
||
) |
Create a queue that uses a memory pager for internally managed member objects for a specified maximum number of object pointers.
pager | to use for internal member object or NULL to use heap. |
number | of pointers that can be in the queue or 0 for unlimited. size limit. |
ucommon::queue::~queue | ( | ) |
Destroy queue.
If no mempager is used, then frees heap.
|
inlinestatic |
Convenience function to get count of objects in the queue.
queue | to count. |
Definition at line 338 of file containers.h.
ObjectProtocol* ucommon::queue::fifo | ( | timeout_t | timeout = 0 | ) |
Get and remove last object posted to the queue.
This can wait for a specified timeout of the queue is empty. The object is still retained and must be released or deleted by the receiving function.
timeout | to wait if empty in milliseconds. |
Reimplemented in ucommon::queueof< T >.
|
inlinestatic |
Convenience function get first object from the queue.
queue | to get from. |
timeout | to wait if empty. |
Definition at line 321 of file containers.h.
size_t ucommon::queue::getCount | ( | void | ) |
Get number of object points currently in the queue.
ObjectProtocol* ucommon::queue::lifo | ( | timeout_t | timeout = 0 | ) |
Get and remove first object posted to the queue.
This can wait for a specified timeout of the queue is empty. The object is still retained and must be released or deleted by the receiving function.
timeout | to wait if empty in milliseconds. |
Reimplemented in ucommon::queueof< T >.
|
inlinestatic |
Convenience function get last object from the queue.
queue | to get from. |
timeout | to wait if empty. |
Definition at line 330 of file containers.h.
ObjectProtocol* ucommon::queue::peek | ( | unsigned | offset = 0 | ) |
Examine pending existing object in queue.
Does not remove it.
number | of elements back. |
Reimplemented in ucommon::queueof< T >.
bool ucommon::queue::post | ( | ObjectProtocol * | object, |
timeout_t | timeout = 0 |
||
) |
Post an object into the queue by it's pointer.
This can wait for a specified timeout if the queue is full, for example, for another thread to remove an object pointer. This also retains the object.
object | to post. |
timeout | to wait if queue is full in milliseconds. |
|
inlinestatic |
Convenience function to post object into the queue.
queue | to post into. |
object | to post. |
timeout | to wait if full. |
Definition at line 312 of file containers.h.
bool ucommon::queue::remove | ( | ObjectProtocol * | object | ) |
Remove a specific object pointer for the queue.
This can remove a member from any location in the queue, whether beginning, end, or somewhere in the middle. This also releases the object.
object | to remove. |
|
inlinestatic |
Convenience function to remove an object from the queue.
queue | to remove object from. |
object | to remove. |
Definition at line 302 of file containers.h.