HLCC Documentation 2.2.0
Loading...
Searching...
No Matches
ciiOldbDataPointAsync.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 * ciiOldbDataPointAsync.hpp
7 *
8 * Created on: Jul 2, 2021
9 * Author: hsommer
10 */
11#define BOOST_THREAD_PROVIDES_FUTURE
12#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
13#define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY // see https://www.javaer101.com/en/article/84361855.html
14
15#ifndef HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
16#define HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
17
19
20#include "ciiOldbDataPoint.hpp"
21#include "ciiOldbDpValue.hpp"
22#include "ciiOldbDpQuality.hpp"
23
24#include <log4cplus/logger.h>
25#include <rad/logger.hpp>
26
27#include <boost/thread/future.hpp>
28#include <boost/asio/thread_pool.hpp>
29#include <boost/asio/post.hpp>
30
31#include <atomic>
32
33
34namespace hlcc::oldbmux {
35
52template<typename T>
54
55public:
56
57 // See declaration below.
58 struct OldbData;
60
65 std::string name, std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate,
66 boost::asio::thread_pool& async_exec, const log4cplus::Logger& logger,
67 std::size_t buffer_capacity = 1 );
68
69 virtual ~CiiOldbDataPointAsync();
70
71 std::shared_ptr<elt::oldb::CiiOldbDpValue<T>> ReadValue(
72 bool check_bad_quality = true);
73
74 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteValue(
75 const T& value,
76 int64_t timestamp = elt::oldb::CiiOldbUtil::Now(),
77 elt::oldb::CiiOldbDpQuality quality = elt::oldb::CiiOldbDpQuality::OK,
78 bool is_disable_publishing = false);
79
80 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> SetQuality(
81 elt::oldb::CiiOldbDpQuality quality,
82 bool is_disable_publishing = false);
83
84private:
85
86 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteAsync(
87 OldbData&& new_data,
88 bool is_disable_publishing);
89
90 void WriteBufferToOldb();
91
92 const log4cplus::Logger logger;
93
97 const std::string name;
98
106 const std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate;
107
114
119 boost::asio::thread_pool& async_exec;
120
125 std::atomic<bool> is_async_processing;
126};
127
128
129
141template<typename T>
143
144public:
145
149 OldbData(elt::oldb::CiiOldbDpQuality quality)
150 : m_value {std::nullopt},
151 m_timestamp {std::nullopt},
152 m_quality {quality}
153 { }
154
158 OldbData(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality)
159 : m_value {value},
160 m_timestamp {timestamp},
161 m_quality {quality}
162 { }
163
167 virtual ~OldbData() = default;
168
169 OldbData(const OldbData&) = delete;
170 OldbData& operator=(const OldbData&) = delete;
171
172 OldbData(OldbData&&) = default;
174
175 std::optional<T> GetValue() const {
176 return m_value;
177 }
178 void SetValue(T value) {
179 m_value = value;
180 }
181 std::optional<int64_t> GetTimestamp() const {
182 return m_timestamp;
183 }
184 void SetTimestamp(int64_t timestamp) {
185 m_timestamp = timestamp;
186 }
187 std::optional<elt::oldb::CiiOldbDpQuality> GetQuality() const {
188 return m_quality;
189 }
190private:
194 std::optional<T> m_value;
195
201 std::optional<int64_t> m_timestamp;
202
206 std::optional<elt::oldb::CiiOldbDpQuality> m_quality;
207};
208
209
214template<typename T>
216
217public:
218 OldbDataWithPromise(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality, boost::promise<OldbData>&& promise)
219 : OldbData {value, timestamp, quality},
220 m_promise {std::move(promise)}
221 { }
222
223 virtual ~OldbDataWithPromise() = default;
224
227
228 // creates memberwise moves incl base class.
230
232
233 boost::promise<CiiOldbDataPointAsync<T>::OldbData>* GetPromise(){
234 return &m_promise;
235 }
236
237private:
238 boost::promise<CiiOldbDataPointAsync<T>::OldbData> m_promise;
239};
240
241} // namespace hlcc::oldbmux
242
243
244// include template class definition from separate header file.
246
247#endif /* HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP */
CiiOldbDataPointAsync class source file.
CiiOldbDataPointAsync is a wrapper for class CiiOldbDataPoint, to allow asynchronous writes to the OL...
Definition ciiOldbDataPointAsync.hpp:53
CiiOldbDataPointAsync(std::string name, std::shared_ptr< elt::oldb::CiiOldbDataPoint< T > > delegate, boost::asio::thread_pool &async_exec, const log4cplus::Logger &logger, std::size_t buffer_capacity=1)
Constructor.
Definition ciiOldbDataPointAsync.ipp:62
std::shared_ptr< elt::oldb::CiiOldbDpValue< T > > ReadValue(bool check_bad_quality=true)
Definition ciiOldbDataPointAsync.ipp:128
boost::future< typename CiiOldbDataPointAsync< T >::OldbData > WriteValue(const T &value, int64_t timestamp=elt::oldb::CiiOldbUtil::Now(), elt::oldb::CiiOldbDpQuality quality=elt::oldb::CiiOldbDpQuality::OK, bool is_disable_publishing=false)
Definition ciiOldbDataPointAsync.ipp:140
boost::future< typename CiiOldbDataPointAsync< T >::OldbData > SetQuality(elt::oldb::CiiOldbDpQuality quality, bool is_disable_publishing=false)
Definition ciiOldbDataPointAsync.ipp:150
virtual ~CiiOldbDataPointAsync()
Definition ciiOldbDataPointAsync.ipp:122
A first-in first-out buffer with a fixed size that replaces its oldest element if full.
Definition circularBufferConcurrent.hpp:54
Definition ciiOldbDataPointAsync.hpp:34
Value type for data for buffering and writing to OLDB. This subclass is used internally by CiiOldbDat...
Definition ciiOldbDataPointAsync.hpp:215
OldbDataWithPromise(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality, boost::promise< OldbData > &&promise)
Definition ciiOldbDataPointAsync.hpp:218
OldbDataWithPromise & operator=(const OldbDataWithPromise &)=delete
OldbDataWithPromise & operator=(OldbDataWithPromise &&other)=default
OldbDataWithPromise(OldbDataWithPromise &&other)=default
boost::promise< CiiOldbDataPointAsync< T >::OldbData > * GetPromise()
Definition ciiOldbDataPointAsync.hpp:233
OldbDataWithPromise(const OldbDataWithPromise &)=delete
Value type for data for buffering and writing to OLDB. This base class is used as an interface toward...
Definition ciiOldbDataPointAsync.hpp:142
void SetTimestamp(int64_t timestamp)
Definition ciiOldbDataPointAsync.hpp:184
std::optional< T > GetValue() const
Definition ciiOldbDataPointAsync.hpp:175
std::optional< int64_t > GetTimestamp() const
Definition ciiOldbDataPointAsync.hpp:181
OldbData(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality)
Definition ciiOldbDataPointAsync.hpp:158
OldbData & operator=(const OldbData &)=delete
OldbData(elt::oldb::CiiOldbDpQuality quality)
Definition ciiOldbDataPointAsync.hpp:149
virtual ~OldbData()=default
Destructor.
OldbData & operator=(OldbData &&)=default
std::optional< elt::oldb::CiiOldbDpQuality > GetQuality() const
Definition ciiOldbDataPointAsync.hpp:187
void SetValue(T value)
Definition ciiOldbDataPointAsync.hpp:178