7#define BOOST_THREAD_PROVIDES_FUTURE
8#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
9#define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
11#ifndef HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
12#define HLCC_OLDBMUX_CIIOLDBDATAPOINTASYNC_HPP
16#include "ciiOldbDataPoint.hpp"
17#include "ciiOldbDpValue.hpp"
18#include "ciiOldbDpQuality.hpp"
20#include <log4cplus/logger.h>
21#include <rad/logger.hpp>
23#include <boost/thread/future.hpp>
24#include <boost/asio/thread_pool.hpp>
25#include <boost/asio/post.hpp>
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 );
57 std::shared_ptr<elt::oldb::CiiOldbDpValue<T>>
ReadValue(
58 bool check_bad_quality =
true);
60 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
WriteValue(
62 int64_t timestamp = elt::oldb::CiiOldbUtil::Now(),
63 elt::oldb::CiiOldbDpQuality quality = elt::oldb::CiiOldbDpQuality::OK,
64 bool is_disable_publishing =
false);
66 boost::future<typename CiiOldbDataPointAsync<T>::OldbData>
SetQuality(
67 elt::oldb::CiiOldbDpQuality quality,
68 bool is_disable_publishing =
false);
72 boost::future<typename CiiOldbDataPointAsync<T>::OldbData> WriteAsync(
74 bool is_disable_publishing);
76 void WriteBufferToOldb();
78 const log4cplus::Logger logger;
83 const std::string name;
92 const std::shared_ptr<elt::oldb::CiiOldbDataPoint<T>> delegate;
105 boost::asio::thread_pool& async_exec;
111 std::atomic<bool> is_async_processing;
136 : m_value {std::nullopt},
137 m_timestamp {std::nullopt},
144 OldbData(std::optional<T> value, std::optional<int64_t> timestamp, std::optional<elt::oldb::CiiOldbDpQuality> quality)
146 m_timestamp {timestamp},
174 std::optional<T> m_value;
181 std::optional<int64_t> m_timestamp;
186 std::optional<elt::oldb::CiiOldbDpQuality> m_quality;
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)}
213 boost::promise<CiiOldbDataPointAsync<T>::OldbData>*
GetPromise(){
218 boost::promise<CiiOldbDataPointAsync<T>::OldbData> m_promise;
225#include <hlcc/oldbmux/ciiOldbDataPointAsync.ipp>
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)
virtual ~CiiOldbDataPointAsync()
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
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:128
std::optional< int64_t > GetTimestamp()
Definition: ciiOldbDataPointAsync.hpp:164
OldbData(OldbData &&)=default
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
OldbData(const OldbData &)=delete