11#define BOOST_THREAD_PROVIDES_FUTURE
12#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
13#define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
15#ifndef HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
16#define HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
20#include "ciiOldbDataPoint.hpp"
21#include "ciiOldbDpValue.hpp"
22#include "ciiOldbDpQuality.hpp"
24#include <log4cplus/logger.h>
25#include <rad/logger.hpp>
27#include <boost/thread/future.hpp>
28#include <boost/asio/thread_pool.hpp>
29#include <boost/asio/post.hpp>
85 std::string name, std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate,
86 boost::asio::thread_pool& async_exec,
const log4cplus::Logger& logger,
87 std::size_t buffer_capacity = 1 );
91 std::shared_ptr<elt::oldb::CiiOldbDpValue<T>>
ReadValue(
92 bool check_bad_quality =
true);
94 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
WriteValue(
96 int64_t timestamp = elt::oldb::CiiOldbUtil::Now(),
97 elt::oldb::CiiOldbDpQuality quality = elt::oldb::CiiOldbDpQuality::OK,
98 bool is_disable_publishing =
false);
100 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
SetQuality(
101 elt::oldb::CiiOldbDpQuality quality,
102 bool is_disable_publishing =
false);
111 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteAsync(
113 bool is_disable_publishing);
120 void WriteBufferToOldb();
129 std::condition_variable m_sync_dtor_cv;
154 int m_sync_dtor_n_writing;
162 std::mutex m_sync_dtor_mutex;
165 const log4cplus::Logger logger;
170 const std::string name;
179 const std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate;
192 boost::asio::thread_pool& async_exec;
198 std::atomic<bool> is_async_processing;
223 : m_value {std::nullopt},
224 m_timestamp {std::nullopt},
231 OldbData(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality)
233 m_timestamp {timestamp},
258 m_timestamp = timestamp;
260 std::optional<elt::oldb::CiiOldbDpQuality>
GetQuality()
const {
267 std::optional<T> m_value;
274 std::optional<int64_t> m_timestamp;
279 std::optional<elt::oldb::CiiOldbDpQuality> m_quality;
291 OldbDataWithPromise(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality, boost::promise<OldbData>&& promise)
292 :
OldbData {value, timestamp, quality},
293 m_promise {std::move(promise)}
306 boost::promise<CiiOldbDataPointAsync<T>::OldbData>*
GetPromise(){
311 boost::promise<CiiOldbDataPointAsync<T>::OldbData> m_promise;
CiiOldbDataPointAsync class source file.
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:165
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:177
boost::future< typename CiiOldbDataPointAsync< T >::OldbData > SetQuality(elt::oldb::CiiOldbDpQuality quality, bool is_disable_publishing=false)
Definition ciiOldbDataPointAsync.ipp:193
virtual ~CiiOldbDataPointAsync()
Definition ciiOldbDataPointAsync.ipp:136
A first-in first-out buffer with a fixed size that replaces its oldest element if full.
Definition circularBufferConcurrent.hpp:54
Definition ciiOldbDataPointAsync.hpp:35
Value type for data for buffering and writing to OLDB. This subclass is used internally by CiiOldbDat...
Definition ciiOldbDataPointAsync.hpp:288
OldbDataWithPromise(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality, boost::promise< OldbData > &&promise)
Definition ciiOldbDataPointAsync.hpp:291
OldbDataWithPromise & operator=(const OldbDataWithPromise &)=delete
OldbDataWithPromise & operator=(OldbDataWithPromise &&other)=default
OldbDataWithPromise(OldbDataWithPromise &&other)=default
boost::promise< CiiOldbDataPointAsync< T >::OldbData > * GetPromise()
Definition ciiOldbDataPointAsync.hpp:306
OldbDataWithPromise(const OldbDataWithPromise &)=delete
virtual ~OldbDataWithPromise()=default
Value type for data for buffering and writing to OLDB. This base class is used as an interface toward...
Definition ciiOldbDataPointAsync.hpp:215
void SetTimestamp(int64_t timestamp)
Definition ciiOldbDataPointAsync.hpp:257
OldbData(OldbData &&)=default
std::optional< T > GetValue() const
Definition ciiOldbDataPointAsync.hpp:248
std::optional< int64_t > GetTimestamp() const
Definition ciiOldbDataPointAsync.hpp:254
OldbData(std::optional< T > value, std::optional< int64_t > timestamp, std::optional< elt::oldb::CiiOldbDpQuality > quality)
Definition ciiOldbDataPointAsync.hpp:231
OldbData & operator=(const OldbData &)=delete
OldbData(elt::oldb::CiiOldbDpQuality quality)
Definition ciiOldbDataPointAsync.hpp:222
virtual ~OldbData()=default
Destructor.
OldbData & operator=(OldbData &&)=default
std::optional< elt::oldb::CiiOldbDpQuality > GetQuality() const
Definition ciiOldbDataPointAsync.hpp:260
void SetValue(T value)
Definition ciiOldbDataPointAsync.hpp:251
OldbData(const OldbData &)=delete