UCommon
Public Member Functions | Protected Member Functions | Protected Attributes | Friends
ucommon::Stack Class Reference

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

#include <containers.h>

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

Public Member Functions

size_t count (void)
 Get number of object points currently in the stack. More...
 
ObjectProtocolget (unsigned offset=0)
 Examine an existing object on the stack. More...
 
const ObjectProtocolpeek (timeout_t timeout=0)
 
ObjectProtocolpull (timeout_t timeout=0)
 Get and remove last object pushed on the stack. More...
 
bool push (ObjectProtocol *object, timeout_t timeout=0)
 Push an object into the stack by it's pointer. More...
 
bool remove (ObjectProtocol *object)
 Remove a specific object pointer for the queue. More...
 
 Stack (mempager *pager=((void *) 0), size_t number=0)
 Create a stack that uses a memory pager for internally managed member objects for a specified maximum number of object pointers. More...
 
virtual ~Stack ()
 Destroy queue. More...
 

Protected Member Functions

virtual ObjectProtocolinvalid (void) const
 

Protected Attributes

size_t limit
 

Friends

class member
 

Additional Inherited Members

- Static Protected Member Functions inherited from ucommon::Conditional
static pthread_condattr_t * initializer (void)
 Support function for getting conditional attributes for realtime scheduling. More...
 
static void set (struct timespec *hires, timeout_t timeout)
 Convert a millisecond timeout into use for high resolution conditional timers. More...
 

Detailed Description

Manage a thread-safe stack of objects through reference pointers.

This Thread-safe access is managed through a conditional. This differs from the queue in lifo mode because delinking the last object is immediate, and because it has much less overhead. A pool of self-managed member objects are used to operate the stack.

Author
David Sugar dyfet.nosp@m.@gnu.nosp@m.telep.nosp@m.hony.nosp@m..org

Definition at line 310 of file containers.h.

Constructor & Destructor Documentation

ucommon::Stack::Stack ( mempager pager = ((void *) 0),
size_t  number = 0 
)

Create a stack that uses a memory pager for internally managed member objects for a specified maximum number of object pointers.

Parameters
pagerto use for internal member object or NULL to use heap.
numberof pointers that can be in the stack or 0 if unlimited.
virtual ucommon::Stack::~Stack ( )
virtual

Destroy queue.

If no pager is used, then frees heap.

Member Function Documentation

size_t ucommon::Stack::count ( void  )

Get number of object points currently in the stack.

Returns
number of objects in stack.
ObjectProtocol* ucommon::Stack::get ( unsigned  offset = 0)

Examine an existing object on the stack.

Parameters
offsetto stack entry.
Returns
object examined.
ObjectProtocol* ucommon::Stack::pull ( timeout_t  timeout = 0)

Get and remove last object pushed on the stack.

This can wait for a specified timeout of the stack is empty. The object is still retained and must be released or deleted by the receiving function.

Parameters
timeoutto wait if empty in milliseconds.
Returns
object pulled from stack or NULL if empty and timed out.
bool ucommon::Stack::push ( ObjectProtocol object,
timeout_t  timeout = 0 
)

Push an object into the stack by it's pointer.

This can wait for a specified timeout if the stack is full, for example, for another thread to remove an object pointer. This also retains the object.

Parameters
objectto push.
timeoutto wait if stack is full in milliseconds.
Returns
true if object pushed, false if stack full and timeout expired.
bool ucommon::Stack::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
objectto remove.
Returns
true if object was removed, false if not found.

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