[#BloombergLP-bslstl-TreeNodePool] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslstl.adoc[bslstl]::TreeNodePool :relfileprefix: ../../ :mrdocs: 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`). == Synopsis Declared in `<bslstl_treenodepool.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class VALUE, class ALLOCATOR> class TreeNodePool; ---- == Type Aliases [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslstl/TreeNodePool/AllocatorType.adoc[`AllocatorType`] | Alias for the allocator type defined by `SimplePool`. | xref:BloombergLP/bslstl/TreeNodePool/size_type.adoc[`size_type`] | Alias for the `size_type` of the allocator defined by `SimplePool`. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslstl/TreeNodePool/2constructor-0d.adoc[`TreeNodePool`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bslstl/TreeNodePool/adopt.adoc[`adopt`] | 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. | xref:BloombergLP/bslstl/TreeNodePool/allocator-06.adoc[`allocator`] | `allocator` overloads | xref:BloombergLP/bslstl/TreeNodePool/cloneNode.adoc[`cloneNode`] | 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. | xref:BloombergLP/bslstl/TreeNodePool/deleteNode.adoc[`deleteNode`] | 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>`. | xref:BloombergLP/bslstl/TreeNodePool/emplaceIntoNewNode.adoc[`emplaceIntoNewNode`] | 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`. | xref:BloombergLP/bslstl/TreeNodePool/hasFreeNodes.adoc[`hasFreeNodes`] | Return `true` if this object holds free (currently unused) nodes, and `false` otherwise. | xref:BloombergLP/bslstl/TreeNodePool/moveIntoNewNode.adoc[`moveIntoNewNode`] | 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. | xref:BloombergLP/bslstl/TreeNodePool/reserveNodes.adoc[`reserveNodes`] | 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`. | xref:BloombergLP/bslstl/TreeNodePool/swap.adoc[`swap`] | 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()`. | xref:BloombergLP/bslstl/TreeNodePool/swapExchangeAllocators.adoc[`swapExchangeAllocators`] | 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. | xref:BloombergLP/bslstl/TreeNodePool/swapRetainAllocators.adoc[`swapRetainAllocators`] | 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()`. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#