PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
pdu_buffer_pool.cpp
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12
13namespace kcenon::pacs::network {
14
15// ============================================================================
16// pdu_buffer_pool Implementation
17// ============================================================================
18
20 : buffer_pool_(DEFAULT_BUFFER_POOL_SIZE)
21 , pdv_pool_(DEFAULT_PDV_POOL_SIZE)
22 , p_data_pool_(DEFAULT_PDATA_POOL_SIZE) {}
23
25 static pdu_buffer_pool instance;
26 return instance;
27}
28
31 auto buffer = buffer_pool_.acquire();
32 buffer->clear(); // Reset buffer state for reuse
33 return buffer;
34}
35
36auto pdu_buffer_pool::acquire_pdv(uint8_t context_id, bool is_command,
37 bool is_last)
39 auto pdv = pdv_pool_.acquire();
40 pdv->context_id = context_id;
41 pdv->is_command = is_command;
42 pdv->is_last = is_last;
43 pdv->data.clear(); // Reset data vector for reuse
44 return pdv;
45}
46
49 auto p_data = p_data_pool_.acquire();
50 p_data->pdvs.clear(); // Reset PDV vector for reuse
51 return p_data;
52}
53
55 -> const pdu_pool_statistics& {
56 return buffer_pool_.statistics();
57}
58
60 -> const pdu_pool_statistics& {
61 return pdv_pool_.statistics();
62}
63
65 -> const pdu_pool_statistics& {
66 return p_data_pool_.statistics();
67}
68
69void pdu_buffer_pool::reserve_buffers(std::size_t count) {
70 buffer_pool_.reserve(count);
71}
72
73void pdu_buffer_pool::reserve_pdvs(std::size_t count) {
74 pdv_pool_.reserve(count);
75}
76
78 buffer_pool_.clear();
79 pdv_pool_.clear();
80 p_data_pool_.clear();
81}
82
84 const_cast<pdu_pool_statistics&>(buffer_pool_.statistics()).reset();
85 const_cast<pdu_pool_statistics&>(pdv_pool_.statistics()).reset();
86 const_cast<pdu_pool_statistics&>(p_data_pool_.statistics()).reset();
87}
88
89} // namespace kcenon::pacs::network
tracked_pdu_pool< p_data_tf_pdu > p_data_pool_
auto acquire_p_data_tf() -> tracked_pdu_pool< p_data_tf_pdu >::unique_ptr_type
Acquire a p_data_tf_pdu from the pool.
void reserve_buffers(std::size_t count)
Reserve capacity in buffer pool.
tracked_pdu_pool< presentation_data_value > pdv_pool_
auto pdv_statistics() const noexcept -> const pdu_pool_statistics &
Get PDV pool statistics.
auto acquire_buffer() -> tracked_pdu_pool< pooled_buffer >::unique_ptr_type
Acquire a byte buffer from the pool.
auto buffer_statistics() const noexcept -> const pdu_pool_statistics &
Get buffer pool statistics.
void reset_statistics()
Reset all statistics.
tracked_pdu_pool< pooled_buffer > buffer_pool_
void reserve_pdvs(std::size_t count)
Reserve capacity in PDV pool.
static auto get() noexcept -> pdu_buffer_pool &
Get the global PDU buffer pool instance.
auto acquire_pdv(uint8_t context_id=0, bool is_command=false, bool is_last=true) -> tracked_pdu_pool< presentation_data_value >::unique_ptr_type
Acquire a presentation_data_value from the pool.
auto p_data_statistics() const noexcept -> const pdu_pool_statistics &
Get P-DATA-TF pool statistics.
std::unique_ptr< T, std::function< void(T *)> > unique_ptr_type
Object pooling for PDU buffers and network data structures.
Statistics for PDU buffer pool usage monitoring.
void reset() noexcept
Reset all statistics.