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>
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 );
71 std::shared_ptr<elt::oldb::CiiOldbDpValue<T>>
ReadValue(
72 bool check_bad_quality =
true);
74 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
WriteValue(
76 int64_t timestamp = elt::oldb::CiiOldbUtil::Now(),
77 elt::oldb::CiiOldbDpQuality quality = elt::oldb::CiiOldbDpQuality::OK,
78 bool is_disable_publishing =
false);
80 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
SetQuality(
81 elt::oldb::CiiOldbDpQuality quality,
82 bool is_disable_publishing =
false);
86 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteAsync(
88 bool is_disable_publishing);
90 void WriteBufferToOldb();
92 const log4cplus::Logger logger;
97 const std::string name;
106 const std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate;
119 boost::asio::thread_pool& async_exec;
125 std::atomic<bool> is_async_processing;
150 : m_value {std::nullopt},
151 m_timestamp {std::nullopt},
158 OldbData(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality)
160 m_timestamp {timestamp},
185 m_timestamp = timestamp;
187 std::optional<elt::oldb::CiiOldbDpQuality>
GetQuality()
const {
194 std::optional<T> m_value;
201 std::optional<int64_t> m_timestamp;
206 std::optional<elt::oldb::CiiOldbDpQuality> m_quality;
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)}
233 boost::promise<CiiOldbDataPointAsync<T>::OldbData>*
GetPromise(){
238 boost::promise<CiiOldbDataPointAsync<T>::OldbData> m_promise;
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
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:142
void SetTimestamp(int64_t timestamp)
Definition ciiOldbDataPointAsync.hpp:184
OldbData(OldbData &&)=default
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
OldbData(const OldbData &)=delete