18 explicit impl(
size_t pool_size,
size_t default_capacity)
22 std::to_string(pool_size) +
23 ", default_capacity=" + std::to_string(default_capacity));
28 std::unique_lock<std::mutex> lock(
mutex_);
33 if ((*it)->capacity() >= min_capacity)
35 auto buffer = std::move(*it);
42 std::to_string(buffer->capacity()));
45 return std::shared_ptr<std::vector<uint8_t>>(
46 buffer.release(), [parent](std::vector<uint8_t>* buf) {
61 auto buffer = std::make_unique<std::vector<uint8_t>>();
62 buffer->reserve(capacity);
67 std::to_string(capacity) +
71 return std::shared_ptr<std::vector<uint8_t>>(
72 buffer.release(), [parent](std::vector<uint8_t>* buf) {
84 auto release(std::vector<uint8_t>* buffer) ->
void
89 std::unique_lock<std::mutex> lock(
mutex_);
109 std::lock_guard<std::mutex> lock(
mutex_);
115 std::unique_lock<std::mutex> lock(
mutex_);
122 NETWORK_LOG_INFO(
"[buffer_pool] Cleared " + std::to_string(cleared) +
" buffers");
135 : pimpl_(std::make_unique<
impl>(pool_size, default_capacity))
153 return pimpl_->acquire(min_capacity,
this);
158 pimpl_->release(buffer);
auto release(std::vector< uint8_t > *buffer) -> void
auto acquire(size_t min_capacity, buffer_pool *parent) -> std::shared_ptr< std::vector< uint8_t > >
std::atomic< size_t > total_allocated_
std::deque< std::unique_ptr< std::vector< uint8_t > > > available_buffers_
impl(size_t pool_size, size_t default_capacity)
auto get_stats() const -> std::pair< size_t, size_t >
Thread-safe memory pool for reusable byte buffers.
buffer_pool(size_t pool_size=32, size_t default_capacity=8192)
Constructs a buffer pool.
auto get_stats() const -> std::pair< size_t, size_t >
Gets current pool statistics.
auto clear() -> void
Clears the pool and releases all cached buffers.
std::unique_ptr< impl > pimpl_
~buffer_pool() noexcept
Destructor.
auto release(std::vector< uint8_t > *buffer) -> void
Returns a buffer to the pool.
auto acquire(size_t min_capacity=0) -> std::shared_ptr< std::vector< uint8_t > >
Acquires a buffer from the pool.
Logger system integration interface for network_system.
#define NETWORK_LOG_TRACE(msg)
#define NETWORK_LOG_INFO(msg)
#define NETWORK_LOG_DEBUG(msg)
Utility components for network_system.