|
BDE 4.39.x Production Release
|
#include <bslma_allocatortraits.h>
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.
Classes | |
| struct | rebind_alloc |
| struct | rebind_traits |
Public Types | |
| 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 Public Member Functions | |
| static pointer | allocate (ALLOCATOR_TYPE &basicAllocator, size_type n) |
| static pointer | allocate (ALLOCATOR_TYPE &basicAllocator, size_type n, const_void_pointer 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) |
| typedef ALLOCATOR_TYPE bsl::allocator_traits< ALLOCATOR_TYPE >::allocator_type |
| typedef BloombergLP::bslma::AllocatorTraits_ConstPointerType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::const_pointer |
| typedef BloombergLP::bslma::AllocatorTraits_ConstVoidPointerType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::const_void_pointer |
| typedef BloombergLP::bslma::AllocatorTraits_DifferenceType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::difference_type |
| typedef BloombergLP::bslma::AllocatorTraits_IsAlwaysEqual<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::is_always_equal |
Identical to, or derived from true_type if two allocators of parameterized ALLOCATOR_TYPE always compare equal; otherwise identical to or derived from false_type. This type is ALLOCATOR_TYPE::is_always_equal if such a type is defined, and is_empty<ALLOCATOR_TYPE> otherwise.
| typedef BloombergLP::bslma::AllocatorTraits_PointerType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::pointer |
| typedef BloombergLP::bslma::AllocatorTraits_PropOnCopyAssign<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::propagate_on_container_copy_assignment |
Identical to, or derived from true_type if an allocator of parameterized ALLOCATOR_TYPE should be copied when a container using that ALLOCATOR_TYPE is copy-assigned; otherwise identical to or derived from false_type. This type is ALLOCATOR_TYPE::propagate_on_container_copy_assignment if such a type is defined, and false_type otherwise.
| typedef BloombergLP::bslma::AllocatorTraits_PropOnMoveAssign<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::propagate_on_container_move_assignment |
Identical to, or derived from true_type if an allocator of parameterized ALLOCATOR_TYPE should be moved when a container using that ALLOCATOR_TYPE is move-assigned; otherwise identical to or derived from false_type. This type is ALLOCATOR_TYPE::propagate_on_container_move_assignment if such a type is defined, and false_type otherwise.
| typedef BloombergLP::bslma::AllocatorTraits_PropOnSwap<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::propagate_on_container_swap |
Identical to, or derived from true_type if the allocators of parameterized ALLOCATOR_TYPE should be swapped when containers using that ALLOCATOR_TYPE are swapped; otherwise identical to or derived from false_type. This type is ALLOCATOR_TYPE::propagate_on_container_swap if such a type is defined, and false_type otherwise.
| typedef BloombergLP::bslma::AllocatorTraits_SizeType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::size_type |
| typedef ALLOCATOR_TYPE::value_type bsl::allocator_traits< ALLOCATOR_TYPE >::value_type |
| typedef BloombergLP::bslma::AllocatorTraits_VoidPointerType<ALLOCATOR_TYPE>::type bsl::allocator_traits< ALLOCATOR_TYPE >::void_pointer |
|
inlinestatic |
Return basicAllocator.allocate(n).
|
inlinestatic |
Return basicAllocator.allocate(n, hint).
|
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.
elementAddr refers to valid, uninitialized storage.
|
inlinestatic |
Invoke basicAllocator.deallocate(elementAddr, n).
elementAddr was returned from a prior call to the allocate method of an allocator that compares equal to the specified allocator, and has not yet been passed to a deallocate call of such an allocator object.
|
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.
elementAddr refers to a valid, constructed object.
|
inlinestatic |
Return the largest number of value_type objects that could reasonably be returned by a single invocation of allocate for the specified allocator, i.e., allocator.max_size().
|
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).
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).