Slick OrderBook 1.1.0
High-Performance C++23 OrderBook Library
Loading...
Searching...
No Matches
slick::orderbook::detail::ObjectPool< T > Class Template Reference

Object pool for zero-allocation management of frequently created/destroyed objects. More...

#include <memory_pool.hpp>

Inheritance diagram for slick::orderbook::detail::ObjectPool< T >:
Collaboration diagram for slick::orderbook::detail::ObjectPool< T >:

Public Member Functions

 ObjectPool (std::size_t initial_capacity=1024)
 Constructor - pre-allocates initial capacity.
 
 ~ObjectPool () noexcept
 Destructor - frees all memory blocks.
 
 ObjectPool (const ObjectPool &)=delete
 
ObjectPool & operator= (const ObjectPool &)=delete
 
 ObjectPool (ObjectPool &&other) noexcept
 
ObjectPool & operator= (ObjectPool &&other) noexcept
 
T * allocate ()
 Allocate an object from the pool Returns a pointer to uninitialized memory.
 
template<typename... Args>
T * construct (Args &&... args)
 Construct an object in-place with arguments.
 
void deallocate (T *ptr) noexcept
 Deallocate an object (does not call destructor)
 
void destroy (T *ptr) noexcept
 Destroy and deallocate an object.
 
bool reserve (std::size_t n)
 Reserve capacity for at least n objects.
 
std::size_t capacity () const noexcept
 Get current capacity (total objects that can be stored)
 
std::size_t size () const noexcept
 Get current size (objects currently allocated)
 
std::size_t available () const noexcept
 Get number of available objects in free list.
 
bool empty () const noexcept
 Check if pool is empty.
 
void clear () noexcept
 Clear all allocated objects (calls destructors if any are alive) Warning: This assumes all objects have been properly destroyed.
 

Detailed Description

template<typename T>
class slick::orderbook::detail::ObjectPool< T >

Object pool for zero-allocation management of frequently created/destroyed objects.

Benefits:

  • Zero allocations in hot path (after initial pool creation)
  • Cache-friendly memory layout (objects allocated in contiguous blocks)
  • Fast allocation/deallocation (free-list based, O(1))
  • Automatic memory management with RAII

Usage:

ObjectPool<Order> pool(1024); // Pre-allocate 1024 orders
Order* order = pool.allocate();
// ... use order
pool.deallocate(order);
Object pool for zero-allocation management of frequently created/destroyed objects.
Order structure for Level 3 orderbook Uses intrusive list design for zero-allocation order queues at ...
Definition order.hpp:14
Template Parameters
TObject type to pool

Definition at line 34 of file memory_pool.hpp.

Constructor & Destructor Documentation

◆ ObjectPool() [1/3]

template<typename T >
slick::orderbook::detail::ObjectPool< T >::ObjectPool ( std::size_t  initial_capacity = 1024)
inlineexplicit

Constructor - pre-allocates initial capacity.

Parameters
initial_capacityNumber of objects to pre-allocate

Definition at line 43 of file memory_pool.hpp.

◆ ~ObjectPool()

template<typename T >
slick::orderbook::detail::ObjectPool< T >::~ObjectPool ( )
inlinenoexcept

Destructor - frees all memory blocks.

Definition at line 51 of file memory_pool.hpp.

◆ ObjectPool() [2/3]

template<typename T >
slick::orderbook::detail::ObjectPool< T >::ObjectPool ( const ObjectPool< T > &  )
delete

◆ ObjectPool() [3/3]

template<typename T >
slick::orderbook::detail::ObjectPool< T >::ObjectPool ( ObjectPool< T > &&  other)
inlinenoexcept

Definition at line 63 of file memory_pool.hpp.

Member Function Documentation

◆ allocate()

template<typename T >
T * slick::orderbook::detail::ObjectPool< T >::allocate ( )
inline

Allocate an object from the pool Returns a pointer to uninitialized memory.

Returns
Pointer to allocated memory, or nullptr if allocation fails

Definition at line 93 of file memory_pool.hpp.

◆ available()

template<typename T >
std::size_t slick::orderbook::detail::ObjectPool< T >::available ( ) const
inlinenoexcept

Get number of available objects in free list.

Definition at line 181 of file memory_pool.hpp.

◆ capacity()

template<typename T >
std::size_t slick::orderbook::detail::ObjectPool< T >::capacity ( ) const
inlinenoexcept

Get current capacity (total objects that can be stored)

Definition at line 171 of file memory_pool.hpp.

◆ clear()

template<typename T >
void slick::orderbook::detail::ObjectPool< T >::clear ( )
inlinenoexcept

Clear all allocated objects (calls destructors if any are alive) Warning: This assumes all objects have been properly destroyed.

Definition at line 192 of file memory_pool.hpp.

◆ construct()

template<typename T >
template<typename... Args>
T * slick::orderbook::detail::ObjectPool< T >::construct ( Args &&...  args)
inline

Construct an object in-place with arguments.

Parameters
argsConstructor arguments
Returns
Pointer to constructed object, or nullptr if allocation fails

Definition at line 122 of file memory_pool.hpp.

◆ deallocate()

template<typename T >
void slick::orderbook::detail::ObjectPool< T >::deallocate ( T *  ptr)
inlinenoexcept

Deallocate an object (does not call destructor)

Parameters
ptrPointer to object to deallocate

Definition at line 137 of file memory_pool.hpp.

◆ destroy()

template<typename T >
void slick::orderbook::detail::ObjectPool< T >::destroy ( T *  ptr)
inlinenoexcept

Destroy and deallocate an object.

Parameters
ptrPointer to object to destroy

Definition at line 151 of file memory_pool.hpp.

◆ empty()

template<typename T >
bool slick::orderbook::detail::ObjectPool< T >::empty ( ) const
inlinenoexcept

Check if pool is empty.

Definition at line 186 of file memory_pool.hpp.

◆ operator=() [1/2]

template<typename T >
ObjectPool & slick::orderbook::detail::ObjectPool< T >::operator= ( const ObjectPool< T > &  )
delete

◆ operator=() [2/2]

template<typename T >
ObjectPool & slick::orderbook::detail::ObjectPool< T >::operator= ( ObjectPool< T > &&  other)
inlinenoexcept

Definition at line 73 of file memory_pool.hpp.

◆ reserve()

template<typename T >
bool slick::orderbook::detail::ObjectPool< T >::reserve ( std::size_t  n)
inline

Reserve capacity for at least n objects.

Parameters
nMinimum capacity to reserve
Returns
true if successful, false otherwise

Definition at line 161 of file memory_pool.hpp.

◆ size()

template<typename T >
std::size_t slick::orderbook::detail::ObjectPool< T >::size ( ) const
inlinenoexcept

Get current size (objects currently allocated)

Definition at line 176 of file memory_pool.hpp.


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