ucommon::Queue Class Reference

Manage a thread-safe queue of objects through reference pointers. More...

#include <containers.h>

Inheritance diagram for ucommon::Queue:
Inheritance graph
[legend]
Collaboration diagram for ucommon::Queue:
Collaboration graph
[legend]

Public Member Functions

size_t count (void)
 Get number of object points currently in the queue.
ObjectProtocolfifo (timeout_t timeout=0)
 Get and remove last object posted to the queue.
ObjectProtocolget (unsigned offset=0)
 Examine pending existing object in queue.
ObjectProtocollifo (timeout_t timeout=0)
 Get and remove first object posted to the queue.
bool post (ObjectProtocol *object, timeout_t timeout=0)
 Post an object into the queue by it's pointer.
 Queue (mempager *pager=NULL, 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.

Protected Member Functions

virtual ObjectProtocolinvalid (void) const

Protected Attributes

size_t limit

Friends

class member

Detailed Description

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.

Author:
David Sugar <dyfet@gnutelephony.org>

Definition at line 215 of file containers.h.


Constructor & Destructor Documentation

ucommon::Queue::Queue ( mempager pager = NULL,
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.

Parameters:
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.


Member Function Documentation

size_t ucommon::Queue::count ( void   ) 

Get number of object points currently in the queue.

Returns:
number of objects in queue.
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.

Parameters:
timeout to wait if empty in milliseconds.
Returns:
object from queue or NULL if empty and timed out.

Reimplemented in ucommon::queueof< T >.

ObjectProtocol* ucommon::Queue::get ( unsigned  offset = 0  ) 

Examine pending existing object in queue.

Does not remove it.

Parameters:
number of elements back.
Returns:
object in queue or NULL if invalid value.
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.

Parameters:
timeout to wait if empty in milliseconds.
Returns:
object from queue or NULL if empty and timed out.

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.

Parameters:
object to post.
timeout to wait if queue is full in milliseconds.
Returns:
true if object posted, false if queue full and timeout expired.
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.

Parameters:
object to remove.
Returns:
true if object was removed, false if not found.

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

Generated on 30 Jul 2013 for UCommon by  doxygen 1.6.1