37 std::cout <<
"=== Utility Containers Example ===\n\n";
40 std::cout <<
"1. CircularBuffer (mutex-protected, capacity=5):\n";
45 for (
int i = 1; i <= 5; ++i)
49 std::cout <<
" Pushed 1-5. Size=" << buffer.
size() <<
", Full=" << buffer.
full() <<
"\n";
52 buffer.
push(99,
true);
53 std::cout <<
" Pushed 99 with overwrite. Size=" << buffer.
size() <<
"\n";
56 std::cout <<
" Popping: ";
57 while (
auto val = buffer.
pop())
59 std::cout << *val <<
" ";
61 std::cout <<
"\n Empty=" << buffer.
empty() <<
"\n";
65 std::cout <<
"\n2. SPSCCircularBuffer (lock-free, capacity=4):\n";
72 std::cout <<
" Pushed 3 strings. Size=" << spsc.
size() <<
"\n";
75 if (
auto val = spsc.
pop())
77 std::cout <<
" Popped: '" << *val <<
"'\n";
79 std::cout <<
" Remaining size=" << spsc.
size() <<
"\n";
83 std::cout <<
"\n3. ObjectPool (growth=4):\n";
89 std::cout <<
" Reserved 8 slots. Available=" << pool.
available() <<
"\n";
93 auto conn1 = pool.
acquire(&reused, 1,
"db-primary");
94 std::cout <<
" Acquired conn1: id=" << conn1->id <<
", endpoint=" << conn1->endpoint
95 <<
", reused=" << (reused ?
"true" :
"false") <<
"\n";
97 auto conn2 = pool.
acquire(&reused, 2,
"db-replica");
98 std::cout <<
" Acquired conn2: id=" << conn2->id
99 <<
", available=" << pool.
available() <<
"\n";
102 std::cout <<
" Releasing conn1...\n";
104 std::cout <<
" Available after release=" << pool.
available() <<
"\n";
107 auto conn3 = pool.
acquire(&reused, 3,
"db-analytics");
108 std::cout <<
" Acquired conn3: reused=" << (reused ?
"true" :
"false") <<
"\n";
114 std::cout <<
" Pool cleared. Available=" << pool.
available() <<
"\n";
117 std::cout <<
"\nDone.\n";
Thread-safe fixed-capacity circular buffer (SPSC-friendly).
Thread-safe fixed-size circular buffer.
bool push(const T &value, bool overwrite=false)
Thread-safe object pool that reuses raw storage for expensive objects.
pointer_type acquire(bool *reused, Args &&... args)
Acquire an object constructed with the provided arguments.
void reserve(std::size_t count)
Add count additional blocks to the pool.
std::size_t available() const
void clear()
Destroy all cached instances and release memory.
Lock-free circular buffer for single-producer single-consumer (SPSC).
bool push(const T &value)
Push a value (producer thread only).
std::size_t size() const noexcept
std::optional< T > pop()
Pop a value (consumer thread only).
Thread-safe object pool reusing raw storage for expensive objects.
Connection(int i, const std::string &ep)