#include <bdlcc_singleconsumerqueueimpl.h>
List of all members.
Classes |
struct | QueueNode |
Public Types |
enum | { e_SUCCESS = 0,
e_EMPTY = -1,
e_DISABLED = -2
} |
typedef TYPE | value_type |
Public Member Functions |
| BSLMF_NESTED_TRAIT_DECLARATION (SingleConsumerQueueImpl, bslma::UsesBslmaAllocator) |
| SingleConsumerQueueImpl (bslma::Allocator *basicAllocator=0) |
| SingleConsumerQueueImpl (bsl::size_t capacity, bslma::Allocator *basicAllocator=0) |
| ~SingleConsumerQueueImpl () |
int | popFront (TYPE *value) |
int | pushBack (const TYPE &value) |
int | pushBack (bslmf::MovableRef< TYPE > value) |
void | removeAll () |
int | tryPopFront (TYPE *value) |
int | tryPushBack (const TYPE &value) |
int | tryPushBack (bslmf::MovableRef< TYPE > value) |
void | disablePopFront () |
void | disablePushBack () |
void | enablePopFront () |
void | enablePushBack () |
bool | isEmpty () const |
bool | isFull () const |
bool | isPopFrontDisabled () const |
bool | isPushBackDisabled () const |
bsl::size_t | numElements () const |
int | waitUntilEmpty () const |
bslma::Allocator * | allocator () const |
Friends |
class | SingleConsumerQueueImpl_MarkReclaimProctor< SingleConsumerQueueImpl< TYPE, ATOMIC_OP, MUTEX, CONDITION >, typename SingleConsumerQueueImpl< TYPE, ATOMIC_OP, MUTEX, CONDITION >::Node > |
class | SingleConsumerQueueImpl_PopCompleteGuard< SingleConsumerQueueImpl< TYPE, ATOMIC_OP, MUTEX, CONDITION > > |
class | SingleConsumerQueueImpl_AllocateLockGuard< SingleConsumerQueueImpl< TYPE, ATOMIC_OP, MUTEX, CONDITION > > |
Detailed Description
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
class bdlcc::SingleConsumerQueueImpl< TYPE, ATOMIC_OP, MUTEX, CONDITION >
This class provides a thread-safe unbounded queue of values that assumes a single consumer thread.
The types ATOMIC_OP
, MUTEX
, and CONDITION
are exposed for testing. Typical usage is with bsls::AtomicOperations
for ATOMIC_OP
, bslmt::Mutex
for MUTEX
, and bslmt::Condition
for CONDITION
.
See Component bdlcc_singleconsumerqueueimpl
Member Typedef Documentation
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Member Enumeration Documentation
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
- Enumerator:
e_SUCCESS |
must be 0
|
e_EMPTY |
|
e_DISABLED |
|
Constructor & Destructor Documentation
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Create a thread-aware queue. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Create a thread-aware queue with, at least, the specified capacity
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Destroy this container. The behavior is undefined unless all access or modification of the container has completed prior to this call.
Member Function Documentation
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Remove the element from the front of this queue and load that element into the specified value
. If the queue is empty, block until it is not empty. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if isPopFrontDisabled()
. On failure, value
is not changed. Threads blocked due to the queue being empty will return e_DISABLED
if disablePopFront
is invoked. The behavior is undefined unless the invoker of this method is the single consumer.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Append the specified value
to the back of this queue. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if isPushBackDisabled()
.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Append the specified move-insertable value
to the back of this queue. value
is left in a valid but unspecified state. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if isPushBackDisabled()
. On failure, value
is not changed.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Remove all items currently in this queue. Note that this operation is not atomic; if other threads are concurrently pushing items into the queue the result of numElements()
after this function returns is not guaranteed to be 0. The behavior is undefined unless the invoker of this method is the single consumer.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Attempt to remove the element from the front of this queue without blocking, and, if successful, load the specified value
with the removed element. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if isPopFrontDisabled()
, and e_EMPTY
if !isPopFrontDisabled()
and the queue was empty. On failure, value
is not changed. The behavior is undefined unless the invoker of this method is the single consumer.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Append the specified value
to the back of this queue. Return 0 on success, and a non-zero value otherwise. Specifically, retun e_DISABLED
if isPushBackDisabled()
.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Append the specified move-insertable value
to the back of this queue. value
is left in a valid but unspecified state. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if isPushBackDisabled()
. On failure, value
is not changed.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Disable dequeueing from this queue. All subsequent invocations of popFront
or tryPopFront
will fail immediately. All blocked invocations of popFront
and waitUntilEmpty
will fail immediately. If the queue is already dequeue disabled, this method has no effect.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Disable enqueueing into this queue. All subsequent invocations of pushBack
or tryPushBack
will fail immediately. All blocked invocations of pushBack
will fail immediately. If the queue is already enqueue disabled, this method has no effect.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Enable dequeueing. If the queue is not dequeue disabled, this call has no effect.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Enable queuing. If the queue is not enqueue disabled, this call has no effect.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Return true
if this queue is empty (has no elements), or false
otherwise.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Return true
if this queue is full (has no available capacity), or false
otherwise. Note that for unbounded queues, this method always returns false
.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Return true
if this queue is dequeue disabled, and false
otherwise. Note that the queue is created in the "dequeue enabled" state.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Return true
if this queue is enqueue disabled, and false
otherwise. Note that the queue is created in the "enqueue enabled" state.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Returns the number of elements currently in this queue.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Block until all the elements in this queue are removed. Return 0 on success, and a non-zero value otherwise. Specifically, return e_DISABLED
if !isEmpty() && isPopFrontDisabled()
. A blocked thread waiting for the queue to empty will return e_DISABLED
if disablePopFront
is invoked.
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
Return the allocator used by this object to supply memory.
Friends And Related Function Documentation
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
template<class TYPE, class ATOMIC_OP, class MUTEX, class CONDITION>
The documentation for this class was generated from the following file: