12#include <condition_variable>
15#include <boost/circular_buffer.hpp>
25 const std::string& name, std::size_t capacity,
const log4cplus::Logger& logger)
48 std::lock_guard lck {mutex};
50 std::optional<T> data_old {};
52 if (cb.full() && discard_listener) {
53 data_old = std::move(cb.front());
56 cb.push_back(std::move(
data));
58 if (data_old && discard_listener) {
59 discard_listener(*data_old);
66 buffer_not_empty.notify_one();
74 std::unique_lock lck {mutex};
77 if (buffer_not_empty.wait_for(lck, timeout, [=](){return !cb.empty();})) {
79 T
data = std::move(cb.front());
81 return std::make_optional<T>(std::move(
data));
91 std::lock_guard lck {mutex};
98 std::lock_guard lck {mutex};
105 return std::make_unique<std::scoped_lock<std::recursive_mutex>>(mutex);
111 std::lock_guard lck {mutex};
112 this->discard_listener = discard_listener;
int Size() const
Definition circularBufferConcurrent.ipp:97
const std::unique_ptr< std::scoped_lock< std::recursive_mutex > > Lock() const
Definition circularBufferConcurrent.ipp:104
std::optional< T > Poll(std::chrono::milliseconds timeout=std::chrono::milliseconds::zero())
Gets the oldest element from the circular buffer.
Definition circularBufferConcurrent.ipp:71
CircularBufferConcurrent(const std::string &name, std::size_t capacity, const log4cplus::Logger &logger)
Definition circularBufferConcurrent.ipp:24
boost::circular_buffer< T > & GetCb()
Definition circularBufferConcurrent.ipp:116
~CircularBufferConcurrent()
Definition circularBufferConcurrent.ipp:40
void Clear()
Definition circularBufferConcurrent.ipp:90
void SetDiscardListener(std::function< void(T &)> discard_listener)
Definition circularBufferConcurrent.ipp:110
void Push(T &&data)
Adds new data to the circular buffer.
Definition circularBufferConcurrent.ipp:46
Definition ciiOldbDataPointAsync.hpp:34
ccsinsdetifllnetio::PointingKernelPositions data
Definition pkp_llnetio_subscriber.cpp:33