dxFeed Graal CXX API v8.1.0
Loading...
Searching...
No Matches
Promise.hpp
1// Copyright (c) 2025 Devexperts LLC.
2// SPDX-License-Identifier: MPL-2.0
3
4#pragma once
5
6#include "../internal/Conf.hpp"
7
9
10#include "../exceptions/JavaException.hpp"
11#include "../internal/Common.hpp"
12
13#include <atomic>
14#include <chrono>
15#include <memory>
16#include <vector>
17
18/**
19 * \defgroup dxfcpp_promise "Promise" Module
20 * \ingroup dxfcpp_modules
21 * @{
22 */
23
25
26struct EventType;
27struct JavaException;
28struct Promises;
29
30struct DXFCPP_EXPORT PromiseImpl {
31 protected:
32 std::atomic<void *> handle = nullptr;
33
34 public:
35 explicit PromiseImpl(void *promiseHandle);
36
37 bool isDone() const;
38 bool hasResult() const;
39 bool hasException() const;
40 bool isCancelled() const;
41 JavaException getException() const;
42 void await() const;
43 void await(std::int32_t timeoutInMilliseconds) const;
44 bool awaitWithoutException(std::int32_t timeoutInMilliseconds) const;
45 void cancel() const;
46};
47
48struct DXFCPP_EXPORT VoidPromiseImpl : PromiseImpl {
49 std::atomic<void *> handle = nullptr;
50 std::atomic<bool> own = true;
51
52 explicit VoidPromiseImpl(void *promiseHandle, bool isOwned = true);
53 ~VoidPromiseImpl();
54 void getResult() const;
55};
56
57struct DXFCPP_EXPORT EventPromiseImpl : PromiseImpl {
58 std::atomic<void *> handle = nullptr;
59 std::atomic<bool> own = true;
60
61 explicit EventPromiseImpl(void *promiseHandle, bool isOwned = true);
62 ~EventPromiseImpl();
63 std::shared_ptr<EventType> getResult() const;
64};
65
66struct DXFCPP_EXPORT EventsPromiseImpl : PromiseImpl {
67 std::atomic<void *> handle = nullptr;
68 std::atomic<bool> own = true;
69
70 explicit EventsPromiseImpl(void *promiseHandle, bool isOwned = true);
71 ~EventsPromiseImpl();
72 std::vector<std::shared_ptr<EventType>> getResult() const;
73};
74
75/**
76 * Mixin for wrapping calls to common promise methods.
77 *
78 * @tparam P The promise type
79 */
80template <typename P> struct CommonPromiseMixin {
81 /**
82 * Returns `true` when a computation has completed normally, or exceptionally, or was canceled.
83 *
84 * @return `true` when computation has completed.
85 */
86 bool isDone() const {
87 return static_cast<const P *>(this)->impl.isDone();
88 }
89
90 /**
91 * Returns `true` when computation has completed normally.
92 * Use ::getResult() method to get the result of the computation.
93 * @return `true` when computation has completed normally.
94 * @see ::getResult()
95 */
96 bool hasResult() const {
97 return static_cast<const P *>(this)->impl.hasResult();
98 }
99
100 /**
101 * Returns `true` when a computation has completed exceptionally or was canceled.
102 * Use ::getException() method to get the exceptional outcome of the computation.
103 * @return `true` when computation has completed exceptionally or was canceled.
104 */
105 bool hasException() const {
106 return static_cast<const P *>(this)->impl.hasException();
107 }
108
109 /**
110 * Returns `true` when computation was cancelled.
111 * Use ::getException() method to get the corresponding CancellationException.
112 * @return `true` when computation was cancelled.
113 * @see ::getException()
114 */
115 bool isCancelled() const {
116 return static_cast<const P *>(this)->impl.isCancelled();
117 }
118
119 /**
120 * Returns exceptional outcome of computation. If the computation has no ::hasException() exception,
121 * then this method returns an exception with a message "null". If a computation has completed exceptionally or was
122 * cancelled, then the result of this method is not an exception with a message "null". If computation was @ref
123 * ::isCancelled() "cancelled", then this method returns "an instance of CancellationException".
124 *
125 * @return exceptional outcome of computation.
126 * @see ::hasException()
127 */
129 return static_cast<const P *>(this)->impl.getException();
130 }
131
132 /**
133 * Wait for computation to complete or timeout or throw an exception in case of exceptional completion.
134 * If the wait is interrupted, then the computation is @ref ::cancel() "canceled",
135 * the interruption flag on the current thread is set, and "CancellationException" is thrown.
136 *
137 * <p>If the wait times are out, then the computation is @ref ::cancel() "canceled" and this method returns `false`.
138 * Use this method in the code that shall continue normal execution in case of timeout.
139 *
140 * @param timeoutInMilliseconds The timeout.
141 * @return `true` if the computation has completed normally; `false` when wait timed out.
142 * @throws CancellationException if computation was cancelled.
143 * @throws PromiseException if computation has completed exceptionally.
144 */
145 bool awaitWithoutException(std::int32_t timeoutInMilliseconds) const {
146 return static_cast<const P *>(this)->impl.awaitWithoutException(timeoutInMilliseconds);
147 }
148
149 /**
150 * Wait for computation to complete or timeout or throw an exception in case of exceptional completion.
151 * If the wait is interrupted, then the computation is @ref ::cancel() "canceled",
152 * the interruption flag on the current thread is set, and "CancellationException" is thrown.
153 *
154 * <p>If the wait times are out, then the computation is @ref ::cancel() "canceled" and this method returns `false`.
155 * Use this method in the code that shall continue normal execution in case of timeout.
156 *
157 * @param timeoutInMilliseconds The timeout.
158 * @return `true` if the computation has completed normally; `false` when wait timed out.
159 * @throws CancellationException if computation was cancelled.
160 * @throws PromiseException if computation has completed exceptionally.
161 */
162 bool awaitWithoutException(const std::chrono::milliseconds &timeoutInMilliseconds) const {
163 return static_cast<const P *>(this)->impl.awaitWithoutException(
164 dxfcpp::fitToType<std::int32_t>(timeoutInMilliseconds.count()));
165 }
166
167 /**
168 * This method cancels computation. This method does nothing if the computation has already @ref ::isDone() "completed".
169 *
170 * <p>If cancelled, then ::getException() will return "CancellationException",
171 * @ref ::isDone() "isDone", @ref ::isCancelled() "isCancelled", and @ref ::hasException() "hasException" will
172 * return `true`, all handlers that were installed with `whenDone` method are notified by invoking their
173 * `promiseDone` method, and all waiters on @ref ::await() "join" method throw "CancellationException".
174 */
175 void cancel() const {
176 static_cast<const P *>(this)->impl.cancel();
177 }
178};
179
180/**
181 * Mixin for wrapping Promise method calls for a void.
182 *
183 * @tparam P The promise type.
184 */
185template <typename P> struct VoidPromiseMixin {
186 /**
187 * Returns result of computation.
188 *
189 * @return The result of computation.
190 * @see CommonPromiseMixin::hasResult()
191 */
192 void getResult() const {
193 return static_cast<const P *>(this)->impl.getResult();
194 }
195
196 /**
197 * Wait for the computation to complete and return its result or throw an exception in case of exceptional completion.
198 * @return result of computation.
199 * @throws CancellationException if computation was canceled.
200 * @throws PromiseException if computation has completed exceptionally.
201 */
202 void await() const {
203 static_cast<const P *>(this)->impl.await();
204
205 return getResult();
206 }
207
208 /**
209 * Wait for the computation to complete or timeout and return its result or throw an exception in case of exceptional
210 * completion or timeout.
211 *
212 * @param timeoutInMilliseconds The timeout.
213 * @return The result of computation.
214 * @throws CancellationException if computation was canceled or timed out.
215 * @throws PromiseException if computation has completed exceptionally.
216 */
217 void await(std::int32_t timeoutInMilliseconds) const & {
218 static_cast<const P *>(this)->impl.await(timeoutInMilliseconds);
219
220 return getResult();
221 }
222
223 /**
224 * Wait for the computation to complete or timeout and return its result or throw an exception in case of exceptional
225 * completion or timeout.
226 *
227 * @param timeoutInMilliseconds The timeout.
228 * @return The result of computation.
229 * @throws CancellationException if computation was cancelled or timed out.
230 * @throws PromiseException if computation has completed exceptionally.
231 */
232 void await(const std::chrono::milliseconds &timeoutInMilliseconds) const & {
233 static_cast<const P *>(this)->impl.await(dxfcpp::fitToType<std::int32_t>(timeoutInMilliseconds.count()));
234
235 return getResult();
236 }
237};
238
239/**
240 * Mixin for wrapping Promise method calls for a single event.
241 * @tparam E The event type.
242 * @tparam P The promise type.
243 */
244template <typename E, typename P> struct EventPromiseMixin {
245 /**
246 * Returns result of computation. If the computation has no @ref CommonPromiseMixin::hasResult() "result", then
247 * this method returns `std::shared_ptr<E>(nullptr)`.
248 *
249 * @return The result of computation.
250 * @see CommonPromiseMixin::hasResult()
251 */
252 std::shared_ptr<E> getResult() const {
253 return convertEvent<EventType, E>(static_cast<const P *>(this)->impl.getResult());
254 }
255
256 /**
257 * Wait for the computation to complete and return its result or throw an exception in case of exceptional completion.
258 * @return result of computation.
259 * @throws CancellationException if computation was canceled.
260 * @throws PromiseException if computation has completed exceptionally.
261 */
262 std::shared_ptr<E> await() const {
263 static_cast<const P *>(this)->impl.await();
264
265 return getResult();
266 }
267
268 /**
269 * Wait for computation to complete or timeout and return its result or throw an exception in case of exceptional
270 * completion or timeout.
271 *
272 * @param timeoutInMilliseconds The timeout.
273 * @return The result of computation.
274 * @throws CancellationException if computation was canceled or timed out.
275 * @throws PromiseException if computation has completed exceptionally.
276 */
277 std::shared_ptr<E> await(std::int32_t timeoutInMilliseconds) const & {
278 static_cast<const P *>(this)->impl.await(timeoutInMilliseconds);
279
280 return getResult();
281 }
282
283 /**
284 * Wait for computation to complete or timeout and return its result or throw an exception in case of exceptional
285 * completion or timeout.
286 *
287 * @param timeoutInMilliseconds The timeout.
288 * @return The result of computation.
289 * @throws CancellationException if computation was cancelled or timed out.
290 * @throws PromiseException if computation has completed exceptionally.
291 */
292 std::shared_ptr<E> await(const std::chrono::milliseconds &timeoutInMilliseconds) const & {
293 static_cast<const P *>(this)->impl.await(dxfcpp::fitToType<std::int32_t>(timeoutInMilliseconds.count()));
294
295 return getResult();
296 }
297};
298
299template <typename E, typename P> struct EventsPromiseMixin {
300 /**
301 * Returns result of computation. If computation has no @ref CommonPromiseMixin::hasResult() "result", then
302 * this method returns an empty collection.
303 *
304 * @return The result of computation.
305 * @see CommonPromiseMixin::hasResult()
306 */
307 std::vector<std::shared_ptr<E>> getResult() const {
308 return convertEvents<EventType, E>(static_cast<const P *>(this)->impl.getResult());
309 }
310
311 /**
312 * Wait for computation to complete and return its result or throw an exception in case of exceptional completion.
313 * @return result of computation.
314 * @throws CancellationException if computation was cancelled.
315 * @throws PromiseException if computation has completed exceptionally.
316 */
317 std::vector<std::shared_ptr<E>> await() const {
318 static_cast<const P *>(this)->impl.await();
319
320 return getResult();
321 }
322
323 /**
324 * Wait for computation to complete or timeout and return its result or throw an exception in case of exceptional
325 * completion or timeout.
326 *
327 * @param timeoutInMilliseconds The timeout.
328 * @return The result of computation.
329 * @throws CancellationException if computation was cancelled or timed out.
330 * @throws PromiseException if computation has completed exceptionally.
331 */
332 std::vector<std::shared_ptr<E>> await(std::int32_t timeoutInMilliseconds) const & {
333 static_cast<const P *>(this)->impl.await(timeoutInMilliseconds);
334
335 return getResult();
336 }
337
338 /**
339 * Wait for computation to complete or timeout and return its result or throw an exception in case of exceptional
340 * completion or timeout.
341 *
342 * @param timeoutInMilliseconds The timeout.
343 * @return The result of computation.
344 * @throws CancellationException if computation was cancelled or timed out.
345 * @throws PromiseException if computation has completed exceptionally.
346 */
347 std::vector<std::shared_ptr<E>> await(const std::chrono::milliseconds &timeoutInMilliseconds) const & {
348 static_cast<const P *>(this)->impl.await(dxfcpp::fitToType<std::int32_t>(timeoutInMilliseconds.count()));
349
350 return getResult();
351 }
352};
353
354/**
355 * Result of a computation that will be completed normally or exceptionally in the future.
356 * @tparam T The result type.
357 */
358template <typename T> struct Promise {};
359
360/**
361 * Result of an void receiving that will be completed normally or exceptionally in the future.
362 */
363template <> struct Promise<void> : CommonPromiseMixin<Promise<void>>, VoidPromiseMixin<Promise<void>> {
364 friend struct CommonPromiseMixin<Promise>;
365 friend struct VoidPromiseMixin<Promise>;
366 friend struct Promises;
367
368 private:
369 VoidPromiseImpl impl;
370
371 public:
372 explicit Promise(void *handle, bool own = true) : impl(handle, own) {
373 }
374
375 Promise(const Promise &) = delete;
376 Promise &operator=(const Promise &) = delete;
377
378 Promise(Promise && other) noexcept : impl(other.impl.handle, other.impl.own) {
379 other.impl.handle = nullptr;
380 other.impl.own = false;
381 }
382
383 Promise &operator=(Promise &&) noexcept = delete;
384};
385
386/**
387 * Result of an event receiving that will be completed normally or exceptionally in the future.
388 * @tparam E The event type.
389 */
390template <typename E>
391struct Promise<std::shared_ptr<E>> : CommonPromiseMixin<Promise<std::shared_ptr<E>>>,
392 EventPromiseMixin<E, Promise<std::shared_ptr<E>>> {
393 friend struct CommonPromiseMixin<Promise>;
394 friend struct EventPromiseMixin<E, Promise>;
395 friend struct Promises;
396
397 private:
398 EventPromiseImpl impl;
399
400 public:
401 explicit Promise(void *handle, bool own = true) : impl(handle, own) {
402 }
403
404 template <Derived<E> D>
405 explicit Promise(std::shared_ptr<Promise<std::shared_ptr<D>>> other) : impl(other->impl->handle, false) {
406 }
407
408 template <BaseOf<E> B> std::shared_ptr<Promise<std::shared_ptr<B>>> sharedAs(bool transferOwnership = false) {
409 if (transferOwnership) {
410 impl.own = false;
411 }
412
413 return std::make_shared<Promise<std::shared_ptr<B>>>(impl.handle, transferOwnership);
414 }
415
416 Promise(const Promise &) = delete;
417 Promise &operator=(const Promise &) = delete;
418
419 Promise(Promise && other) noexcept : impl(other.impl.handle, other.impl.own) {
420 other.impl.handle = nullptr;
421 other.impl.own = false;
422 }
423
424 Promise &operator=(Promise &&) noexcept = delete;
425};
426
427struct DXFCPP_EXPORT PromiseListImpl {
428 std::atomic<void *> handle = nullptr;
429
430 explicit PromiseListImpl(void *promiseListHandle);
431 ~PromiseListImpl();
432
433 static std::size_t getSize(void *handle);
434 static void *getElement(void *handle, std::size_t index);
435};
436
437/**
438 * A list of event receiving results that will be completed normally or exceptionally in the future.
439 * It is a std::vector<Promise<std::shared_ptr<E>>> wrapper with Graal semantics.
440 * @tparam E The event type.
441 */
442template <typename E> struct PromiseList {
443 friend struct Promises;
444
446
448
449 using value_type = typename data_type::value_type;
450 using allocator_type = typename data_type::allocator_type;
451 using pointer = typename data_type::pointer;
452 using const_pointer = typename data_type::const_pointer;
453 using reference = typename data_type::reference;
454 using const_reference = typename data_type::const_reference;
455 using size_type = typename data_type::size_type;
456 using difference_type = typename data_type::difference_type;
457
458 using iterator = typename data_type::iterator;
459 using const_iterator = typename data_type::const_iterator;
462
463 private:
464 PromiseListImpl impl;
465
466 data_type data_;
467
468 public:
469 explicit PromiseList(void *handle = nullptr) : impl(handle) {
470 }
471
472 static std::shared_ptr<PromiseList> create(void *handle) {
473 if (!handle) {
474 return {};
475 }
476
477 std::vector<Promise<std::shared_ptr<E>>> result{};
478 auto size = PromiseListImpl::getSize(handle);
479 auto promiseList = std::make_shared<PromiseList<E>>(handle);
480
481 promiseList->data_.reserve(size);
482
483 for (std::size_t elementIndex = 0; elementIndex < size; elementIndex++) {
484 if (auto element = PromiseListImpl::getElement(handle, elementIndex)) {
485 promiseList->data_.emplace_back(element, false);
486 }
487 }
488
489 return promiseList;
490 }
491
492 pointer data() noexcept {
493 return data_.data();
494 }
495
496 const_pointer data() const noexcept {
497 return data_.data();
498 }
499
500 iterator begin() noexcept {
501 return data_.begin();
502 }
503
504 const_iterator begin() const noexcept {
505 return data_.begin();
506 }
507
508 iterator end() noexcept {
509 return data_.end();
510 }
511
512 const_iterator end() const noexcept {
513 return data_.end();
514 }
515
516 const_iterator cbegin() const noexcept {
517 return data_.cbegin();
518 }
519
520 const_iterator cend() const noexcept {
521 return data_.cend();
522 }
523
524 reverse_iterator rbegin() noexcept {
525 return data_.rbegin();
526 }
527
528 reverse_iterator rend() noexcept {
529 return data_.rend();
530 }
531
532 const_reverse_iterator crbegin() const noexcept {
533 return data_.crbegin();
534 }
535
536 const_reverse_iterator crend() const noexcept {
537 return data_.crend();
538 }
539
540 bool empty() const noexcept {
541 return data_.empty();
542 }
543
544 size_type size() const noexcept {
545 return data_.size();
546 }
547
548 size_type max_size() const noexcept {
549 return data_.max_size();
550 }
551
552 size_type capacity() const noexcept {
553 return data_.capacity();
554 }
555
556 reference operator[](const size_type pos) noexcept {
557 return data_[pos];
558 }
559
560 const_reference operator[](const size_type pos) const noexcept {
561 return data_[pos];
562 }
563
564 reference at(const size_type pos) {
565 return data_.at(pos);
566 }
567
568 const_reference at(const size_type pos) const {
569 return data_.at(pos);
570 }
571
572 reference front() noexcept {
573 return data_.front();
574 }
575
576 const_reference front() const noexcept {
577 return data_.front();
578 }
579
580 reference back() noexcept {
581 return data_.back();
582 }
583
584 const_reference back() const noexcept {
585 return data_.back();
586 }
587};
588
589/**
590 * Result of an collection of events receiving that will be completed normally or exceptionally in the future.
591 * @tparam E The event type.
592 */
593template <typename E>
594struct Promise<std::vector<std::shared_ptr<E>>> : CommonPromiseMixin<Promise<std::vector<std::shared_ptr<E>>>>,
595 EventsPromiseMixin<E, Promise<std::vector<std::shared_ptr<E>>>> {
596 friend struct CommonPromiseMixin<Promise>;
597 friend struct EventsPromiseMixin<E, Promise>;
598 friend struct Promises;
599
600 private:
601 EventsPromiseImpl impl;
602
603 public:
604 explicit Promise(void *handle, bool own = true) : impl(handle, own) {
605 }
606
607 Promise(const Promise &) = delete;
608 Promise &operator=(const Promise &) = delete;
609
610 Promise(Promise && other) noexcept : impl(other.impl.handle, other.impl.own) {
611 other.impl.handle = nullptr;
612 other.impl.own = false;
613 }
614
615 Promise &operator=(Promise &&) noexcept = delete;
616};
617
619
620/// @}
621
#define DXFCPP_MACRO_CONCAT_INNER(a, b)
Definition Common.hpp:135
#define DXFCPP_MACRO_CONCAT(a, b)
Definition Common.hpp:134
#define DXFCPP_MACRO_UNIQUE_NAME(base)
Definition Common.hpp:136
#define DXFCXX_DISABLE_MSC_WARNINGS_POP()
Definition Conf.hpp:31
#define DXFCXX_DISABLE_CLANG_WARNINGS_PUSH(warnings)
Definition Conf.hpp:65
#define DXFCPP_END_NAMESPACE
Definition Conf.hpp:97
#define DXFCPP_BEGIN_NAMESPACE
Definition Conf.hpp:94
#define DXFCXX_DISABLE_GCC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:47
#define DXFCXX_DISABLE_CLANG_WARNINGS_POP()
Definition Conf.hpp:67
#define DXFCXX_DISABLE_GCC_WARNINGS_POP()
Definition Conf.hpp:49
#define DXFCXX_DISABLE_MSC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:30
#define DXFCPP_TRACE_ISOLATES
Definition Debug.hpp:19
#define DXFCPP_DEBUG
Definition Debug.hpp:15
#define DXFCPP_TRACE_LISTS
Definition Debug.hpp:22
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_with_name(dxfc_dxendpoint_builder_t builderHandle, const char *name)
Changes the name used to distinguish multiple endpoints in the same process (GraalVM Isolate) in logs...
Definition DXEndpoint.cpp:721
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_with_properties(dxfc_dxendpoint_builder_t builder, const dxfc_dxendpoint_property_t **properties, size_t size)
Sets all supported properties from the provided properties object.
Definition DXEndpoint.cpp:754
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_password(dxfc_dxendpoint_t endpoint, const char *password)
Changes password for this endpoint.
Definition DXEndpoint.cpp:1002
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_publisher(dxfc_dxendpoint_t endpoint, DXFC_OUT dxfc_dxpublisher_t *publisher)
Definition DXEndpoint.cpp:1192
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_supports_property(dxfc_dxendpoint_builder_t builder, const char *key, DXFC_OUT int *supports)
Checks if a property is supported.
Definition DXEndpoint.cpp:781
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_add_state_change_listener(dxfc_dxendpoint_t endpoint, dxfc_dxendpoint_state_change_listener listener)
Adds a listener notified about changes in state property.
Definition DXEndpoint.cpp:1138
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_disconnect(dxfc_dxendpoint_t endpoint)
Terminates all remote network connections.
Definition DXEndpoint.cpp:1053
#define DXFCPP_EXPORT
Definition api.h:35
void * dxfc_dxendpoint_builder_t
The dxFeed endpoint's builder handle.
Definition api.h:207
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_close_and_await_termination(dxfc_dxendpoint_t endpoint)
Closes this endpoint and wait until all pending data processing tasks are completed.
Definition DXEndpoint.cpp:951
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_await_not_connected(dxfc_dxendpoint_t endpoint)
Waits while this endpoint state becomes NOT_CONNECTED or CLOSED.
Definition DXEndpoint.cpp:1104
dxfc_dxendpoint_state_t
Represents the current state of endpoint.
Definition api.h:149
@ DXFC_DXENDPOINT_STATE_CLOSED
Endpoint was closed.
Definition api.h:169
@ DXFC_DXENDPOINT_STATE_NOT_CONNECTED
Endpoint was created by is not connected to remote endpoints.
Definition api.h:153
@ DXFC_DXENDPOINT_STATE_CONNECTING
The connect function was called to establish connection to remove endpoint, but the connection is not...
Definition api.h:159
@ DXFC_DXENDPOINT_STATE_CONNECTED
The connection to the remote endpoint is established.
Definition api.h:164
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_instance(void *user_data, DXFC_OUT dxfc_dxendpoint_t *endpoint)
Returns a default application-wide singleton instance of dxFeed endpoint with a FEED role.
Definition DXEndpoint.cpp:840
#define DXFC_OUT
Definition api.h:17
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_state(dxfc_dxendpoint_t endpoint, DXFC_OUT dxfc_dxendpoint_state_t *state)
Returns the state of this endpoint.
Definition DXEndpoint.cpp:1121
void * dxfc_dxendpoint_t
The dxFeed endpoint handle.
Definition api.h:198
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_with_property(dxfc_dxendpoint_builder_t builder, const char *key, const char *value)
Sets the specified property.
Definition DXEndpoint.cpp:737
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_free(dxfc_dxendpoint_builder_t builder)
Removes a builder from the registry.
Definition DXEndpoint.cpp:828
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_connect(dxfc_dxendpoint_t endpoint, const char *address)
Connects to the specified remote address.
Definition DXEndpoint.cpp:1019
dxfc_error_code_t
List of error codes.
Definition api.h:49
@ DXFC_EC_ERROR
The error returned if the current operation cannot be completed.
Definition api.h:60
@ DXFC_EC_SUCCESS
OK.
Definition api.h:53
@ DXFC_EC_G_ERR
dxFeed Graal Native API error.
Definition api.h:57
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_remove_state_change_listener(dxfc_dxendpoint_t endpoint, dxfc_dxendpoint_state_change_listener listener)
Removes a listener notified about changes in state property.
Definition DXEndpoint.cpp:1164
DXFCPP_EXPORT dxfc_error_code_t dxfc_system_set_property(const char *key, const char *value)
Sets the system property indicated by the specified key.
Definition System.cpp:74
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_build(dxfc_dxendpoint_builder_t builder, void *user_data, DXFC_OUT dxfc_dxendpoint_t *endpoint)
Builds the new dxFeed endpoint instance.
Definition DXEndpoint.cpp:798
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_feed(dxfc_dxendpoint_t endpoint, DXFC_OUT dxfc_dxfeed_t *feed)
Definition DXEndpoint.cpp:1187
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_await_processed(dxfc_dxendpoint_t endpoint)
Waits until this endpoint stops processing data (becomes quiescent).
Definition DXEndpoint.cpp:1087
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_close(dxfc_dxendpoint_t endpoint)
Closes this endpoint.
Definition DXEndpoint.cpp:934
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_new_builder(DXFC_OUT dxfc_dxendpoint_builder_t *builder)
Creates a new dxFeed endpoint's builder instance.
Definition DXEndpoint.cpp:688
void(* dxfc_dxendpoint_state_change_listener)(dxfc_dxendpoint_state_t old_state, dxfc_dxendpoint_state_t new_state, void *user_data)
The endpoint current state change listener.
Definition api.h:178
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_reconnect(dxfc_dxendpoint_t endpoint)
Terminates all established network connections and initiates connecting again with the same address.
Definition DXEndpoint.cpp:1036
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_role(dxfc_dxendpoint_t endpoint, DXFC_OUT dxfc_dxendpoint_role_t *role)
Returns the role of this endpoint.
Definition DXEndpoint.cpp:968
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_user(dxfc_dxendpoint_t endpoint, const char *user)
Changes username for this endpoint.
Definition DXEndpoint.cpp:985
DXFCPP_EXPORT dxfc_error_code_t dxfc_system_get_property(const char *key, DXFC_OUT char *buffer, size_t buffer_size)
Gets the system property indicated by the specified key.
dxfc_dxendpoint_role_t
Represents the role of an endpoint that was specified during its creation.
Definition api.h:89
@ DXFC_DXENDPOINT_ROLE_PUBLISHER
PUBLISHER endpoint connects to the remote publisher hub (also known as multiplexor) or creates a publ...
Definition api.h:127
@ DXFC_DXENDPOINT_ROLE_STREAM_FEED
STREAM_FEED endpoint is similar to DXFC_DXENDPOINT_ROLE_FEED and also connects to the remote data fee...
Definition api.h:116
@ DXFC_DXENDPOINT_ROLE_FEED
FEED endpoint connects to the remote data feed provider and is optimized for real-time or delayed dat...
Definition api.h:99
@ DXFC_DXENDPOINT_ROLE_STREAM_PUBLISHER
STREAM_PUBLISHER endpoint is similar to DXFC_DXENDPOINT_ROLE_PUBLISHER and also connects to the remot...
Definition api.h:136
@ DXFC_DXENDPOINT_ROLE_LOCAL_HUB
LOCAL_HUB endpoint is a local hub without the ability to establish network connections.
Definition api.h:143
@ DXFC_DXENDPOINT_ROLE_ON_DEMAND_FEED
ON_DEMAND_FEED endpoint is similar to DXFC_DXENDPOINT_ROLE_FEED, but it is designed to be used with d...
Definition api.h:107
void * dxfc_dxpublisher_t
The dxFeed publisher handle.
Definition api.h:217
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_create(void *user_data, DXFC_OUT dxfc_dxendpoint_t *endpoint)
Creates an endpoint with FEED role.
Definition DXEndpoint.cpp:887
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_get_instance2(dxfc_dxendpoint_role_t role, void *user_data, DXFC_OUT dxfc_dxendpoint_t *endpoint)
Returns a default application-wide singleton instance of DXEndpoint for a specific role.
Definition DXEndpoint.cpp:863
void * dxfc_dxfeed_t
The dxFeed handle.
Definition api.h:212
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_builder_with_role(dxfc_dxendpoint_builder_t builder, dxfc_dxendpoint_role_t role)
Sets role for the created dxFeed endpoint.
Definition DXEndpoint.cpp:704
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_create2(dxfc_dxendpoint_role_t role, void *user_data, DXFC_OUT dxfc_dxendpoint_t *endpoint)
Creates an endpoint with a specified role.
Definition DXEndpoint.cpp:910
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_free(dxfc_dxendpoint_t endpoint)
Removes the dxFeed endpoint from the registry.
Definition DXEndpoint.cpp:1197
DXFCPP_EXPORT dxfc_error_code_t dxfc_dxendpoint_disconnect_and_clear(dxfc_dxendpoint_t endpoint)
Terminates all remote network connections and clears stored data.
Definition DXEndpoint.cpp:1070
Builder class for DXEndpoint that supports additional configuration properties.
Definition DXEndpoint.hpp:866
std::shared_ptr< DXEndpoint > build()
Builds DXEndpoint instance.
Definition DXEndpoint.cpp:348
std::shared_ptr< Builder > withName(const StringLike &name)
Changes the name used to distinguish multiple endpoints in the same process (GraalVM Isolate) in logs...
Definition DXEndpoint.cpp:391
std::shared_ptr< Builder > withExecutor(const std::shared_ptr< Executor > &executor)
Sets the executor that is used for notifications (events, state changes, etc.) of the endpoint to bui...
Definition DXEndpoint.hpp:995
bool supportsProperty(const StringLike &key) const
Checks if a property is supported.
Definition DXEndpoint.cpp:338
std::shared_ptr< Builder > withProperties(Properties &&properties)
Sets all supported properties from the provided properties object.
Definition DXEndpoint.hpp:957
~Builder() noexcept override
Releases the GraalVM handle.
Definition DXEndpoint.cpp:380
std::shared_ptr< Builder > withRole(Role role)
Sets role for the created DXEndpoint.
Definition DXEndpoint.cpp:300
std::shared_ptr< Builder > withProperty(const StringLike &key, const StringLike &value)
Sets the specified property.
Definition DXEndpoint.cpp:313
Subscription for a set of symbols and event types.
Definition DXFeedSubscription.hpp:45
Extends DXFeedSubscription to conveniently subscribe to time-series of events for a set of symbols an...
Definition DXFeedSubscription.hpp:787
The enumeration type that provides additional information about the dxFeed Graal C++-API event type.
Definition EventTypeEnum.hpp:29
Source identifier for IndexedEvent.
Definition IndexedEventSource.hpp:29
static JavaObjectHandleRegistry & getInstance() noexcept
Returns the process-wide handle registry.
Definition JavaObjectHandle.cpp:68
void releaseAll() noexcept
Releases all currently registered handles while the Graal isolate is still available.
Definition JavaObjectHandle.cpp:125
void reset(void *handle=nullptr) noexcept
Replaces the owned handle, releasing the previous one.
Definition JavaObjectHandle.cpp:163
JavaObjectHandleState(void *handle, Deleter deleter) noexcept
Creates an ownership state for a native handle.
Definition JavaObjectHandle.cpp:150
void * get() const noexcept
Returns the currently owned native handle.
Definition JavaObjectHandle.hpp:115
void moveFrom(JavaObjectHandleState &other) noexcept
Transfers ownership from another state and releases the handle previously owned by this state.
Definition JavaObjectHandle.cpp:159
~JavaObjectHandleState() noexcept
Releases the owned handle, if any, and unregisters the state.
Definition JavaObjectHandle.cpp:155
Thread-safe registry that associates callback identifiers with entities without owning them.
Definition EntityManager.hpp:180
bool unregisterEntity(const H *handle)
Unregisters an entity using a constant opaque callback handle.
Definition EntityManager.hpp:303
std::optional< Id< EntityIdType > > getId(const std::shared_ptr< EntityType > &entity)
Definition EntityManager.hpp:360
bool unregisterEntity(H *handle)
Unregisters an entity using an opaque callback handle.
Definition EntityManager.hpp:292
bool unregisterEntity(const std::shared_ptr< EntityType > &entity)
Unregisters an entity.
Definition EntityManager.hpp:254
bool unregisterEntity(Id< EntityIdType > id)
Unregisters an entity by identifier.
Definition EntityManager.hpp:273
std::shared_ptr< EntityType > getEntity(H *handle)
Locks and returns the entity identified by an opaque callback handle.
Definition EntityManager.hpp:339
Id< EntityIdType > registerEntity(const std::shared_ptr< EntityType > &entity)
Registers an entity and returns its callback identifier.
Definition EntityManager.hpp:221
bool contains(const std::shared_ptr< EntityType > &entity)
Definition EntityManager.hpp:384
WeakEntityManager()=default
Constructs an empty weak entity registry.
std::shared_ptr< EntityType > getEntity(const H *handle)
Locks and returns the entity identified by a constant opaque callback handle.
Definition EntityManager.hpp:350
std::size_t getLastId()
Definition EntityManager.hpp:243
bool contains(Id< EntityIdType > id)
Definition EntityManager.hpp:355
std::shared_ptr< EntityType > getEntity(Id< EntityIdType > id)
Locks and returns the entity registered for an identifier.
Definition EntityManager.hpp:315
Mixin for wrapping calls to common promise methods.
Definition Promise.hpp:80
JavaException getException() const
Returns exceptional outcome of computation.
Definition Promise.hpp:128
void cancel() const
This method cancels computation.
Definition Promise.hpp:175
bool hasResult() const
Returns true when computation has completed normally.
Definition Promise.hpp:96
bool isCancelled() const
Returns true when computation was cancelled.
Definition Promise.hpp:115
bool hasException() const
Returns true when a computation has completed exceptionally or was canceled.
Definition Promise.hpp:105
bool awaitWithoutException(const std::chrono::milliseconds &timeoutInMilliseconds) const
Wait for computation to complete or timeout or throw an exception in case of exceptional completion.
Definition Promise.hpp:162
bool isDone() const
Returns true when a computation has completed normally, or exceptionally, or was canceled.
Definition Promise.hpp:86
bool awaitWithoutException(std::int32_t timeoutInMilliseconds) const
Wait for computation to complete or timeout or throw an exception in case of exceptional completion.
Definition Promise.hpp:145
Manages network connections to feed or publisher.
Definition DXEndpoint.hpp:179
bool isClosed() const
Definition DXEndpoint.cpp:540
SimpleHandler< void(DXEndpoint::State, DXEndpoint::State)> & onStateChange() noexcept
Returns the onStateChange handler that can be used to add or remove listeners.
Definition DXEndpoint.cpp:552
static const std::string DXFEED_PASSWORD_PROPERTY
"dxfeed.password"
Definition DXEndpoint.hpp:246
static std::shared_ptr< DXEndpoint > create(Role role)
Creates an endpoint with a specified role.
Definition DXEndpoint.cpp:527
std::shared_ptr< DXFeed > getFeed() const
Definition DXEndpoint.cpp:227
std::shared_ptr< DXEndpoint > password(const StringLike &password)
Changes password for this endpoint.
Definition DXEndpoint.cpp:154
State
Represents the current state of endpoint.
Definition DXEndpoint.hpp:444
@ CLOSED
Endpoint was closed.
Definition DXEndpoint.hpp:464
@ CONNECTING
The connect method was called to establish connection to remove endpoint, but the connection is not e...
Definition DXEndpoint.hpp:454
@ CONNECTED
The connection to the remote endpoint is established.
Definition DXEndpoint.hpp:459
@ NOT_CONNECTED
Endpoint was created by is not connected to remote endpoints.
Definition DXEndpoint.hpp:448
std::shared_ptr< DXEndpoint > user(const StringLike &user)
Changes username for this endpoint.
Definition DXEndpoint.cpp:147
void reconnect() const
Terminates all established network connections and initiates connecting again with the same address.
Definition DXEndpoint.cpp:173
static std::shared_ptr< DXEndpoint > create()
Creates an endpoint with FEED role.
Definition DXEndpoint.cpp:518
void removeStateChangeListener(std::size_t listenerId) noexcept
Removes a listener notified about changes in state property.
Definition DXEndpoint.cpp:548
const std::string & getName() const &noexcept
Definition DXEndpoint.cpp:544
Role
Represents the role of an endpoint that was specified during its creation.
Definition DXEndpoint.hpp:373
@ PUBLISHER
PUBLISHER endpoint connects to the remote publisher hub (also known as multiplexor) or creates a publ...
Definition DXEndpoint.hpp:418
@ STREAM_FEED
STREAM_FEED endpoint is similar to DXEndpoint::FEED and also connects to the remote data feed provide...
Definition DXEndpoint.hpp:406
@ LOCAL_HUB
LOCAL_HUB endpoint is a local hub without the ability to establish network connections.
Definition DXEndpoint.hpp:434
@ ON_DEMAND_FEED
ON_DEMAND_FEED endpoint is similar to DXEndpoint::FEED, but it is designed to be used with OnDemandSe...
Definition DXEndpoint.hpp:397
@ STREAM_PUBLISHER
STREAM_PUBLISHER endpoint is similar to DXEndpoint::PUBLISHER and also connects to the remote publish...
Definition DXEndpoint.hpp:427
@ FEED
FEED endpoint connects to the remote data feed provider and is optimized for real-time or delayed dat...
Definition DXEndpoint.hpp:384
std::string toString() const override
Returns a string representation of the current object.
Definition DXEndpoint.cpp:401
void awaitProcessed() const
Waits until this endpoint stops processing data (becomes quiescent).
Definition DXEndpoint.cpp:209
std::shared_ptr< DXPublisher > getPublisher() const
Definition DXEndpoint.cpp:236
static const std::string DXFEED_WILDCARD_ENABLE_PROPERTY
"dxfeed.wildcard.enable"
Definition DXEndpoint.hpp:274
std::size_t addStateChangeListener(std::function< void(State, State)> listener) noexcept
Adds a listener notified about changes in state property.
Definition DXEndpoint.hpp:619
static const std::string DXENDPOINT_EVENT_TIME_PROPERTY
"dxendpoint.eventTime"
Definition DXEndpoint.hpp:319
static const std::string DXPUBLISHER_THREAD_POOL_SIZE_PROPERTY
"dxpublisher.threadPoolSize"
Definition DXEndpoint.hpp:302
State getState() const
Returns the state of this endpoint.
Definition DXEndpoint.cpp:143
static const std::string DXENDPOINT_STORE_EVERYTHING_PROPERTY
"dxendpoint.storeEverything"
Definition DXEndpoint.hpp:332
void awaitNotConnected() const
Waits while this endpoint state becomes NOT_CONNECTED or CLOSED.
Definition DXEndpoint.cpp:200
static std::shared_ptr< DXEndpoint > getInstance(Role role)
Returns a default application-wide singleton instance of DXEndpoint for a specific role.
Definition DXEndpoint.cpp:500
static const std::string DXFEED_AGGREGATION_PERIOD_PROPERTY
"dxfeed.aggregationPeriod"
Definition DXEndpoint.hpp:265
void close() const
Closes this endpoint.
Definition DXEndpoint.cpp:556
static const std::string DXFEED_THREAD_POOL_SIZE_PROPERTY
"dxfeed.threadPoolSize"
Definition DXEndpoint.hpp:255
void disconnect() const
Terminates all remote network connections.
Definition DXEndpoint.cpp:182
void closeAndAwaitTermination() const
Closes this endpoint and wait until all pending data processing tasks are completed.
Definition DXEndpoint.cpp:218
static std::shared_ptr< DXEndpoint > getInstance()
Returns a default application-wide singleton instance of DXEndpoint with a FEED role.
Definition DXEndpoint.cpp:491
static const std::string DXPUBLISHER_ADDRESS_PROPERTY
"dxpublisher.address"
Definition DXEndpoint.hpp:293
static const std::string DXFEED_USER_PROPERTY
"dxfeed.user"
Definition DXEndpoint.hpp:236
static const std::string NAME_PROPERTY
"name"
Definition DXEndpoint.hpp:196
static const std::string DXSCHEME_ENABLED_PROPERTY_PREFIX
"dxscheme.enabled."
Definition DXEndpoint.hpp:366
static const std::string DXPUBLISHER_PROPERTIES_PROPERTY
"dxpublisher.properties"
Definition DXEndpoint.hpp:283
static const std::string DXSCHEME_NANO_TIME_PROPERTY
"dxscheme.nanoTime"
Definition DXEndpoint.hpp:352
static const std::string DXFEED_ADDRESS_PROPERTY
"dxfeed.address"
Definition DXEndpoint.hpp:226
std::shared_ptr< DXEndpoint > executor(const std::shared_ptr< Executor > &executor)
Changes the executor that is used for notifications (events, state changes, etc.) of this endpoint.
Definition DXEndpoint.hpp:655
void disconnectAndClear() const
Terminates all remote network connections and clears stored data.
Definition DXEndpoint.cpp:191
Role getRole() const noexcept
Returns the role of this endpoint.
Definition DXEndpoint.cpp:536
static const std::string DXFEED_PROPERTIES_PROPERTY
"dxfeed.properties"
Definition DXEndpoint.hpp:207
static std::shared_ptr< Builder > newBuilder()
Creates a new Builder instance.
Definition DXEndpoint.cpp:509
std::shared_ptr< DXEndpoint > connect(const StringLike &address)
Connects to the specified remote address.
Definition DXEndpoint.cpp:161
Main entry class for dxFeed API (read it first).
Definition DXFeed.hpp:141
void detachSubscriptionAndClear(const std::shared_ptr< DXFeedSubscription > &subscription) const
Detaches the given subscription from this feed and clears data delivered to this subscription by publ...
Definition DXFeed.cpp:68
Collection getLastEvents(Collection &&events)
Returns the last events for the specified list of event instances.
Definition DXFeed.hpp:294
std::shared_ptr< PromiseList< E > > getLastEventsPromises(std::initializer_list< SymbolWrapper > collection) const
Requests the last events for the specified event type and a collection of symbols.
Definition DXFeed.hpp:749
std::vector< std::shared_ptr< E > > getTimeSeriesIfSubscribed(const SymbolWrapper &symbol, std::chrono::milliseconds fromTime, std::chrono::milliseconds toTime) const
Returns time series of events for the specified event type, symbol and a range of time if there is a ...
Definition DXFeed.hpp:1017
std::shared_ptr< DXFeedSubscription > createSubscription(const EventTypeEnum &eventType) const
Creates a new subscription for a single event type that is attached to this feed.
Definition DXFeed.cpp:88
std::shared_ptr< DXFeedTimeSeriesSubscription > createTimeSeriesSubscription(std::initializer_list< EventTypeEnum > eventTypes) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.cpp:137
std::shared_ptr< DXFeedSubscription > createSubscription(EventTypeIt begin, EventTypeIt end) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.hpp:388
std::shared_ptr< PromiseList< E > > getLastEventsPromises(const SymbolsCollection &collection) const
Requests the last events for the specified event type and a collection of symbols.
Definition DXFeed.hpp:703
std::shared_ptr< E > getLastEventIfSubscribed(const SymbolWrapper &symbol)
Returns the last event for the specified event type and symbol if there is a subscription for it.
Definition DXFeed.hpp:328
std::shared_ptr< DXFeedSubscription > createSubscription(std::initializer_list< EventTypeEnum > eventTypes) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.cpp:101
std::vector< std::shared_ptr< E > > getTimeSeriesIfSubscribed(const SymbolWrapper &symbol, std::chrono::milliseconds fromTime) const
Returns time series of events for the specified event type, symbol and a range of time (without an up...
Definition DXFeed.hpp:1048
std::shared_ptr< DXFeedTimeSeriesSubscription > createTimeSeriesSubscription(EventTypeIt begin, EventTypeIt end) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.hpp:500
static std::shared_ptr< DXFeed > getInstance()
Returns a default application-wide singleton instance of feed.
Definition DXFeed.cpp:19
std::shared_ptr< E > getLastEvent(std::shared_ptr< E > event)
Returns the last event for the specified event instance.
Definition DXFeed.hpp:270
std::shared_ptr< PromiseList< E > > getLastEventsPromises(SymbolIt begin, SymbolIt end) const
Requests the last events for the specified event type and a collection of symbols.
Definition DXFeed.hpp:656
std::shared_ptr< DXFeedSubscription > createSubscription(const EventTypesCollection &eventTypes) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.hpp:438
std::shared_ptr< Promise< std::shared_ptr< E > > > getLastEventPromise(const SymbolWrapper &symbol) const
Requests the last event for the specified event type and symbol.
Definition DXFeed.hpp:608
std::shared_ptr< DXFeedTimeSeriesSubscription > createTimeSeriesSubscription(const EventTypesCollection &eventTypes) const
Creates new subscription for multiple event types that is attached to this feed.
Definition DXFeed.hpp:567
std::string toString() const override
Returns a string representation of the current object.
Definition DXFeed.cpp:226
std::shared_ptr< Promise< std::vector< std::shared_ptr< E > > > > getIndexedEventsPromise(const SymbolWrapper &symbol, const IndexedEventSource &source) const
Requests a container of indexed events for the specified event type, symbol and source.
Definition DXFeed.hpp:802
void detachSubscription(const std::shared_ptr< DXFeedSubscription > &subscription) const
Detaches the given subscription from this feed.
Definition DXFeed.cpp:48
std::vector< std::shared_ptr< E > > getIndexedEventsIfSubscribed(const SymbolWrapper &symbol, const IndexedEventSource &source) const
Returns a vector of indexed events for the specified event type, symbol and source if there is a subs...
Definition DXFeed.hpp:858
void attachSubscription(const std::shared_ptr< DXFeedSubscription > &subscription) const
Attaches the given subscription to this feed.
Definition DXFeed.cpp:28
std::shared_ptr< DXFeedTimeSeriesSubscription > createTimeSeriesSubscription(const EventTypeEnum &eventType) const
Creates a new subscription for a single event type that is attached to this feed.
Definition DXFeed.cpp:116
Provides API for publishing of events to local or remote DXFeed.
Definition DXPublisher.hpp:60
Mixin for wrapping Promise method calls for a single event.
Definition Promise.hpp:244
std::shared_ptr< E > getResult() const
Returns result of computation.
Definition Promise.hpp:252
std::shared_ptr< E > await() const
Wait for the computation to complete and return its result or throw an exception in case of exception...
Definition Promise.hpp:262
std::shared_ptr< E > await(const std::chrono::milliseconds &timeoutInMilliseconds) const &
Wait for computation to complete or timeout and return its result or throw an exception in case of ex...
Definition Promise.hpp:292
std::shared_ptr< E > await(std::int32_t timeoutInMilliseconds) const &
Wait for computation to complete or timeout and return its result or throw an exception in case of ex...
Definition Promise.hpp:277
Marks all event types that can be received via dxFeed API.
Definition EventType.hpp:37
std::string toString() const override
Returns a string representation of the current object.
Definition api.cpp:67
virtual std::int64_t getEventTime() const noexcept
Returns time when an event was created or zero when time is not available.
Definition api.cpp:54
virtual void assign(std::shared_ptr< EventType > event)
Replaces the contents of the event.
Definition api.cpp:63
virtual void setEventTime(std::int64_t eventTime) noexcept
Changes event creation time.
Definition api.cpp:58
The wrapper over CEntryPointErrorsEnum, the error code returned by GraalVM.
Definition GraalException.hpp:26
GraalException(CEntryPointErrorsEnum entryPointErrorsEnum)
Constructs an exception.
Definition GraalException.cpp:8
void handle(ArgTypes... args)
Calls the listeners and pass the args to them.
Definition Handler.hpp:122
std::size_t add(ListenerType &&listener)
Adds the listener to "main" group.
Definition Handler.hpp:156
std::size_t operator%=(ListenerType &&listener)
Adds the low priority listener (to the "low priority" group).
Definition Handler.hpp:208
std::size_t operator+=(ListenerType &&listener)
Adds the listener to "main" group.
Definition Handler.hpp:197
void operator()(ArgTypes... args)
Calls the listeners and pass the ars to them.
Definition Handler.hpp:146
Handler(std::size_t mainFuturesSize=MAIN_FUTURES_DEFAULT_SIZE) noexcept
Creates the new handler by specified size of circular buffer of futures.
Definition Handler.hpp:84
void operator-=(std::size_t id)
Removes a listener by the id.
Definition Handler.hpp:236
std::size_t addLowPriority(ListenerType &&listener)
Adds the low priority listener (to the "low priority" group) It will be called after the "main" liste...
Definition Handler.hpp:177
void remove(std::size_t id)
Removes a listener by the id.
Definition Handler.hpp:217
Thrown to indicate that a method has been passed an illegal or inappropriate argument.
Definition InvalidArgumentException.hpp:23
A wrapper over the interceptable Java exceptions thrown by the dxFeed Native Graal SDK.
Definition JavaException.hpp:26
Represents up-to-date information about some condition or state of an external entity that updates in...
Definition LastingEvent.hpp:33
Provides on-demand historical tick data replay controls.
Definition OnDemandService.hpp:77
A list of event receiving results that will be completed normally or exceptionally in the future.
Definition Promise.hpp:442
Result of a computation that will be completed normally or exceptionally in the future.
Definition Promise.hpp:358
A class that represents a promise-based implementation often used for handling asynchronous operation...
Definition Promises.hpp:46
A helper class needed to construct smart pointers to objects and does not allow explicit construction...
Definition SharedEntity.hpp:89
static auto createShared(Args &&...args)
Creates a smart pointer to an object.
Definition SharedEntity.hpp:104
A runtime axception with stacktrace.
Definition RuntimeException.hpp:26
const std::string & getStackTrace() const &
Definition RuntimeException.cpp:83
RuntimeException(const StringLike &message, const StringLike &additionalStackTrace="")
Constructs a runtime exception.
Definition RuntimeException.cpp:67
A base abstract "shared entity" class. Has some helpers for dynamic polymorphism.
Definition SharedEntity.hpp:25
virtual std::string toString() const
Returns a string representation of the current object.
Definition SharedEntity.hpp:78
std::shared_ptr< T > sharedAs() const noexcept
Returns a pointer to the current object wrapped in a smart pointer to type T or std::shared_ptr<T>{nu...
Definition SharedEntity.hpp:69
std::shared_ptr< T > sharedAs() noexcept
Returns a pointer to the current object wrapped in a smart pointer to type T or std::shared_ptr<T>{nu...
Definition SharedEntity.hpp:58
bool is() const noexcept
Checks that the pointer to the current type could be converted to type T* In other words: whether typ...
Definition SharedEntity.hpp:39
std::size_t operator+=(ListenerType &&listener)
Adds the listener to "main" group.
Definition Handler.hpp:379
void remove(std::size_t id)
Removes a listener by the id.
Definition Handler.hpp:399
void handle(ArgTypes... args)
Calls the listeners and pass the args to them.
Definition Handler.hpp:317
void operator()(ArgTypes... args)
Calls the listeners and pass the ars to them.
Definition Handler.hpp:328
std::size_t addLowPriority(ListenerType &&listener)
Adds the low priority listener (to the "low priority" group) It will be called after the "main" liste...
Definition Handler.hpp:359
void operator-=(std::size_t id)
Removes a listener by the id.
Definition Handler.hpp:418
std::size_t operator%=(ListenerType &&listener)
Adds the low priority listener (to the "low priority" group).
Definition Handler.hpp:390
SimpleHandler() noexcept
Creates the new handler.
Definition Handler.hpp:289
std::size_t add(ListenerType &&listener)
Adds the listener to "main" group.
Definition Handler.hpp:338
Universal functional object that allows searching std::unordered_map for string-like keys.
Definition StringUtils.hpp:120
A simple wrapper around strings or something similar to strings to reduce the amount of code for meth...
Definition Common.hpp:728
A lightweight wrapper around strings or string-like inputs.
Definition StringUtils.hpp:28
Common string constants used across the library.
Definition StringUtils.hpp:137
static const std::string NUL
Textual representation of a null / missing string: "<null>".
Definition StringUtils.hpp:142
static const std::string EMPTY
Empty string constant: "".
Definition StringUtils.hpp:139
Mixin for wrapping Promise method calls for a void.
Definition Promise.hpp:185
void await(std::int32_t timeoutInMilliseconds) const &
Wait for the computation to complete or timeout and return its result or throw an exception in case o...
Definition Promise.hpp:217
void await(const std::chrono::milliseconds &timeoutInMilliseconds) const &
Wait for the computation to complete or timeout and return its result or throw an exception in case o...
Definition Promise.hpp:232
void await() const
Wait for the computation to complete and return its result or throw an exception in case of exception...
Definition Promise.hpp:202
void getResult() const
Returns result of computation.
Definition Promise.hpp:192
Whether T is std::shared_ptr<E>, where E is a descendant of LastingEvent (the elements of DXFeed::get...
Definition DXFeed.hpp:40
The simple key-value structure that represents an endpoint's property.
Definition api.h:184
const char * key
The property's key.
Definition api.h:186
const char * value
The property's value.
Definition api.h:188