HLCC Documentation 2.2.0
Loading...
Searching...
No Matches
circularBufferConcurrent.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2020-2025 European Southern Observatory (ESO)
2//
3// SPDX-License-Identifier: LGPL-3.0-only
4
5/*
6 * circularBufferConcurrent.hpp
7 *
8 * Created on: Jul 7, 2021
9 * Author: hsommer
10 */
11#ifndef HLCC_OLDBMUX_CIRCULARBUFFERCONCURRENT_HPP
12#define HLCC_OLDBMUX_CIRCULARBUFFERCONCURRENT_HPP
13
14#include <mutex>
15#include <condition_variable>
16#include <functional>
17#include <optional>
18
19#include <log4cplus/logger.h>
20#include <rad/logger.hpp>
21
22#include <boost/circular_buffer.hpp>
23
24
25// HSO TODO: Check async calls in ProcessRequest in ~/git-rtc/rtctk/componentFramework/services/oldb/src/oldbAdapter.cpp
26
27
28namespace hlcc::oldbmux {
29
52template<typename T>
54{
55public:
56
57 explicit CircularBufferConcurrent(const std::string& name, std::size_t capacity,
58 const log4cplus::Logger& logger);
59
61
64
73 void Push(T&& data);
74
84 std::optional<T> Poll(std::chrono::milliseconds timeout = std::chrono::milliseconds::zero());
85
86 void Clear();
87
88 int Size() const;
89
95 const std::unique_ptr<std::scoped_lock<std::recursive_mutex>> Lock() const;
96
107 void SetDiscardListener(std::function<void(T&)> discard_listener);
108
113 boost::circular_buffer<T>& GetCb();
114
115private:
119 const log4cplus::Logger m_logger;
120
126 boost::circular_buffer<T> cb;
127
141 mutable std::recursive_mutex mutex;
142
149 std::condition_variable_any buffer_not_empty;
150
155 std::function<void(T&)> discard_listener;
156
160 const std::string name;
161
162};
163
164} // end namespace hlcc::oldbmux
165
166// include template class definition from separate header file.
168
169#endif /* HLCC_OLDBMUX_CIRCULARBUFFERCONCURRENT_HPP */
A first-in first-out buffer with a fixed size that replaces its oldest element if full.
Definition circularBufferConcurrent.hpp:54
int Size() const
Definition circularBufferConcurrent.ipp:97
const std::unique_ptr< std::scoped_lock< std::recursive_mutex > > Lock() const
Definition circularBufferConcurrent.ipp:104
CircularBufferConcurrent(const CircularBufferConcurrent &)=delete
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 & operator=(const CircularBufferConcurrent &)=delete
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