7#ifndef HLCC_OLDBMUX_CIRCULARBUFFERCONCURRENT_HPP
8#define HLCC_OLDBMUX_CIRCULARBUFFERCONCURRENT_HPP
11#include <condition_variable>
15#include <log4cplus/logger.h>
16#include <rad/logger.hpp>
18#include <boost/circular_buffer.hpp>
54 const log4cplus::Logger& logger);
80 std::optional<T>
Poll(std::chrono::milliseconds timeout = std::chrono::milliseconds::zero());
91 const std::unique_ptr<std::scoped_lock<std::recursive_mutex>>
Lock()
const;
104 const log4cplus::Logger m_logger;
111 boost::circular_buffer<T> cb;
126 mutable std::recursive_mutex mutex;
134 std::condition_variable_any buffer_not_empty;
140 std::function<void(T&)> discard_listener;
145 const std::string name;
152#include <hlcc/oldbmux/circularBufferConcurrent.ipp>
A first-in first-out buffer with a fixed size that replaces its oldest element if full.
Definition: circularBufferConcurrent.hpp:50
const std::unique_ptr< std::scoped_lock< std::recursive_mutex > > Lock() const
CircularBufferConcurrent(const CircularBufferConcurrent &)=delete
std::optional< T > Poll(std::chrono::milliseconds timeout=std::chrono::milliseconds::zero())
Gets the oldest element from the circular buffer.
CircularBufferConcurrent & operator=(const CircularBufferConcurrent &)=delete
CircularBufferConcurrent(const std::string &name, std::size_t capacity, const log4cplus::Logger &logger)
~CircularBufferConcurrent()
void SetDiscardListener(std::function< void(T &)> discard_listener)
void Push(T &&data)
Adds new data to the circular buffer.
Definition: ciiOldbDataPointAsync.hpp:30