Quick Links: |
#include <bslstl_treenodepool.h>
Public Types | |
typedef Pool::AllocatorType | AllocatorType |
typedef AllocatorTraits::size_type | size_type |
Public Member Functions | |
TreeNodePool (const ALLOCATOR &allocator) | |
TreeNodePool (bslmf::MovableRef< TreeNodePool > original) | |
void | adopt (bslmf::MovableRef< TreeNodePool > pool) |
AllocatorType & | allocator () |
bslalg::RbTreeNode * | cloneNode (const bslalg::RbTreeNode &original) |
template<class... Args> | |
bslalg::RbTreeNode * | emplaceIntoNewNode (Args &&...args) |
void | deleteNode (bslalg::RbTreeNode *node) |
bslalg::RbTreeNode * | moveIntoNewNode (bslalg::RbTreeNode *original) |
void | reserveNodes (size_type numNodes) |
void | swap (TreeNodePool &other) |
void | swapExchangeAllocators (TreeNodePool &other) |
void | swapRetainAllocators (TreeNodePool &other) |
const AllocatorType & | allocator () const |
bool | hasFreeNodes () const |
This class provides methods for creating and deleting nodes using the appropriate allocator traits of the (template parameter) type ALLOCATOR
. This type is intended to be used as a private base-class for a node-based container, in order to take advantage of the empty-base-class optimization in the case where the base class has 0 size (as may be the case if the (template parameter) type ALLOCATOR
is not a bslma::Allocator
).
See Component bslstl_treenodepool
typedef Pool::AllocatorType bslstl::TreeNodePool< VALUE, ALLOCATOR >::AllocatorType |
typedef AllocatorTraits::size_type bslstl::TreeNodePool< VALUE, ALLOCATOR >::size_type |
bslstl::TreeNodePool< VALUE, ALLOCATOR >::TreeNodePool | ( | const ALLOCATOR & | allocator | ) | [explicit] |
Create a node-pool that will use the specified allocator
to supply memory for allocated node objects.
bslstl::TreeNodePool< VALUE, ALLOCATOR >::TreeNodePool | ( | bslmf::MovableRef< TreeNodePool< VALUE, ALLOCATOR > > | original | ) |
Create a node-pool, adopting all outstanding memory allocations associated with the specified original
node-pool, that will use the allocator associated with original
to supply memory for allocated node objects. original
is left in a valid but unspecified state.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::adopt | ( | bslmf::MovableRef< TreeNodePool< VALUE, ALLOCATOR > > | pool | ) |
Adopt all outstanding memory allocations associated with the specified node pool
. The behavior is undefined unless this pool uses the same allocator as that associated with pool
. The behavior is also undefined unless this pool is in the default-constructed state.
AllocatorType& bslstl::TreeNodePool< VALUE, ALLOCATOR >::allocator | ( | ) |
Return a reference providing modifiable access to the rebound allocator traits for the node-type. Note that this operation returns a base-class (NodeAlloc
) reference to this object.
bslalg::RbTreeNode* bslstl::TreeNodePool< VALUE, ALLOCATOR >::cloneNode | ( | const bslalg::RbTreeNode & | original | ) |
Allocate a node object and copy-construct an object of the (template parameter) type VALUE
having the same value as the specified original
at the value
attribute of the node. Return the address of the newly allocated node. The behavior is undefined unless original
refers to a TreeNode<VALUE>
object holding a valid (initialized) value.
bslalg::RbTreeNode* bslstl::TreeNodePool< VALUE, ALLOCATOR >::emplaceIntoNewNode | ( | Args &&... | args | ) |
Allocate a node with a newly created value object of the (template parameter) type VALUE
, constructed by forwarding allocator()
and the specified (variable number of) arguments
to the corresponding constructor of VALUE
. Return the address of the newly allocated node. This operation requires that VALUE
be constructible from arguments
.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::deleteNode | ( | bslalg::RbTreeNode * | node | ) |
Destroy the VALUE
value of the specified node
and return the memory footprint of node
to this pool for potential reuse. The behavior is undefined unless node
refers to a TreeNode<VALUE>
.
bslalg::RbTreeNode* bslstl::TreeNodePool< VALUE, ALLOCATOR >::moveIntoNewNode | ( | bslalg::RbTreeNode * | original | ) |
Allocate a node of the type TreeNode<VALUE>
, and move-construct an object of the (template parameter) type VALUE
with the (explicitly moved) value indicated by the value
attribute of the specified original
node. Return the address of the newly allocated node. The object referred to by the value
attribute of original
is left in a valid but unspecified state. The behavior is undefined unless original
refers to a TreeNode<VALUE>
object holding a valid (initialized) value.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::reserveNodes | ( | size_type | numNodes | ) |
Add to this pool sufficient memory to satisfy memory requests for at least the specified numNodes
. The additional memory is added irrespective of the amount of free memory when called. The behavior is undefined unless 0 < numNodes
.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::swap | ( | TreeNodePool< VALUE, ALLOCATOR > & | other | ) |
Efficiently exchange the nodes of this object with those of the specified other
object. This method provides the no-throw exception-safety guarantee. The behavior is undefined unless allocator() == other.allocator()
.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::swapExchangeAllocators | ( | TreeNodePool< VALUE, ALLOCATOR > & | other | ) |
Efficiently exchange the nodes and allocator of this object with those of the specified other
object. This method provides the no-throw exception-safety guarantee, unless swapping the (user-supplied) allocator objects can throw.
void bslstl::TreeNodePool< VALUE, ALLOCATOR >::swapRetainAllocators | ( | TreeNodePool< VALUE, ALLOCATOR > & | other | ) |
Efficiently exchange the nodes of this object with those of the specified other
object. This method provides the no-throw exception-safety guarantee. The behavior is undefined unless allocator() == other.allocator()
.
const AllocatorType& bslstl::TreeNodePool< VALUE, ALLOCATOR >::allocator | ( | ) | const |
Return a reference providing non-modifiable access to the rebound allocator traits for the node-type. Note that this operation returns a base-class (NodeAlloc
) reference to this object.
bool bslstl::TreeNodePool< VALUE, ALLOCATOR >::hasFreeNodes | ( | ) | const |
Return true
if this object holds free (currently unused) nodes, and false
otherwise.