Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::memory::object_pool< T > Class Template Reference

Thread-safe object pool for high-performance memory management. More...

#include <object_pool.h>

Collaboration diagram for kcenon::logger::memory::object_pool< T >:
Collaboration graph

Classes

struct  config
 Configuration for object pool. More...
 
struct  statistics
 Get current pool statistics. More...
 

Public Member Functions

 object_pool (const config &cfg=config{})
 Construct object pool with configuration.
 
 ~object_pool ()=default
 Destructor.
 
std::unique_ptr< T > acquire ()
 Get an object from the pool.
 
void release (std::unique_ptr< T > obj)
 Return an object to the pool.
 
statistics get_statistics () const
 Get pool statistics.
 
void clear ()
 Clear all objects from pool.
 

Private Member Functions

void initialize_pool ()
 Initialize pool with initial objects.
 

Private Attributes

config config_
 Pool configuration.
 
std::mutex mutex_
 Thread safety mutex.
 
std::queue< std::unique_ptr< T > > available_objects_
 Available objects.
 
std::atomic< size_t > pool_size_
 Current pool size.
 

Detailed Description

template<typename T>
class kcenon::logger::memory::object_pool< T >

Thread-safe object pool for high-performance memory management.

Template Parameters
TThe type of objects to pool

Definition at line 29 of file object_pool.h.

Constructor & Destructor Documentation

◆ object_pool()

template<typename T >
kcenon::logger::memory::object_pool< T >::object_pool ( const config & cfg = config{})
inlineexplicit

Construct object pool with configuration.

Parameters
cfgPool configuration

Definition at line 46 of file object_pool.h.

46 {})
47 : config_(cfg), pool_size_(0) {
49 }
config config_
Pool configuration.
void initialize_pool()
Initialize pool with initial objects.
std::atomic< size_t > pool_size_
Current pool size.

◆ ~object_pool()

template<typename T >
kcenon::logger::memory::object_pool< T >::~object_pool ( )
default

Destructor.

Member Function Documentation

◆ acquire()

template<typename T >
std::unique_ptr< T > kcenon::logger::memory::object_pool< T >::acquire ( )
inline

Get an object from the pool.

Returns
Unique pointer to object, or nullptr if pool is empty and growth is disabled

Definition at line 60 of file object_pool.h.

60 {
61 std::lock_guard<std::mutex> lock(mutex_);
62
63 if (!available_objects_.empty()) {
64 auto obj = std::move(available_objects_.front());
66 return obj;
67 }
68
69 // If pool is empty and growth is allowed, create new object
71 pool_size_.fetch_add(1);
72 return std::make_unique<T>();
73 }
74
75 // Create temporary object if pool limits reached
76 return std::make_unique<T>();
77 }
std::mutex mutex_
Thread safety mutex.
std::queue< std::unique_ptr< T > > available_objects_
Available objects.
bool allow_growth
Allow pool to grow beyond initial size.
Definition object_pool.h:37

References kcenon::logger::memory::object_pool< T >::config::allow_growth, kcenon::logger::memory::object_pool< T >::available_objects_, kcenon::logger::memory::object_pool< T >::config_, kcenon::logger::memory::object_pool< T >::config::max_size, kcenon::logger::memory::object_pool< T >::mutex_, and kcenon::logger::memory::object_pool< T >::pool_size_.

◆ clear()

template<typename T >
void kcenon::logger::memory::object_pool< T >::clear ( )
inline

Clear all objects from pool.

Definition at line 122 of file object_pool.h.

122 {
123 std::lock_guard<std::mutex> lock(mutex_);
124 while (!available_objects_.empty()) {
125 available_objects_.pop();
126 }
127 pool_size_.store(0);
128 }

References kcenon::logger::memory::object_pool< T >::available_objects_, kcenon::logger::memory::object_pool< T >::mutex_, and kcenon::logger::memory::object_pool< T >::pool_size_.

◆ get_statistics()

template<typename T >
statistics kcenon::logger::memory::object_pool< T >::get_statistics ( ) const
inline

Get pool statistics.

Returns
Current pool statistics

Definition at line 110 of file object_pool.h.

110 {
111 std::lock_guard<std::mutex> lock(mutex_);
112 statistics stats;
113 stats.total_size = pool_size_.load();
114 stats.available_count = available_objects_.size();
115 stats.in_use_count = pool_size_.load() - available_objects_.size();
116 return stats;
117 }

References kcenon::logger::memory::object_pool< T >::statistics::available_count, kcenon::logger::memory::object_pool< T >::available_objects_, kcenon::logger::memory::object_pool< T >::statistics::in_use_count, kcenon::logger::memory::object_pool< T >::mutex_, kcenon::logger::memory::object_pool< T >::pool_size_, and kcenon::logger::memory::object_pool< T >::statistics::total_size.

◆ initialize_pool()

template<typename T >
void kcenon::logger::memory::object_pool< T >::initialize_pool ( )
inlineprivate

Initialize pool with initial objects.

Definition at line 134 of file object_pool.h.

134 {
135 std::lock_guard<std::mutex> lock(mutex_);
136
137 for (size_t i = 0; i < config_.initial_size; ++i) {
138 available_objects_.push(std::make_unique<T>());
139 }
140
142 }

References kcenon::logger::memory::object_pool< T >::available_objects_, kcenon::logger::memory::object_pool< T >::config_, kcenon::logger::memory::object_pool< T >::config::initial_size, kcenon::logger::memory::object_pool< T >::mutex_, and kcenon::logger::memory::object_pool< T >::pool_size_.

◆ release()

template<typename T >
void kcenon::logger::memory::object_pool< T >::release ( std::unique_ptr< T > obj)
inline

Return an object to the pool.

Parameters
objObject to return

Definition at line 83 of file object_pool.h.

83 {
84 if (!obj) {
85 return;
86 }
87
88 std::lock_guard<std::mutex> lock(mutex_);
89
90 // Only return to pool if not exceeding max size
91 if (available_objects_.size() < config_.max_size) {
92 available_objects_.push(std::move(obj));
93 }
94 // If exceeding max size, object will be destroyed automatically
95 }

References kcenon::logger::memory::object_pool< T >::available_objects_, kcenon::logger::memory::object_pool< T >::config_, kcenon::logger::memory::object_pool< T >::config::max_size, and kcenon::logger::memory::object_pool< T >::mutex_.

Member Data Documentation

◆ available_objects_

◆ config_

◆ mutex_

◆ pool_size_


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