#include <bsltf_stdstatefulallocator.h>
List of all members.
Classes |
struct | rebind |
Public Types |
typedef TYPE | value_type |
typedef std::size_t | size_type |
typedef std::ptrdiff_t | difference_type |
typedef TYPE * | pointer |
typedef const TYPE * | const_pointer |
typedef TYPE & | reference |
typedef const TYPE & | const_reference |
typedef bsl::integral_constant
< bool,
PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT > | propagate_on_container_copy_assignment |
typedef bsl::integral_constant
< bool,
PROPAGATE_ON_CONTAINER_SWAP > | propagate_on_container_swap |
typedef bsl::integral_constant
< bool,
PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT > | propagate_on_container_move_assignment |
typedef bsl::integral_constant
< bool, IS_ALWAYS_EQUAL > | is_always_equal |
Public Member Functions |
| StdStatefulAllocator (bslma::Allocator *allocator=0) |
| StdStatefulAllocator (const StdStatefulAllocator &original) |
template<class BDE_OTHER_TYPE > |
| StdStatefulAllocator (const StdStatefulAllocator< BDE_OTHER_TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL > &original) |
| ~StdStatefulAllocator () |
StdStatefulAllocator & | operator= (const StdStatefulAllocator &rhs) |
TYPE * | allocate (bslma::Allocator::size_type numElements) |
template<class ELEMENT_TYPE , class... Args> |
void | construct (ELEMENT_TYPE *address, Args &&...arguments) |
void | deallocate (TYPE *address, bslma::Allocator::size_type numElements) |
template<class ELEMENT_TYPE > |
void | destroy (ELEMENT_TYPE *address) |
size_type | max_size () const |
StdStatefulAllocator | select_on_container_copy_construction () const |
bslma::Allocator * | allocator () const |
Detailed Description
template<class TYPE, bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
class bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >
This allocator implements the minimal interface to comply with section 17.6.3.5 ([allocator.requirements]) of the C++11 standard, while maintaining a distinct object state - in this case a wrapped pointer to a bslma::Allocator
. The template is configurable to control its allocator propagation properties, but does not support the BDE "scoped" allocator model, as scoped allocators should never propagate. Instances of this allocator delegate their operations to the wrapped allocator that constitutes its state. Note that while we define the various traits used by the C++11 allocator traits facility, they actually mean very little for this component, as it is the consumer of the allocator's responsibility to check and apply the traits correctly, typically by using bsl::allocator_traits
to perform all memory allocation tasks rather than using the allocator directly. The PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION
flag is consumed directly though, in the static member function select_on_container_copy_construction
.
See Component bsltf_stdstatefulallocator
Member Typedef Documentation
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef TYPE bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::value_type |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef std::size_t bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::size_type |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef std::ptrdiff_t bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::difference_type |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef TYPE* bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::pointer |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef const TYPE* bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::const_pointer |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef TYPE& bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::reference |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
typedef const TYPE& bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::const_reference |
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
Constructor & Destructor Documentation
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::StdStatefulAllocator |
( |
const StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL > & |
original |
) |
|
Create an allocator having the same value as the specified original
object.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class BDE_OTHER_TYPE >
bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::StdStatefulAllocator |
( |
const StdStatefulAllocator< BDE_OTHER_TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL > & |
original |
) |
|
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
Member Function Documentation
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
StdStatefulAllocator& bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::operator= |
( |
const StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL > & |
rhs |
) |
|
Assign to this object the value of the specified rhs
object, and return a reference providing modifiable access to this object.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
Allocate enough (properly aligned) space for the specified numElements
of the (template parameter) type TYPE
.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class ELEMENT_TYPE , class... Args>
void bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::construct |
( |
ELEMENT_TYPE * |
address, |
|
|
Args &&... |
arguments | |
|
) |
| | |
Construct an object of the (template parameter) ELEMENT_TYPE
, by forwarding the specified (variable number of) arguments
to the corresponding constructor of ELEMENT_TYPE
, at the specified uninitialized memory address
. The behavior is undefined unless address
is properly aligned for objects of ELEMENT_TYPE
.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
void bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::deallocate |
( |
TYPE * |
address, |
|
|
bslma::Allocator::size_type |
numElements | |
|
) |
| | |
Return memory previously allocated at the specified address
for numElements
back to this allocator. The numElements
argument is ignored by this allocator type. The behavior is undefined unless address
was allocated using this allocator object and has not already been deallocated.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
template<class ELEMENT_TYPE >
void bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::destroy |
( |
ELEMENT_TYPE * |
address |
) |
|
Invoke the ELEMENT_TYPE
destructor for the object at the specified address
.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
size_type bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::max_size |
( |
|
) |
const |
Return the maximum number of elements of type TYPE
that can be allocated using this allocator in a single call to the allocate
method. Note that there is no guarantee that attempts at allocating less elements than the value returned by max_size
will not throw. *** DO NOT RELY ON THE CONTINUING PRESENT OF THIS METHOD *** THIS METHOD WILL BE REMOVED ONCE bslstl::allocator_traits
PROPERLY DEDUCES AN IMPLEMENTATION FOR THIS FUNCTION WHEN NOT SUPPLIED BY THE ALLOCATOR DIRECTLY.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
StdStatefulAllocator bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::select_on_container_copy_construction |
( |
|
) |
const |
Return a copy of this object if the bool
template parameter PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION
is true, and a copy of a StdStatefulAllocator
object wrapping the default allocator otherwise.
template<class TYPE , bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION = true, bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT = true, bool PROPAGATE_ON_CONTAINER_SWAP = true, bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT = true, bool IS_ALWAYS_EQUAL = false>
bslma::Allocator* bsltf::StdStatefulAllocator< TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL >::allocator |
( |
|
) |
const |
Return the address of the allocator wrapped by this object.
The documentation for this class was generated from the following file: