Quick Links:

bal | bbl | bdl | bsl

Public Types | Public Member Functions

bslstl::BidirectionalNodePool< VALUE, ALLOCATOR > Class Template Reference

#include <bslstl_bidirectionalnodepool.h>

List of all members.

Public Types

typedef Pool::AllocatorType AllocatorType
typedef AllocatorTraits::size_type size_type

Public Member Functions

 BidirectionalNodePool (const ALLOCATOR &allocator)
 BidirectionalNodePool (bslmf::MovableRef< BidirectionalNodePool > original)
 ~BidirectionalNodePool ()
void adopt (bslmf::MovableRef< BidirectionalNodePool > pool)
AllocatorTypeallocator ()
bslalg::BidirectionalLinkcloneNode (const bslalg::BidirectionalLink &original)
void deleteNode (bslalg::BidirectionalLink *linkNode)
template<class... Args>
bslalg::BidirectionalLinkemplaceIntoNewNode (Args &&...arguments)
bslalg::BidirectionalLinkmoveIntoNewNode (bslalg::BidirectionalLink *original)
void release ()
void reserveNodes (size_type numNodes)
void swapRetainAllocators (BidirectionalNodePool &other)
void swapExchangeAllocators (BidirectionalNodePool &other)
const AllocatorTypeallocator () const

Detailed Description

template<class VALUE, class ALLOCATOR>
class bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >

This class provides methods for creating and destroying nodes using the appropriate allocator-traits of the (template parameter) type ALLOCATOR.

See Component bslstl_bidirectionalnodepool


Member Typedef Documentation

template<class VALUE, class ALLOCATOR>
typedef Pool::AllocatorType bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::AllocatorType
template<class VALUE, class ALLOCATOR>
typedef AllocatorTraits::size_type bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::size_type

Constructor & Destructor Documentation

template<class VALUE, class ALLOCATOR>
bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::BidirectionalNodePool ( const ALLOCATOR &  allocator  )  [explicit]

Create a BidirectionalNodePool object that will use the specified allocator to supply memory for allocated node objects. If the (template parameter) ALLOCATOR is bsl::allocator, then allocator shall be convertible to bslma::Allocator *.

template<class VALUE, class ALLOCATOR>
bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::BidirectionalNodePool ( bslmf::MovableRef< BidirectionalNodePool< VALUE, ALLOCATOR > >  original  ) 

Create a bidirectional 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.

template<class VALUE, class ALLOCATOR>
bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::~BidirectionalNodePool (  ) 

Destroy the memory pool maintained by this object, releasing all memory used by the nodes of the type BidirectionalNode<VALUE> in the pool. Any memory allocated for the nodes' value attribute of the (template parameter) type VALUE will be leaked unless the nodes are explicitly destroyed via the destroyNode method.


Member Function Documentation

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::adopt ( bslmf::MovableRef< BidirectionalNodePool< 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.

template<class VALUE, class ALLOCATOR>
AllocatorType& bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::allocator (  ) 

Return a reference providing modifiable access to the allocator supplying memory for the memory pool maintained by this object. The behavior is undefined if the allocator used by this object is changed with this method. Note that this method provides modifiable access to enable a client to call non-'const' methods on the allocator.

template<class VALUE, class ALLOCATOR>
bslalg::BidirectionalLink* bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::cloneNode ( const bslalg::BidirectionalLink original  ) 

Allocate a node of the type BidirectionalNode<VALUE>, 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 node. Note that the next and prev attributes of the returned node will be uninitialized.

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::deleteNode ( bslalg::BidirectionalLink linkNode  ) 

Destroy the VALUE attribute of the specified linkNode and return the memory footprint of linkNode to this pool for potential reuse. The behavior is undefined unless node refers to a bslalg::BidirectionalNode<VALUE> that was allocated by this pool.

template<class VALUE, class ALLOCATOR>
template<class... Args>
bslalg::BidirectionalLink* bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::emplaceIntoNewNode ( Args &&...  arguments  ) 

Allocate a node of the type BidirectionalNode<VALUE>, and construct in-place an object of the (template parameter) type VALUE with the specified constructor arguments. Return the address of the node. Note that the next and prev attributes of the returned node will be uninitialized.

template<class VALUE, class ALLOCATOR>
bslalg::BidirectionalLink* bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::moveIntoNewNode ( bslalg::BidirectionalLink original  ) 

Allocate a node of the type BidirectionalNode<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 link. Return the address of the node. Note that the next and prev attributes of the returned node will be uninitialized. Also note that the value attribute of original is left in a valid but unspecified state.

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::release (  ) 

Relinquish all memory currently allocated with the memory pool maintained by this object.

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::reserveNodes ( size_type  numNodes  ) 

Add to this pool sufficient memory to satisfy memory requests for at least the specified numNodes before the pool replenishes. The additional memory is added irrespective of the amount of free memory when called. The behavior is undefined unless 0 < numNodes.

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::swapRetainAllocators ( BidirectionalNodePool< 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().

template<class VALUE, class ALLOCATOR>
void bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::swapExchangeAllocators ( BidirectionalNodePool< VALUE, ALLOCATOR > &  other  ) 

Efficiently exchange the nodes and the allocator of this object with those of the specified other object. This method provides the no-throw exception-safety guarantee.

template<class VALUE, class ALLOCATOR>
const AllocatorType& bslstl::BidirectionalNodePool< VALUE, ALLOCATOR >::allocator (  )  const

Return a reference providing non-modifiable access to the allocator supplying memory for the memory pool maintained by this object.


The documentation for this class was generated from the following file: