QuantumLibrary
Bloomberg::quantum::ContiguousPoolManager< T > Struct Template Reference

Provides fast (quasi zero-time) in-place allocation for STL containers. Objects are allocated from a contiguous buffer (aka object pool). When the buffer is exhausted, allocation is delegated to the heap. The default buffer size is 1000. More...

#include <quantum_contiguous_pool_manager.h>

Inheritance diagram for Bloomberg::quantum::ContiguousPoolManager< T >:
Bloomberg::quantum::HeapAllocator< T > Bloomberg::quantum::StackAllocator< T, SIZE >

Public Types

typedef ContiguousPoolManager< T > this_type
 
typedef T value_type
 
typedef value_typepointer
 
typedef const value_typeconst_pointer
 
typedef value_typereference
 
typedef const value_typeconst_reference
 
typedef size_t size_type
 
typedef uint16_t index_type
 
typedef std::aligned_storage< sizeof(T), alignof(T)> storage_type
 
typedef storage_type::type aligned_type
 

Public Member Functions

 ContiguousPoolManager ()
 
 ContiguousPoolManager (aligned_type *buffer, index_type size)
 
 ContiguousPoolManager (const this_type &)=delete
 
 ContiguousPoolManager (this_type &&)
 
ContiguousPoolManageroperator= (const this_type &)=delete
 
ContiguousPoolManageroperator= (this_type &&)
 
virtual ~ContiguousPoolManager ()
 
void setBuffer (aligned_type *buffer, index_type size)
 
pointer address (reference x) const
 
const_pointer address (const_reference x) const
 
size_type max_size () const
 
template<typename... Args>
void construct (T *p, Args &&... args)
 
void destroy (pointer p)
 
pointer allocate (size_type=1, const_pointer=0)
 
void deallocate (pointer p, size_type=1)
 
template<typename... Args>
pointer create (Args &&... args)
 
void dispose (pointer p)
 
size_t allocatedBlocks () const
 
size_t allocatedHeapBlocks () const
 
bool isFull () const
 
bool isEmpty () const
 

Detailed Description

template<typename T>
struct Bloomberg::quantum::ContiguousPoolManager< T >

Provides fast (quasi zero-time) in-place allocation for STL containers. Objects are allocated from a contiguous buffer (aka object pool). When the buffer is exhausted, allocation is delegated to the heap. The default buffer size is 1000.

Template Parameters
TThe type to allocate.
Note
This allocator is thread safe. For internal use only.

Member Typedef Documentation

◆ aligned_type

template<typename T>
typedef storage_type::type Bloomberg::quantum::ContiguousPoolManager< T >::aligned_type

◆ const_pointer

template<typename T>
typedef const value_type* Bloomberg::quantum::ContiguousPoolManager< T >::const_pointer

◆ const_reference

template<typename T>
typedef const value_type& Bloomberg::quantum::ContiguousPoolManager< T >::const_reference

◆ index_type

template<typename T>
typedef uint16_t Bloomberg::quantum::ContiguousPoolManager< T >::index_type

◆ pointer

template<typename T>
typedef value_type* Bloomberg::quantum::ContiguousPoolManager< T >::pointer

◆ reference

template<typename T>
typedef value_type& Bloomberg::quantum::ContiguousPoolManager< T >::reference

◆ size_type

template<typename T>
typedef size_t Bloomberg::quantum::ContiguousPoolManager< T >::size_type

◆ storage_type

template<typename T>
typedef std::aligned_storage<sizeof(T), alignof(T)> Bloomberg::quantum::ContiguousPoolManager< T >::storage_type

◆ this_type

◆ value_type

template<typename T>
typedef T Bloomberg::quantum::ContiguousPoolManager< T >::value_type

Constructor & Destructor Documentation

◆ ContiguousPoolManager() [1/4]

◆ ContiguousPoolManager() [2/4]

template<typename T >
Bloomberg::quantum::ContiguousPoolManager< T >::ContiguousPoolManager ( aligned_type buffer,
index_type  size 
)

◆ ContiguousPoolManager() [3/4]

template<typename T>
Bloomberg::quantum::ContiguousPoolManager< T >::ContiguousPoolManager ( const this_type )
delete

◆ ContiguousPoolManager() [4/4]

◆ ~ContiguousPoolManager()

template<typename T >
Bloomberg::quantum::ContiguousPoolManager< T >::~ContiguousPoolManager ( )
virtual

Member Function Documentation

◆ address() [1/2]

template<typename T >
ContiguousPoolManager< T >::pointer Bloomberg::quantum::ContiguousPoolManager< T >::address ( reference  x) const

◆ address() [2/2]

template<typename T >
ContiguousPoolManager< T >::const_pointer Bloomberg::quantum::ContiguousPoolManager< T >::address ( const_reference  x) const

◆ allocate()

template<typename T >
ContiguousPoolManager< T >::pointer Bloomberg::quantum::ContiguousPoolManager< T >::allocate ( size_type  n = 1,
const_pointer  = 0 
)

◆ allocatedBlocks()

template<typename T >
size_t Bloomberg::quantum::ContiguousPoolManager< T >::allocatedBlocks ( ) const

◆ allocatedHeapBlocks()

template<typename T >
size_t Bloomberg::quantum::ContiguousPoolManager< T >::allocatedHeapBlocks ( ) const

◆ construct()

template<typename T >
template<typename... Args>
void Bloomberg::quantum::ContiguousPoolManager< T >::construct ( T *  p,
Args &&...  args 
)

◆ create()

template<typename T >
template<typename... Args>
ContiguousPoolManager< T >::pointer Bloomberg::quantum::ContiguousPoolManager< T >::create ( Args &&...  args)

◆ deallocate()

template<typename T >
void Bloomberg::quantum::ContiguousPoolManager< T >::deallocate ( pointer  p,
size_type  n = 1 
)

◆ destroy()

template<typename T >
void Bloomberg::quantum::ContiguousPoolManager< T >::destroy ( pointer  p)

◆ dispose()

template<typename T >
void Bloomberg::quantum::ContiguousPoolManager< T >::dispose ( pointer  p)

◆ isEmpty()

template<typename T >
bool Bloomberg::quantum::ContiguousPoolManager< T >::isEmpty ( ) const

◆ isFull()

template<typename T >
bool Bloomberg::quantum::ContiguousPoolManager< T >::isFull ( ) const

◆ max_size()

template<typename T >
ContiguousPoolManager< T >::size_type Bloomberg::quantum::ContiguousPoolManager< T >::max_size ( ) const

◆ operator=() [1/2]

template<typename T>
ContiguousPoolManager& Bloomberg::quantum::ContiguousPoolManager< T >::operator= ( const this_type )
delete

◆ operator=() [2/2]

template<typename T >
ContiguousPoolManager< T > & Bloomberg::quantum::ContiguousPoolManager< T >::operator= ( this_type &&  other)

◆ setBuffer()

template<typename T >
void Bloomberg::quantum::ContiguousPoolManager< T >::setBuffer ( aligned_type buffer,
index_type  size 
)