3#ifndef DATASTORM_INTERNALI_H
4#define DATASTORM_INTERNALI_H
6#include "DataStorm/SampleEvent.h"
15# pragma clang diagnostic push
16# pragma clang diagnostic ignored "-Wshadow-field-in-constructor"
17# pragma clang diagnostic ignored "-Wweak-vtables"
18#elif defined(__GNUC__)
19# pragma GCC diagnostic push
20# pragma GCC diagnostic ignored "-Wshadow"
33 virtual ~Filterable() =
default;
39 virtual ~Element() =
default;
40 [[nodiscard]]
virtual std::string toString()
const = 0;
42 [[nodiscard]]
virtual std::int64_t getId()
const = 0;
45 class Key :
public Filterable,
public virtual Element
52 virtual ~KeyFactory() =
default;
53 [[nodiscard]]
virtual std::shared_ptr<Key> get(std::int64_t)
const = 0;
57 class Tag :
public virtual Element
64 virtual ~TagFactory() =
default;
65 [[nodiscard]]
virtual std::shared_ptr<Tag> get(std::int64_t)
const = 0;
69 class Sample :
public Filterable
77 const std::shared_ptr<Key>& key,
78 const std::shared_ptr<Tag>& tag,
80 std::int64_t timestamp)
81 : session(std::move(session)),
82 origin(std::move(origin)),
87 timestamp(std::chrono::microseconds(timestamp)),
88 _encodedValue(std::move(value))
92 Sample(
DataStorm::SampleEvent event,
const std::shared_ptr<Tag>& tag =
nullptr) : event(event), tag(tag) {}
94 [[nodiscard]]
virtual bool hasValue()
const = 0;
95 virtual void setValue(
const std::shared_ptr<Sample>&) = 0;
101 [[nodiscard]]
const Ice::ByteSeq& getEncodedValue()
const {
return _encodedValue; }
107 std::shared_ptr<Key> key;
108 std::shared_ptr<Tag> tag;
109 std::chrono::time_point<std::chrono::system_clock> timestamp;
118 virtual ~SampleFactory() =
default;
120 [[nodiscard]]
virtual std::shared_ptr<Sample> create(
125 const std::shared_ptr<Key>&,
126 const std::shared_ptr<Tag>&,
131 class Filter :
public virtual Element
134 [[nodiscard]]
virtual bool match(
const std::shared_ptr<Filterable>&)
const = 0;
135 [[nodiscard]]
virtual const std::string& getName()
const = 0;
141 virtual ~FilterFactory() =
default;
143 [[nodiscard]]
virtual std::shared_ptr<Filter> get(std::int64_t)
const = 0;
149 virtual ~FilterManager() =
default;
151 [[nodiscard]]
virtual std::shared_ptr<Filter> get(
const std::string&, std::int64_t)
const = 0;
153 [[nodiscard]]
virtual std::shared_ptr<Filter>
160 virtual ~DataElement() =
default;
162 using Id = std::tuple<std::string, std::int64_t, std::int64_t>;
164 [[nodiscard]]
virtual std::vector<std::string> getConnectedElements()
const = 0;
165 [[nodiscard]]
virtual std::vector<std::shared_ptr<Key>> getConnectedKeys()
const = 0;
166 virtual void onConnectedKeys(
167 std::function<
void(std::vector<std::shared_ptr<Key>>)>,
169 virtual void onConnectedElements(
170 std::function<
void(std::vector<std::string>)>,
173 virtual void destroy() = 0;
177 class DataReader :
public virtual DataElement
180 [[nodiscard]]
virtual bool hasWriters() = 0;
181 virtual void waitForWriters(
int) = 0;
182 [[nodiscard]]
virtual int getInstanceCount()
const = 0;
184 [[nodiscard]]
virtual std::vector<std::shared_ptr<Sample>> getAllUnread() = 0;
185 virtual void waitForUnread(
unsigned int)
const = 0;
186 [[nodiscard]]
virtual bool hasUnread()
const = 0;
187 [[nodiscard]]
virtual std::shared_ptr<Sample> getNextUnread() = 0;
189 virtual void onSamples(
190 std::function<
void(
const std::vector<std::shared_ptr<Sample>>&)>,
191 std::function<
void(
const std::shared_ptr<Sample>&)>) = 0;
194 class DataWriter :
public virtual DataElement
197 [[nodiscard]]
virtual bool hasReaders()
const = 0;
198 virtual void waitForReaders(
int)
const = 0;
200 [[nodiscard]]
virtual std::shared_ptr<Sample> getLast()
const = 0;
201 [[nodiscard]]
virtual std::vector<std::shared_ptr<Sample>> getAll()
const = 0;
203 virtual void publish(
const std::shared_ptr<Key>&,
const std::shared_ptr<Sample>&) = 0;
209 virtual ~Topic() =
default;
211 using Updater = std::function<
212 void(
const std::shared_ptr<Sample>&,
const std::shared_ptr<Sample>&,
const Ice::CommunicatorPtr&)>;
214 virtual void setUpdater(
const std::shared_ptr<Tag>&, Updater) = 0;
216 virtual void setUpdaters(std::map<std::shared_ptr<Tag>, Updater>) = 0;
217 [[nodiscard]]
virtual std::map<std::shared_ptr<Tag>, Updater> getUpdaters()
const = 0;
219 [[nodiscard]]
virtual std::string getName()
const = 0;
220 virtual void destroy() = 0;
223 class TopicReader :
public virtual Topic
226 [[nodiscard]]
virtual std::shared_ptr<DataReader> createFiltered(
227 const std::shared_ptr<Filter>&,
229 DataStorm::ReaderConfig,
230 std::string = std::string(),
233 [[nodiscard]]
virtual std::shared_ptr<DataReader> create(
234 const std::vector<std::shared_ptr<Key>>&,
236 DataStorm::ReaderConfig,
237 std::string = std::string(),
240 virtual void setDefaultConfig(DataStorm::ReaderConfig) = 0;
241 [[nodiscard]]
virtual bool hasWriters()
const = 0;
242 virtual void waitForWriters(
int)
const = 0;
245 class TopicWriter :
public virtual Topic
248 [[nodiscard]]
virtual std::shared_ptr<DataWriter>
249 create(
const std::vector<std::shared_ptr<Key>>&, std::string, DataStorm::WriterConfig) = 0;
251 virtual void setDefaultConfig(DataStorm::WriterConfig) = 0;
252 [[nodiscard]]
virtual bool hasReaders()
const = 0;
253 virtual void waitForReaders(
int)
const = 0;
259 virtual ~TopicFactory() =
default;
261 [[nodiscard]]
virtual std::shared_ptr<TopicReader> createTopicReader(
263 std::shared_ptr<KeyFactory>,
264 std::shared_ptr<TagFactory>,
265 std::shared_ptr<SampleFactory>,
266 std::shared_ptr<FilterManager>,
267 std::shared_ptr<FilterManager>) = 0;
269 [[nodiscard]]
virtual std::shared_ptr<TopicWriter> createTopicWriter(
271 std::shared_ptr<KeyFactory>,
272 std::shared_ptr<TagFactory>,
273 std::shared_ptr<SampleFactory>,
274 std::shared_ptr<FilterManager>,
275 std::shared_ptr<FilterManager>) = 0;
281#if defined(__clang__)
282# pragma clang diagnostic pop
283#elif defined(__GNUC__)
284# pragma GCC diagnostic pop
SampleEvent
Describes the operation used by a data writer to update a data element.
CallbackReason
The callback action enumerator specifies the reason why a callback is called.
std::shared_ptr< Communicator > CommunicatorPtr
A shared pointer to a Communicator.
std::vector< std::byte > ByteSeq
A sequence of bytes.