hlcc 2.0.0-beta2+pre1
Loading...
Searching...
No Matches
ciiOldbDataPointAsync.hpp
Go to the documentation of this file.
1/*
2 * ciiOldbDataPointAsync.hpp
3 *
4 * Created on: Jul 2, 2021
5 * Author: hsommer
6 */
7#define BOOST_THREAD_PROVIDES_FUTURE
8#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
9#define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY // see https://www.javaer101.com/en/article/84361855.html
10
11#ifndef HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
12#define HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
13
15
16#include "ciiOldbDataPoint.hpp"
17#include "ciiOldbDpValue.hpp"
18#include "ciiOldbDpQuality.hpp"
19
20#include <log4cplus/logger.h>
21#include <rad/logger.hpp>
22
23#include <boost/thread/future.hpp>
24#include <boost/asio/thread_pool.hpp>
25#include <boost/asio/post.hpp>
26
27#include <atomic>
28
29
30namespace hlcc::oldbmux {
31
38template<typename T>
40
41public:
42
43 // See declaration below.
44 struct OldbData;
46
51 std::string name, std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate,
52 boost::asio::thread_pool& async_exec, const log4cplus::Logger& logger,
53 std::size_t buffer_capacity = 1 );
54
56
57 std::shared_ptr<elt::oldb::CiiOldbDpValue<T>> ReadValue(
58 bool check_bad_quality = true);
59
60 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteValue(
61 const T& value,
62 int64_t timestamp = elt::oldb::CiiOldbUtil::Now(),
63 elt::oldb::CiiOldbDpQuality quality = elt::oldb::CiiOldbDpQuality::OK,
64 bool is_disable_publishing = false);
65
66 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> SetQuality(
67 elt::oldb::CiiOldbDpQuality quality,
68 bool is_disable_publishing = false);
69
70private:
71
72 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteAsync(
73 OldbData&& new_data,
74 bool is_disable_publishing);
75
76 void WriteBufferToOldb();
77
78 const log4cplus::Logger logger;
79
83 const std::string name;
84
92 const std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate;
93
100
105 boost::asio::thread_pool& async_exec;
106
111 std::atomic<bool> is_async_processing;
112};
113
114
115
127template<typename T>
129
130public:
131
135 OldbData(elt::oldb::CiiOldbDpQuality quality)
136 : m_value {std::nullopt},
137 m_timestamp {std::nullopt},
138 m_quality {quality}
139 { }
140
144 OldbData(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality)
145 : m_value {value},
146 m_timestamp {timestamp},
147 m_quality {quality}
148 { }
149
153 virtual ~OldbData() = default;
154
155 OldbData(const OldbData&) = delete;
156 OldbData& operator=(const OldbData&) = delete;
157
158 OldbData(OldbData&&) = default;
160
161 std::optional<T> GetValue() {
162 return m_value;
163 }
164 std::optional<int64_t> GetTimestamp() {
165 return m_timestamp;
166 }
167 std::optional<elt::oldb::CiiOldbDpQuality> GetQuality() {
168 return m_quality;
169 }
170private:
174 std::optional<T> m_value;
175
181 std::optional<int64_t> m_timestamp;
182
186 std::optional<elt::oldb::CiiOldbDpQuality> m_quality;
187};
188
189
194template<typename T>
196
197public:
198 OldbDataWithPromise(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality, boost::promise<OldbData>&& promise)
199 : OldbData {value, timestamp, quality},
200 m_promise {std::move(promise)}
201 { }
202
203 virtual ~OldbDataWithPromise() = default;
204
207
208 // creates memberwise moves incl base class.
210
212
213 boost::promise<CiiOldbDataPointAsync<T>::OldbData>* GetPromise(){
214 return &m_promise;
215 }
216
217private:
218 boost::promise<CiiOldbDataPointAsync<T>::OldbData> m_promise;
219};
220
221} // namespace hlcc::oldbmux
222
223
224// include template class definition from separate header file.
225#include <hlcc/oldbmux/ciiOldbDataPointAsync.ipp>
226
227#endif /* HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP */
CiiOldbDataPointAsync is a wrapper for class CiiOldbDataPoint, to allow asynchronous writes to the OL...
Definition: ciiOldbDataPointAsync.hpp:39
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.
std::shared_ptr< elt::oldb::CiiOldbDpValue< T > > ReadValue(bool check_bad_quality=true)
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)
boost::future< typename CiiOldbDataPointAsync< T >::OldbData > SetQuality(elt::oldb::CiiOldbDpQuality quality, bool is_disable_publishing=false)
A first-in first-out buffer with a fixed size that replaces its oldest element if full.
Definition: circularBufferConcurrent.hpp:50
Definition: ciiOldbDataPointAsync.hpp:30
Value type for data for buffering and writing to OLDB. This subclass is used internally by CiiOldbDat...
Definition: ciiOldbDataPointAsync.hpp:195
OldbDataWithPromise(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality, boost::promise< OldbData > &&promise)
Definition: ciiOldbDataPointAsync.hpp:198
OldbDataWithPromise & operator=(const OldbDataWithPromise &)=delete
OldbDataWithPromise & operator=(OldbDataWithPromise &&other)=default
OldbDataWithPromise(OldbDataWithPromise &&other)=default
boost::promise< CiiOldbDataPointAsync< T >::OldbData > * GetPromise()
Definition: ciiOldbDataPointAsync.hpp:213
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:128
std::optional< int64_t > GetTimestamp()
Definition: ciiOldbDataPointAsync.hpp:164
OldbData(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality)
Definition: ciiOldbDataPointAsync.hpp:144
OldbData & operator=(const OldbData &)=delete
std::optional< T > GetValue()
Definition: ciiOldbDataPointAsync.hpp:161
OldbData(elt::oldb::CiiOldbDpQuality quality)
Definition: ciiOldbDataPointAsync.hpp:135
virtual ~OldbData()=default
Destructor.
OldbData & operator=(OldbData &&)=default
std::optional< elt::oldb::CiiOldbDpQuality > GetQuality()
Definition: ciiOldbDataPointAsync.hpp:167