Ice 3.8
C++ API Reference
Loading...
Searching...
No Matches
InternalI.h
1// Copyright (c) ZeroC, Inc.
2
3#ifndef DATASTORM_INTERNALI_H
4#define DATASTORM_INTERNALI_H
5
6#include "DataStorm/SampleEvent.h"
7#include "Ice/Ice.h"
8#include "Types.h"
9
10#include <chrono>
11#include <string>
12#include <vector>
13
14#if defined(__clang__)
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"
21#endif
22
23//
24// Private abstract API used by the template based API and the internal DataStorm implementation.
25//
26namespace DataStormI
27{
28 class Instance;
29
30 class Filterable
31 {
32 public:
33 virtual ~Filterable() = default;
34 };
35
36 class Element
37 {
38 public:
39 virtual ~Element() = default;
40 [[nodiscard]] virtual std::string toString() const = 0;
41 [[nodiscard]] virtual Ice::ByteSeq encode(const Ice::CommunicatorPtr&) const = 0;
42 [[nodiscard]] virtual std::int64_t getId() const = 0;
43 };
44
45 class Key : public Filterable, public virtual Element
46 {
47 };
48
49 class KeyFactory
50 {
51 public:
52 virtual ~KeyFactory() = default;
53 [[nodiscard]] virtual std::shared_ptr<Key> get(std::int64_t) const = 0;
54 [[nodiscard]] virtual std::shared_ptr<Key> decode(const Ice::CommunicatorPtr&, const Ice::ByteSeq&) = 0;
55 };
56
57 class Tag : public virtual Element
58 {
59 };
60
61 class TagFactory
62 {
63 public:
64 virtual ~TagFactory() = default;
65 [[nodiscard]] virtual std::shared_ptr<Tag> get(std::int64_t) const = 0;
66 [[nodiscard]] virtual std::shared_ptr<Tag> decode(const Ice::CommunicatorPtr&, const Ice::ByteSeq&) = 0;
67 };
68
69 class Sample : public Filterable
70 {
71 public:
72 Sample(
73 std::string session,
74 std::string origin,
75 std::int64_t id,
77 const std::shared_ptr<Key>& key,
78 const std::shared_ptr<Tag>& tag,
79 Ice::ByteSeq value,
80 std::int64_t timestamp)
81 : session(std::move(session)),
82 origin(std::move(origin)),
83 id(id),
84 event(event),
85 key(key),
86 tag(tag),
87 timestamp(std::chrono::microseconds(timestamp)),
88 _encodedValue(std::move(value))
89 {
90 }
91
92 Sample(DataStorm::SampleEvent event, const std::shared_ptr<Tag>& tag = nullptr) : event(event), tag(tag) {}
93
94 [[nodiscard]] virtual bool hasValue() const = 0;
95 virtual void setValue(const std::shared_ptr<Sample>&) = 0;
96
97 virtual void decode(const Ice::CommunicatorPtr&) = 0;
98 [[nodiscard]] virtual const Ice::ByteSeq& encode(const Ice::CommunicatorPtr&) = 0;
99 [[nodiscard]] virtual Ice::ByteSeq encodeValue(const Ice::CommunicatorPtr&) = 0;
100
101 [[nodiscard]] const Ice::ByteSeq& getEncodedValue() const { return _encodedValue; }
102
103 std::string session;
104 std::string origin;
105 std::int64_t id;
107 std::shared_ptr<Key> key;
108 std::shared_ptr<Tag> tag;
109 std::chrono::time_point<std::chrono::system_clock> timestamp;
110
111 protected:
112 Ice::ByteSeq _encodedValue;
113 };
114
115 class SampleFactory
116 {
117 public:
118 virtual ~SampleFactory() = default;
119
120 [[nodiscard]] virtual std::shared_ptr<Sample> create(
121 std::string,
122 std::string,
123 std::int64_t,
125 const std::shared_ptr<Key>&,
126 const std::shared_ptr<Tag>&,
128 std::int64_t) = 0;
129 };
130
131 class Filter : public virtual Element
132 {
133 public:
134 [[nodiscard]] virtual bool match(const std::shared_ptr<Filterable>&) const = 0;
135 [[nodiscard]] virtual const std::string& getName() const = 0;
136 };
137
138 class FilterFactory
139 {
140 public:
141 virtual ~FilterFactory() = default;
142
143 [[nodiscard]] virtual std::shared_ptr<Filter> get(std::int64_t) const = 0;
144 };
145
146 class FilterManager
147 {
148 public:
149 virtual ~FilterManager() = default;
150
151 [[nodiscard]] virtual std::shared_ptr<Filter> get(const std::string&, std::int64_t) const = 0;
152
153 [[nodiscard]] virtual std::shared_ptr<Filter>
154 decode(const Ice::CommunicatorPtr&, const std::string&, const Ice::ByteSeq&) = 0;
155 };
156
157 class DataElement
158 {
159 public:
160 virtual ~DataElement() = default;
161
162 using Id = std::tuple<std::string, std::int64_t, std::int64_t>;
163
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>>)>,
168 std::function<void(DataStorm::CallbackReason, std::shared_ptr<Key>)>) = 0;
169 virtual void onConnectedElements(
170 std::function<void(std::vector<std::string>)>,
171 std::function<void(DataStorm::CallbackReason, std::string)>) = 0;
172
173 virtual void destroy() = 0;
174 [[nodiscard]] virtual Ice::CommunicatorPtr getCommunicator() const = 0;
175 };
176
177 class DataReader : public virtual DataElement
178 {
179 public:
180 [[nodiscard]] virtual bool hasWriters() = 0;
181 virtual void waitForWriters(int) = 0;
182 [[nodiscard]] virtual int getInstanceCount() const = 0;
183
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;
188
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;
192 };
193
194 class DataWriter : public virtual DataElement
195 {
196 public:
197 [[nodiscard]] virtual bool hasReaders() const = 0;
198 virtual void waitForReaders(int) const = 0;
199
200 [[nodiscard]] virtual std::shared_ptr<Sample> getLast() const = 0;
201 [[nodiscard]] virtual std::vector<std::shared_ptr<Sample>> getAll() const = 0;
202
203 virtual void publish(const std::shared_ptr<Key>&, const std::shared_ptr<Sample>&) = 0;
204 };
205
206 class Topic
207 {
208 public:
209 virtual ~Topic() = default;
210
211 using Updater = std::function<
212 void(const std::shared_ptr<Sample>&, const std::shared_ptr<Sample>&, const Ice::CommunicatorPtr&)>;
213
214 virtual void setUpdater(const std::shared_ptr<Tag>&, Updater) = 0;
215
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;
218
219 [[nodiscard]] virtual std::string getName() const = 0;
220 virtual void destroy() = 0;
221 };
222
223 class TopicReader : public virtual Topic
224 {
225 public:
226 [[nodiscard]] virtual std::shared_ptr<DataReader> createFiltered(
227 const std::shared_ptr<Filter>&,
228 std::string,
229 DataStorm::ReaderConfig,
230 std::string = std::string(),
231 Ice::ByteSeq = {}) = 0;
232
233 [[nodiscard]] virtual std::shared_ptr<DataReader> create(
234 const std::vector<std::shared_ptr<Key>>&,
235 std::string,
236 DataStorm::ReaderConfig,
237 std::string = std::string(),
238 Ice::ByteSeq = {}) = 0;
239
240 virtual void setDefaultConfig(DataStorm::ReaderConfig) = 0;
241 [[nodiscard]] virtual bool hasWriters() const = 0;
242 virtual void waitForWriters(int) const = 0;
243 };
244
245 class TopicWriter : public virtual Topic
246 {
247 public:
248 [[nodiscard]] virtual std::shared_ptr<DataWriter>
249 create(const std::vector<std::shared_ptr<Key>>&, std::string, DataStorm::WriterConfig) = 0;
250
251 virtual void setDefaultConfig(DataStorm::WriterConfig) = 0;
252 [[nodiscard]] virtual bool hasReaders() const = 0;
253 virtual void waitForReaders(int) const = 0;
254 };
255
256 class TopicFactory
257 {
258 public:
259 virtual ~TopicFactory() = default;
260
261 [[nodiscard]] virtual std::shared_ptr<TopicReader> createTopicReader(
262 std::string,
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;
268
269 [[nodiscard]] virtual std::shared_ptr<TopicWriter> createTopicWriter(
270 std::string,
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;
276
277 [[nodiscard]] virtual Ice::CommunicatorPtr getCommunicator() const = 0;
278 };
279}
280
281#if defined(__clang__)
282# pragma clang diagnostic pop
283#elif defined(__GNUC__)
284# pragma GCC diagnostic pop
285#endif
286
287#endif
SampleEvent
Describes the operation used by a data writer to update a data element.
Definition SampleEvent.h:34
CallbackReason
The callback action enumerator specifies the reason why a callback is called.
Definition Types.h:141
std::shared_ptr< Communicator > CommunicatorPtr
A shared pointer to a Communicator.
std::vector< std::byte > ByteSeq
A sequence of bytes.