|
| typedef ALLOCATOR_TYPE | allocator_type |
| |
| typedef ALLOCATOR_TYPE::value_type | value_type |
| |
| typedef BloombergLP::bslma::AllocatorTraits_PointerType< ALLOCATOR_TYPE >::type | pointer |
| |
| typedef BloombergLP::bslma::AllocatorTraits_ConstPointerType< ALLOCATOR_TYPE >::type | const_pointer |
| |
| typedef BloombergLP::bslma::AllocatorTraits_VoidPointerType< ALLOCATOR_TYPE >::type | void_pointer |
| |
| typedef BloombergLP::bslma::AllocatorTraits_ConstVoidPointerType< ALLOCATOR_TYPE >::type | const_void_pointer |
| |
| typedef BloombergLP::bslma::AllocatorTraits_DifferenceType< ALLOCATOR_TYPE >::type | difference_type |
| |
| typedef BloombergLP::bslma::AllocatorTraits_SizeType< ALLOCATOR_TYPE >::type | size_type |
| |
| typedef BloombergLP::bslma::AllocatorTraits_IsAlwaysEqual< ALLOCATOR_TYPE >::type | is_always_equal |
| |
| typedef BloombergLP::bslma::AllocatorTraits_PropOnCopyAssign< ALLOCATOR_TYPE >::type | propagate_on_container_copy_assignment |
| |
| typedef BloombergLP::bslma::AllocatorTraits_PropOnMoveAssign< ALLOCATOR_TYPE >::type | propagate_on_container_move_assignment |
| |
| typedef BloombergLP::bslma::AllocatorTraits_PropOnSwap< ALLOCATOR_TYPE >::type | propagate_on_container_swap |
| |
|
| static pointer | allocate (ALLOCATOR_TYPE &basicAllocator, size_type n) |
| | Return basicAllocator.allocate(n).
|
| |
| static pointer | allocate (ALLOCATOR_TYPE &basicAllocator, size_type n, const_void_pointer hint) |
| | Return basicAllocator.allocate(n, hint).
|
| |
| static void | deallocate (ALLOCATOR_TYPE &basicAllocator, pointer elementAddr, size_type n) |
| |
| template<class ELEMENT_TYPE , class... Args> |
| static void | construct (ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr, Args &&... arguments) |
| |
| template<class ELEMENT_TYPE > |
| static void | destroy (ALLOCATOR_TYPE &basicAllocator, ELEMENT_TYPE *elementAddr) |
| |
| static size_type | max_size (const ALLOCATOR_TYPE &basicAllocator) BSLS_KEYWORD_NOEXCEPT |
| |
| static ALLOCATOR_TYPE | select_on_container_copy_construction (const ALLOCATOR_TYPE &rhs) |
| |
template<class ALLOCATOR_TYPE>
struct bsl::allocator_traits< ALLOCATOR_TYPE >
This class supports the complete interface of the C++11 allocator_traits class template, which provides a uniform mechanism for accessing nested types within, and operations on, any standard-conforming allocator. A specialization of this class template for bsl::allocator provides support for Bloomberg's bslma allocator model (see the bslma_bslallocator component for more details). In C++11 compilation environments, the construct methods forward to the allocator's construct method if such a method matching the (variable number of) specified constructor arguments exists; otherwise, the construct method falls back to invoking the constructor of the element type directly. In C++03 compilation environments, there is no reliable way to detect if the type provide a method that matches a (variable number of) specified arguments; therefore, we require that standard allocator types define construct methods taking a variable number of arguments in those environments. This implementation is not fully-standard-conforming in that it does not support deduce data types that are not specified in the allocator.
template<class ALLOCATOR_TYPE >
template<class ELEMENT_TYPE , class... Args>
| void bsl::allocator_traits< ALLOCATOR_TYPE >::construct |
( |
ALLOCATOR_TYPE & |
basicAllocator, |
|
|
ELEMENT_TYPE * |
elementAddr, |
|
|
Args &&... |
arguments |
|
) |
| |
|
inlinestatic |
Construct an object of (template parameter) type ELEMENT_TYPE at the specified elementAddr, either by 1) calling the construct method on basicAllocator with elemAddr and the specified (variable number of) arguments if the (template parameter) type ALLOCATOR_TYPE defines such a method, or 2) forwarding the specified (variable number of) arguments to the constructor of ELEMENT_TYPE directly (and ignoring basicAllocator) otherwise. The behavior is undefined unless elementAddr refers to valid, uninitialized storage.
template<class ALLOCATOR_TYPE >
template<class ELEMENT_TYPE >
| void bsl::allocator_traits< ALLOCATOR_TYPE >::destroy |
( |
ALLOCATOR_TYPE & |
basicAllocator, |
|
|
ELEMENT_TYPE * |
elementAddr |
|
) |
| |
|
inlinestatic |
Destroy the object of (template parameter) type ELEMENT_TYPE at the specified elementAddr, either by 1) calling the destroy method on basicAllocator with elemAddr as the sole argument if the (template parameter) type ALLOCATOR_TYPE defines such a method, or 2) calling the destructor directly on elementAddr (and ignoring basicAllocator) otherwise. The behavior is undefined unless elementAddr refers to a valid, constructed object.
template<class ALLOCATOR_TYPE >
| ALLOCATOR_TYPE bsl::allocator_traits< ALLOCATOR_TYPE >::select_on_container_copy_construction |
( |
const ALLOCATOR_TYPE & |
rhs | ) |
|
|
inlinestatic |
Return a copy of the allocator that should be used to copy- construct one container from another container whose allocator is the specified rhs. If the parameterized ALLOCATOR_TYPE defines a method select_on_container_copy_construction, this function returns the result of calling that method on rhs; otherwise, this method enforces the default policy of propagating the allocator on copy construction, as is standard practice for standard allocators (i.e., returns rhs). Note that the specialization of this class template for bsl::allocator (in the bslma_bslallocator component) provides the alternate default behavior of not propagating the allocator on copy construction (i.e., returning a default-constructed allocator object).