|
BDE 4.39.x Production Release
|
#include <bdlcc_deque.h>
This class provides a fully thread-safe implementation of an efficient, in-place, indexable, double-ended queue of (template parameter) TYPE values. Direct access to the underlying bsl::deque<TYPE> object is provided through the nested Proctor and ConstProctor classes. While this class is not value-semantic, the underlying bsl::deque<TYPE> class is.
See bdlcc_deque
Classes | |
| class | ConstProctor |
| class | DequeThrowGuard |
| class | Proctor |
Public Types | |
| typedef bsl::deque< TYPE > | MonoDeque |
| typedef MonoDeque::size_type | size_type |
Public Member Functions | |
| Deque (bslma::Allocator *basicAllocator=0) | |
| Deque (bsls::SystemClockType::Enum clockType, bslma::Allocator *basicAllocator=0) | |
| Deque (bsl::size_t highWaterMark, bslma::Allocator *basicAllocator=0) | |
| Deque (bsl::size_t highWaterMark, bsls::SystemClockType::Enum clockType, bslma::Allocator *basicAllocator=0) | |
| template<class INPUT_ITER > | |
| Deque (INPUT_ITER begin, INPUT_ITER end, bslma::Allocator *basicAllocator=0) | |
| template<class INPUT_ITER > | |
| Deque (INPUT_ITER begin, INPUT_ITER end, bsls::SystemClockType::Enum clockType, bslma::Allocator *basicAllocator=0) | |
| template<class INPUT_ITER > | |
| Deque (INPUT_ITER begin, INPUT_ITER end, bsl::size_t highWaterMark, bslma::Allocator *basicAllocator=0) | |
| template<class INPUT_ITER > | |
| Deque (INPUT_ITER begin, INPUT_ITER end, bsl::size_t highWaterMark, bsls::SystemClockType::Enum clockType, bslma::Allocator *basicAllocator=0) | |
| Deque (const Deque< TYPE > &original, bslma::Allocator *basicAllocator=0) | |
| ~Deque () | |
| void | forcePushBack (const TYPE &item) |
| void | forcePushBack (bslmf::MovableRef< TYPE > item) |
| template<class INPUT_ITER > | |
| void | forcePushBack (INPUT_ITER begin, INPUT_ITER end) |
| void | forcePushFront (const TYPE &item) |
| void | forcePushFront (bslmf::MovableRef< TYPE > item) |
| template<class INPUT_ITER > | |
| void | forcePushFront (INPUT_ITER begin, INPUT_ITER end) |
| TYPE | popBack () |
| void | popBack (TYPE *item) |
| TYPE | popFront () |
| void | popFront (TYPE *item) |
| void | pushBack (const TYPE &item) |
| void | pushBack (bslmf::MovableRef< TYPE > item) |
| void | pushFront (const TYPE &item) |
| void | pushFront (bslmf::MovableRef< TYPE > item) |
| void | removeAll () |
| void | removeAll (bsl::vector< TYPE > *buffer) |
| void | removeAll (std::vector< TYPE > *buffer) |
| int | timedPopBack (TYPE *item, const bsls::TimeInterval &timeout) |
| int | timedPopFront (TYPE *item, const bsls::TimeInterval &timeout) |
| int | timedPushBack (const TYPE &item, const bsls::TimeInterval &timeout) |
| int | timedPushBack (bslmf::MovableRef< TYPE > item, const bsls::TimeInterval &timeout) |
| int | timedPushFront (const TYPE &item, const bsls::TimeInterval &timeout) |
| int | timedPushFront (bslmf::MovableRef< TYPE > item, const bsls::TimeInterval &timeout) |
| int | tryPopBack (TYPE *item) |
| void | tryPopBack (size_type maxNumItems) |
| void | tryPopBack (size_type maxNumItems, bsl::vector< TYPE > *buffer) |
| void | tryPopBack (size_type maxNumItems, std::vector< TYPE > *buffer) |
| int | tryPopFront (TYPE *item) |
| void | tryPopFront (size_type maxNumItems) |
| void | tryPopFront (size_type maxNumItems, bsl::vector< TYPE > *buffer) |
| void | tryPopFront (size_type maxNumItems, std::vector< TYPE > *buffer) |
| int | tryPushBack (const TYPE &item) |
| int | tryPushBack (bslmf::MovableRef< TYPE > item) |
| template<class INPUT_ITER > | |
| size_type | tryPushBack (INPUT_ITER begin, INPUT_ITER end) |
| int | tryPushFront (const TYPE &item) |
| int | tryPushFront (bslmf::MovableRef< TYPE > item) |
| template<class INPUT_ITER > | |
| size_type | tryPushFront (INPUT_ITER begin, INPUT_ITER end) |
| bslma::Allocator * | allocator () const |
| bsls::SystemClockType::Enum | clockType () const |
| size_type | highWaterMark () const |
| size_type | length () const |
| template<class VECTOR > | |
| void | tryPopBackImp (typename Deque< TYPE >::size_type maxNumItems, VECTOR *buffer) |
| template<class VECTOR > | |
| void | tryPopFrontImp (typename Deque< TYPE >::size_type maxNumItems, VECTOR *buffer) |
Static Public Member Functions | |
| static size_type | maxSizeT () |
| typedef bsl::deque<TYPE> bdlcc::Deque< TYPE >::MonoDeque |
| typedef MonoDeque::size_type bdlcc::Deque< TYPE >::size_type |
|
inlineexplicit |
Create a container of objects of (template parameter) TYPE, with no high water mark, and use the specified clockType to indicate the epoch used for all time intervals (see {Supported Clock-Types} in the component documentation). If basicAllocator is 0, the currently installed default allocator is used.
|
inlineexplicit |
|
inlineexplicit |
Create a container of objects of (template parameter) TYPE, with the specified highWaterMark, and use the specified clockType to indicate the epoch used for all time intervals (see {Supported Clock-Types} in the component documentation). Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0, the currently installed default allocator is used.
highWaterMark > 0.
|
inline |
|
inline |
Create a container of objects of (template parameter) TYPE containing the sequence of elements in the specified range [begin .. end), having no high water mark, and use the specified clockType to indicate the epoch used for all time intervals (see {Supported Clock-Types} in the component documentation). Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0, the currently installed default allocator is used.
const objects, copied without being modified.
|
inline |
|
inline |
Create a container of objects of (template parameter) TYPE containing the sequence of TYPE values in the specified range [begin .. end) having the specified highWaterMark, and use the specified clockType to indicate the epoch used for all time intervals (see {Supported Clock-Types} in the component documentation). Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0, the currently installed default allocator is used.
highWaterMark > 0. [begin, end) exceeds highWaterMark, the effect will be the same as if the extra elements were added by forced pushes. Also note that the items in the range are treated as const objects, copied without being modified.
|
inline |
|
inline |
Create a container having the same value as the specified original object. Optionally specify a basicAllocator used to supply memory. If basicAllocator is 0, the currently installed default allocator is used.
|
inline |
Destroy this container.
|
inline |
Return the allocator used by this container for allocating memory.
|
inline |
Return the system clock type used for timing timed* operations on this object (see {Supported Clock-Types} in the component documentation).
|
inline |
Append the specified move-insertable item to the back of this container without regard for the high-water mark. item is left in a valid but unspecified state.
pushFront and pushBack should be used for general use.
|
inline |
Append the specified item to the back of this container without regard for the high-water mark.
pushFront and pushBack should be used for general use.
|
inline |
Append the specified specified range [begin .. end) of items to the back of this container without regard for the high-water mark.
const objects, copied without being modified.
|
inline |
Append the specified move-insertable item to the front of this container without regard for the high-water mark. item is left in a valid but unspecified state.
pushFront and pushBack should be used for general use.
|
inline |
Append the specified item to the front of this container without regard for the high-water mark.
pushFront and pushBack should be used for general use.
|
inline |
Append the specified specified range [begin .. end) of items to the front of this container without regard for the high-water mark.
const objects, copied without being modified.
|
inline |
Return the high-water mark value for this container.
|
inline |
Return the number of elements contained in this container.
proctor->size().
|
inlinestatic |
Return the maximum value that can be stored in a veriable of type size_type. The high water mark defaults to having this value.
| TYPE bdlcc::Deque< TYPE >::popBack | ( | ) |
Return the last item in this container and remove it. If this container is empty, block until an item is available.
| void bdlcc::Deque< TYPE >::popBack | ( | TYPE * | item | ) |
Remove the last item in this container and load that item into the specified *item. If this container is empty, block until an item is available.
| TYPE bdlcc::Deque< TYPE >::popFront | ( | ) |
Return the first item in this container and remove it. If this container is empty, block until an item is available.
| void bdlcc::Deque< TYPE >::popFront | ( | TYPE * | item | ) |
Remove the first item in this container and load that item into the specified *item. If the container is empty, block until an item is available.
| void bdlcc::Deque< TYPE >::pushBack | ( | bslmf::MovableRef< TYPE > | item | ) |
Block until space in this container becomes available (see {High-Water Mark Feature}), then append the specified move-insertable item to the back of this container. item is left in a valid but unspecified state.
| void bdlcc::Deque< TYPE >::pushBack | ( | const TYPE & | item | ) |
Block until space in this container becomes available (see {High-Water Mark Feature}), then append the specified item to the back of this container.
| void bdlcc::Deque< TYPE >::pushFront | ( | bslmf::MovableRef< TYPE > | item | ) |
Block until space in this container becomes available (see {High-Water Mark Feature}), then append the specified move-insertable item to the front of this container. item is left in a valid but unspecified state.
| void bdlcc::Deque< TYPE >::pushFront | ( | const TYPE & | item | ) |
Block until space in this container becomes available (see {High-Water Mark Feature}), then append the specified item to the front of this container.
|
inline |
If the optionally specified buffer is non-zero, append all the elements from this container to *buffer in the same order, then, regardless of whether buffer is zero, clear this container.
*buffer are not discarded – the removed items are appended to it.
|
inline |
|
inline |
| int bdlcc::Deque< TYPE >::timedPopBack | ( | TYPE * | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Remove the last item in this container and load that item value into the specified *item. If this container is empty, block until an item is available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. Return 0 on success, and a non-zero value if the call timed out before an item was available.
timeout. | int bdlcc::Deque< TYPE >::timedPopFront | ( | TYPE * | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Remove the first item in this container and load that item value into the specified *item. If this container is empty, block until an item is available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. Return 0 on success, and a non-zero value if the call timed out before an item was available.
timeout. | int bdlcc::Deque< TYPE >::timedPushBack | ( | bslmf::MovableRef< TYPE > | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Append the specified move-insertable item to the back of this container if space is available, otherwise (if the container is full) block waiting for space to become available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. If the container is modified, item is left in a valid but unspecified state, otherwise item is unchanged. Return 0 if space was or became available and this container was updated, and a non-zero value if the call timed out before space became available and this container was left unmodified.
timeout. | int bdlcc::Deque< TYPE >::timedPushBack | ( | const TYPE & | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Append the specified item to the back of this container if space is available, otherwise (if the container is full) block waiting for space to become available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. Return 0 if space was or became available and this container was updated, and a non-zero value if the call timed out before space became available and this container was left unmodified.
timeout. | int bdlcc::Deque< TYPE >::timedPushFront | ( | bslmf::MovableRef< TYPE > | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Append the specified move-insertable item to the front of this container if space is available, otherwise (if the container is full) block waiting for space to become available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. If the container is modified,item is left in a valid but unspecified state, otherwise item is left unchanged. Return 0 if space was or became available and this container was updated, and a non-zero value if the call timed out before space became available and this container was left unmodified.
timeout. | int bdlcc::Deque< TYPE >::timedPushFront | ( | const TYPE & | item, |
| const bsls::TimeInterval & | timeout | ||
| ) |
Append the specified item to the front of this container if space is available, otherwise (if the container is full) block waiting for space to become available or until the specified timeout (expressed as the ABSOLUTE time from 00:00:00 UTC, January 1, 1970) expires. Return 0 if space was or became available and this container was updated, and a non-zero value if the call timed out before space became available and this container was left unmodified.
timeout. | void bdlcc::Deque< TYPE >::tryPopBack | ( | size_type | maxNumItems | ) |
Remove up to the specified maxNumItems from the back of this container. Optionally specify a buffer into which the items removed from the container are loaded. If buffer is non-null, the removed items are appended to it as if by repeated application of buffer->push_back(popBack()) while the container is not empty and maxNumItems have not yet been removed.
*buffer after the call is the reverse of the ordering they had in the deque. Also note that *buffer is not cleared – the popped items are appended after any pre-existing contents.Also note that to transfer the entire contents of a Deque d to a vector v, use d.removeAll(&v);.
| void bdlcc::Deque< TYPE >::tryPopBack | ( | size_type | maxNumItems, |
| bsl::vector< TYPE > * | buffer | ||
| ) |
| void bdlcc::Deque< TYPE >::tryPopBack | ( | size_type | maxNumItems, |
| std::vector< TYPE > * | buffer | ||
| ) |
| int bdlcc::Deque< TYPE >::tryPopBack | ( | TYPE * | item | ) |
If this container is non-empty, remove the last item, load that item into the specified *item, and return 0 indicating success. If this container is empty, return a non-zero value with no effect on item or the state of this container.
| void bdlcc::Deque< TYPE >::tryPopBackImp | ( | typename Deque< TYPE >::size_type | maxNumItems, |
| VECTOR * | buffer | ||
| ) |
| void bdlcc::Deque< TYPE >::tryPopFront | ( | size_type | maxNumItems | ) |
Remove up to the specified maxNumItems from the front of this container. Optionally specify a buffer into which the items removed from the container are appended. If buffer is non-null, the removed items are appended to it as if by repeated application of buffer->push_back(popFront()) while the const is not empty and maxNumItems have not yet been removed.
*buffer is not cleared – the popped items are appended after any pre-existing contents.Also note that to transfer the entire contents of a Deque d to a vector v, use d.removeAll(&v);.
| void bdlcc::Deque< TYPE >::tryPopFront | ( | size_type | maxNumItems, |
| bsl::vector< TYPE > * | buffer | ||
| ) |
| void bdlcc::Deque< TYPE >::tryPopFront | ( | size_type | maxNumItems, |
| std::vector< TYPE > * | buffer | ||
| ) |
| int bdlcc::Deque< TYPE >::tryPopFront | ( | TYPE * | item | ) |
If this container is non-empty, remove the first item, load that item into the specified *item, and return 0 indicating success. If this container is empty, return a non-zero value with no effect on *item or the state of this container.
| void bdlcc::Deque< TYPE >::tryPopFrontImp | ( | typename Deque< TYPE >::size_type | maxNumItems, |
| VECTOR * | buffer | ||
| ) |
| int bdlcc::Deque< TYPE >::tryPushBack | ( | bslmf::MovableRef< TYPE > | item | ) |
If the container is not full (see {High-Water Mark Feature}), append the specified move-insertable item to the back of the container, otherwise leave the container unchanged. If the container is modified, item is left in a valid but unspecified state, otherwise item is unchanged. Return 0 if the container was updated and a non-zero value otherwise.
| int bdlcc::Deque< TYPE >::tryPushBack | ( | const TYPE & | item | ) |
If the container is not full (see {High-Water Mark Feature}), append the specified item to the back of the container, otherwise leave the container unchanged. Return 0 if the container was updated and a non-zero value otherwise.
| Deque< TYPE >::size_type bdlcc::Deque< TYPE >::tryPushBack | ( | INPUT_ITER | begin, |
| INPUT_ITER | end | ||
| ) |
Push as many of the items in the specified range [begin .. end) as there is space available for (see {High-Water Mark Feature}) to the back of the container, stopping if the container high-water mark is reached. Return the number of items pushed.
const objects, copied without being modified. | int bdlcc::Deque< TYPE >::tryPushFront | ( | bslmf::MovableRef< TYPE > | item | ) |
If the container is not full (see {High-Water Mark Feature}), append the specified move-insertable item to the front of the container, otherwise leave the container unchanged. If the container is modified, item is left in a valid but unspecified state, otherwise item is unchanged. Return 0 if the container was updated and a non-zero value otherwise.
| int bdlcc::Deque< TYPE >::tryPushFront | ( | const TYPE & | item | ) |
If the container is not full (see {High-Water Mark Feature}), append the specified item to the front of the container, otherwise leave the container unchanged. Return 0 if the container was updated and a non-zero value otherwise.
| Deque< TYPE >::size_type bdlcc::Deque< TYPE >::tryPushFront | ( | INPUT_ITER | begin, |
| INPUT_ITER | end | ||
| ) |
Push as many of the items in the specified range [begin .. end) as there is space available for (see {High-Water Mark Feature}) to the front of the container, stopping if the container high-water mark is reached. Return the number of items pushed.
const objects, copied without being modified.