helics 3.7.0
Loading...
Searching...
No Matches
Endpoint.hpp
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-License-Identifier: BSD-3-Clause
6*/
7#ifndef HELICS_CPP98_ENDPOINT_HPP_
8#define HELICS_CPP98_ENDPOINT_HPP_
9#pragma once
10
11#include "DataBuffer.hpp"
12#include "helics/helics.h"
13#include "helicsExceptions.hpp"
14
15#include <string>
16#include <vector>
17
18namespace helicscpp {
19class Endpoint;
20class Federate;
21
22class Message {
23 public:
25 Message() HELICS_NOTHROW: mo(HELICS_NULL_POINTER) {}
27 explicit Message(const Federate& fed);
29 explicit Message(const Endpoint& ept);
31 explicit Message(HelicsMessage hmo) HELICS_NOTHROW: mo(hmo) {}
32
34 Message(const Message& mess) HELICS_NOTHROW:
35 mo(helicsMessageClone(mess.mo, HELICS_IGNORE_ERROR))
36 {
37 }
39 Message& operator=(const Message& mess) HELICS_NOTHROW
40 {
41 if (mo != HELICS_NULL_POINTER) {
43 }
44 mo = helicsMessageClone(mess.mo, HELICS_IGNORE_ERROR);
45 return *this;
46 }
47#ifdef HELICS_HAS_RVALUE_REFS
49 Message(Message&& mess) HELICS_NOTHROW: mo(mess.release()) {}
51 Message& operator=(Message&& mess) HELICS_NOTHROW
52 {
53 mo = mess.release();
54 return *this;
55 }
56#endif
59 {
60 if (mo != HELICS_NULL_POINTER) {
62 }
63 }
65 operator HelicsMessage() const { return mo; }
67 HELICS_NODISCARD bool isValid() const { return (helicsMessageIsValid(mo) == HELICS_TRUE); }
69 HELICS_NODISCARD const char* source() const { return helicsMessageGetSource(mo); }
71 Message& source(const std::string& src)
72 {
73 helicsMessageSetSource(mo, src.c_str(), hThrowOnError());
74 return *this;
75 }
77 Message& source(const char* src)
78 {
80 return *this;
81 }
83 HELICS_NODISCARD const char* destination() const { return helicsMessageGetDestination(mo); }
85 Message& destination(const std::string& dest)
86 {
87 helicsMessageSetDestination(mo, dest.c_str(), hThrowOnError());
88 return *this;
89 }
91 Message& destination(const char* dest)
92 {
94 return *this;
95 }
98 HELICS_NODISCARD const char* originalSource() const
99 {
101 }
103 Message& originalSource(const std::string& osrc)
104 {
106 return *this;
107 }
109 HELICS_NODISCARD const char* originalDestination() const
110 {
112 }
114 Message& originalDestination(const std::string& odest)
115 {
117 return *this;
118 }
120 HELICS_NODISCARD int size() const { return helicsMessageGetByteCount(mo); }
122 void resize(int newSize) { helicsMessageResize(mo, newSize, hThrowOnError()); }
125 void reserve(int newSize) { helicsMessageReserve(mo, newSize, hThrowOnError()); }
127 HELICS_NODISCARD void* data() const { return helicsMessageGetBytesPointer(mo); }
129 Message& data(const void* ptr, int size)
130 {
132 return *this;
133 }
135 Message& data(const std::string& str)
136 {
137 helicsMessageSetString(mo, str.c_str(), hThrowOnError());
138 return *this;
139 }
141 Message& data(const char* str)
142 {
144 return *this;
145 }
148 {
150 return *this;
151 }
153 Message& append(const void* ptr, int size)
154 {
156 return *this;
157 }
159 Message& append(const std::string& str)
160 {
161 helicsMessageAppendData(mo, str.c_str(), static_cast<int>(str.size()), hThrowOnError());
162 return *this;
163 }
165 HELICS_NODISCARD const char* c_str() const { return helicsMessageGetString(mo); }
167 HELICS_NODISCARD HelicsTime time() const { return helicsMessageGetTime(mo); }
170 {
172 return *this;
173 }
175 Message& setFlag(int flag, bool val)
176 {
178 return *this;
179 }
181 HELICS_NODISCARD bool getFlagOption(int flag) const
182 {
183 return (helicsMessageGetFlagOption(mo, flag) == HELICS_TRUE);
184 }
186 HELICS_NODISCARD int messageID() const { return helicsMessageGetMessageID(mo); }
188 Message& messageID(int newId)
189 {
191 return *this;
192 }
196 HELICS_NODISCARD HelicsMessage release()
197 {
198 HelicsMessage mreturn = mo;
199 mo = HELICS_NULL_POINTER;
200 return mreturn;
201 }
202 void clear() { helicsMessageClear(mo, HELICS_IGNORE_ERROR); }
204 HELICS_NODISCARD DataBuffer dataBuffer()
205 {
206 return DataBuffer(helicsMessageDataBuffer(mo, HELICS_IGNORE_ERROR));
207 }
209 Message& newMessageObject(const Federate& fed);
210
212 Message& newMessageObject(const Endpoint& ept);
213
214 private:
215 HelicsMessage mo;
216};
217
219class Endpoint {
220 public:
222 explicit Endpoint(HelicsEndpoint hep) HELICS_NOTHROW: ep(hep) {}
224 Endpoint() HELICS_NOTHROW: ep(HELICS_NULL_POINTER) {}
226 Endpoint(const Endpoint& endpoint) HELICS_NOTHROW: ep(endpoint.ep) {}
228 Endpoint& operator=(const Endpoint& endpoint)
229 {
230 ep = endpoint.ep;
231 return *this;
232 }
234 operator HelicsEndpoint() { return ep; }
236 HELICS_NODISCARD HelicsEndpoint baseObject() const { return ep; }
238 HELICS_NODISCARD bool isValid() const { return (helicsEndpointIsValid(ep) == HELICS_TRUE); }
239 /* Checks if endpoint has unread messages **/
240 HELICS_NODISCARD bool hasMessage() const
241 {
242 // returns int, 1 = true, 0 = false
243 return helicsEndpointHasMessage(ep) > 0;
244 }
246 void setDefaultDestination(const std::string& dest)
247 {
249 }
251 HELICS_NODISCARD const char* getDefaultDestination() const
252 {
254 }
256 HELICS_NODISCARD uint64_t pendingMessageCount() const
257 {
259 }
260
263
266
272 void send(const void* data, size_t data_size)
273 {
274 helicsEndpointSendBytes(ep, data, static_cast<int>(data_size), hThrowOnError());
275 }
276
282 void sendTo(const void* data, size_t data_size, const std::string& dest)
283 {
285 ep, data, static_cast<int>(data_size), dest.c_str(), hThrowOnError());
286 }
292 void sendAt(const char* data, size_t data_size, HelicsTime time)
293 {
294 helicsEndpointSendBytesAt(ep, data, static_cast<int>(data_size), time, hThrowOnError());
295 }
302 void sendToAt(const void* data, size_t data_size, const std::string& dest, HelicsTime time)
303 {
305 ep, data, static_cast<int>(data_size), dest.c_str(), time, hThrowOnError());
306 }
310 void send(const std::string& data)
311 {
312 helicsEndpointSendBytes(ep, &(data[0]), static_cast<int>(data.size()), hThrowOnError());
313 }
314
319 void sendTo(const std::string& data, const std::string& dest)
320 {
322 ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
323 }
328 void sendAt(const std::string& data, HelicsTime time)
329 {
331 ep, &(data[0]), static_cast<int>(data.size()), time, hThrowOnError());
332 }
338 void sendToAt(const std::string& data, const std::string& dest, HelicsTime time)
339 {
341 ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
342 }
343
347 void send(const std::vector<char>& data)
348 {
349 helicsEndpointSendBytes(ep, data.data(), static_cast<int>(data.size()), hThrowOnError());
350 }
351
356 void sendTo(const std::vector<char>& data, const std::string& dest)
357 {
359 ep, data.data(), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
360 }
365 void sendAt(const std::vector<char>& data, HelicsTime time)
366 {
368 ep, data.data(), static_cast<int>(data.size()), time, hThrowOnError());
369 }
375 void sendToAt(const std::vector<char>& data, const std::string& dest, HelicsTime time)
376 {
378 ep, data.data(), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
379 }
380
383 void sendMessage(const Message& message)
384 {
385 // returns helicsStatus
387 }
388#ifdef HELICS_HAS_RVALUE_REFS
391 void sendMessage(Message&& message)
392 {
393 // returns helicsStatus
394 helicsEndpointSendMessageZeroCopy(ep, message.release(), hThrowOnError());
395 }
396#endif
400 {
401 // returns helicsStatus
403 (void)message.release();
404 }
406 HELICS_NODISCARD const char* getName() const { return helicsEndpointGetName(ep); }
408 HELICS_NODISCARD const char* getType() { return helicsEndpointGetType(ep); }
409
411 HELICS_NODISCARD const char* getInfo() const { return helicsEndpointGetInfo(ep); }
413 void setInfo(const std::string& info)
414 {
415 helicsEndpointSetInfo(ep, info.c_str(), HELICS_IGNORE_ERROR);
416 }
417
418 private:
419 HelicsEndpoint ep;
420};
421
422inline Message::Message(const Endpoint& ept):
423 mo(helicsEndpointCreateMessage(ept.baseObject(), hThrowOnError()))
424{
425}
426
428{
430 if (mo != HELICS_NULL_POINTER) {
432 }
433 mo = newmo;
434 return *this;
435}
436
437} // namespace helicscpp
438#endif
void helicsEndpointSetDefaultDestination(HelicsEndpoint endpoint, const char *dst, HelicsError *err)
Definition MessageFederateExport.cpp:215
HelicsBool helicsEndpointIsValid(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:206
HelicsMessage helicsEndpointCreateMessage(HelicsEndpoint endpoint, HelicsError *err)
Definition MessageFederateExport.cpp:596
void helicsEndpointSendBytes(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsError *err)
Definition MessageFederateExport.cpp:302
void helicsEndpointSendMessageZeroCopy(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition MessageFederateExport.cpp:399
int helicsEndpointPendingMessageCount(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:463
const char * helicsEndpointGetDefaultDestination(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:232
void helicsEndpointSendBytesAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsTime time, HelicsError *err)
Definition MessageFederateExport.cpp:338
HelicsBool helicsEndpointHasMessage(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:445
void helicsEndpointSendMessage(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition MessageFederateExport.cpp:381
const char * helicsEndpointGetInfo(HelicsEndpoint end)
Definition MessageFederateExport.cpp:689
void helicsEndpointSendBytesTo(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsError *err)
Definition MessageFederateExport.cpp:320
HelicsMessage helicsEndpointGetMessage(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:553
const char * helicsEndpointGetType(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:651
void helicsEndpointSendBytesToAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsTime time, HelicsError *err)
Definition MessageFederateExport.cpp:356
const char * helicsEndpointGetName(HelicsEndpoint endpoint)
Definition MessageFederateExport.cpp:669
void helicsEndpointSetInfo(HelicsEndpoint endpoint, const char *info, HelicsError *err)
Definition MessageFederateExport.cpp:706
void * HelicsEndpoint
Definition api-data.h:37
double HelicsTime
Definition api-data.h:106
void * HelicsMessage
Definition api-data.h:100
const HelicsBool HELICS_FALSE
Definition api-data.h:123
const HelicsBool HELICS_TRUE
Definition api-data.h:122
Definition DataBuffer.hpp:18
HELICS_NODISCARD HelicsDataBuffer getHelicsDataBuffer()
Definition DataBuffer.hpp:165
Definition Endpoint.hpp:219
void sendTo(const std::vector< char > &data, const std::string &dest)
Definition Endpoint.hpp:356
Endpoint & operator=(const Endpoint &endpoint)
Definition Endpoint.hpp:228
Endpoint(HelicsEndpoint hep) HELICS_NOTHROW
Definition Endpoint.hpp:222
void setInfo(const std::string &info)
Definition Endpoint.hpp:413
void sendToAt(const void *data, size_t data_size, const std::string &dest, HelicsTime time)
Definition Endpoint.hpp:302
HELICS_NODISCARD uint64_t pendingMessageCount() const
Definition Endpoint.hpp:256
void sendTo(const void *data, size_t data_size, const std::string &dest)
Definition Endpoint.hpp:282
HELICS_NODISCARD const char * getType()
Definition Endpoint.hpp:408
void sendTo(const std::string &data, const std::string &dest)
Definition Endpoint.hpp:319
void sendAt(const std::vector< char > &data, HelicsTime time)
Definition Endpoint.hpp:365
Message createMessage()
Definition Endpoint.hpp:265
Endpoint() HELICS_NOTHROW
Definition Endpoint.hpp:224
void sendAt(const std::string &data, HelicsTime time)
Definition Endpoint.hpp:328
Message getMessage()
Definition Endpoint.hpp:262
HELICS_NODISCARD const char * getInfo() const
Definition Endpoint.hpp:411
HELICS_NODISCARD const char * getDefaultDestination() const
Definition Endpoint.hpp:251
void send(const std::string &data)
Definition Endpoint.hpp:310
void sendMessage(const Message &message)
Definition Endpoint.hpp:383
HELICS_NODISCARD const char * getName() const
Definition Endpoint.hpp:406
void sendToAt(const std::vector< char > &data, const std::string &dest, HelicsTime time)
Definition Endpoint.hpp:375
Endpoint(const Endpoint &endpoint) HELICS_NOTHROW
Definition Endpoint.hpp:226
void send(const void *data, size_t data_size)
Definition Endpoint.hpp:272
void sendMessageZeroCopy(Message &message)
Definition Endpoint.hpp:399
void setDefaultDestination(const std::string &dest)
Definition Endpoint.hpp:246
void send(const std::vector< char > &data)
Definition Endpoint.hpp:347
HELICS_NODISCARD bool isValid() const
Definition Endpoint.hpp:238
void sendToAt(const std::string &data, const std::string &dest, HelicsTime time)
Definition Endpoint.hpp:338
void sendAt(const char *data, size_t data_size, HelicsTime time)
Definition Endpoint.hpp:292
HELICS_NODISCARD HelicsEndpoint baseObject() const
Definition Endpoint.hpp:236
Definition cpp98/Federate.hpp:229
Definition Endpoint.hpp:22
HELICS_NODISCARD const char * c_str() const
Definition Endpoint.hpp:165
HELICS_NODISCARD void * data() const
Definition Endpoint.hpp:127
Message & destination(const char *dest)
Definition Endpoint.hpp:91
Message & destination(const std::string &dest)
Definition Endpoint.hpp:85
Message & append(const std::string &str)
Definition Endpoint.hpp:159
Message & data(const char *str)
Definition Endpoint.hpp:141
Message & originalDestination(const std::string &odest)
Definition Endpoint.hpp:114
Message & originalSource(const std::string &osrc)
Definition Endpoint.hpp:103
HELICS_NODISCARD bool getFlagOption(int flag) const
Definition Endpoint.hpp:181
HELICS_NODISCARD int size() const
Definition Endpoint.hpp:120
HELICS_NODISCARD HelicsTime time() const
Definition Endpoint.hpp:167
Message & data(const void *ptr, int size)
Definition Endpoint.hpp:129
~Message()
Definition Endpoint.hpp:58
HELICS_NODISCARD int messageID() const
Definition Endpoint.hpp:186
Message() HELICS_NOTHROW
Definition Endpoint.hpp:25
void resize(int newSize)
Definition Endpoint.hpp:122
Message & newMessageObject(const Federate &fed)
Definition cpp98/MessageFederate.hpp:123
Message & time(HelicsTime val)
Definition Endpoint.hpp:169
Message & messageID(int newId)
Definition Endpoint.hpp:188
HELICS_NODISCARD const char * source() const
Definition Endpoint.hpp:69
HELICS_NODISCARD const char * originalDestination() const
Definition Endpoint.hpp:109
Message & source(const char *src)
Definition Endpoint.hpp:77
Message & data(const std::string &str)
Definition Endpoint.hpp:135
Message(HelicsMessage hmo) HELICS_NOTHROW
Definition Endpoint.hpp:31
HELICS_NODISCARD bool isValid() const
Definition Endpoint.hpp:67
HELICS_NODISCARD const char * destination() const
Definition Endpoint.hpp:83
Message & source(const std::string &src)
Definition Endpoint.hpp:71
HELICS_NODISCARD HelicsMessage release()
Definition Endpoint.hpp:196
void reserve(int newSize)
Definition Endpoint.hpp:125
Message & data(DataBuffer buffer)
Definition Endpoint.hpp:147
Message(const Message &mess) HELICS_NOTHROW
Definition Endpoint.hpp:34
HELICS_NODISCARD const char * originalSource() const
Definition Endpoint.hpp:98
HELICS_NODISCARD DataBuffer dataBuffer()
Definition Endpoint.hpp:204
Message & append(const void *ptr, int size)
Definition Endpoint.hpp:153
Message & setFlag(int flag, bool val)
Definition Endpoint.hpp:175
Message & operator=(const Message &mess) HELICS_NOTHROW
Definition Endpoint.hpp:39
Definition helicsExceptions.hpp:38
const char * helicsMessageGetDestination(HelicsMessage message)
Definition MessageFederateExport.cpp:922
void helicsMessageAppendData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition MessageFederateExport.cpp:1190
HelicsMessage helicsMessageClone(HelicsMessage message, HelicsError *err)
Definition MessageFederateExport.cpp:1228
void helicsMessageSetFlagOption(HelicsMessage message, int flag, HelicsBool flagValue, HelicsError *err)
Definition MessageFederateExport.cpp:1139
const char * helicsMessageGetOriginalSource(HelicsMessage message)
Definition MessageFederateExport.cpp:931
int helicsMessageGetByteCount(HelicsMessage message)
Definition MessageFederateExport.cpp:991
void helicsMessageSetDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition MessageFederateExport.cpp:1060
void helicsMessageResize(HelicsMessage message, int newSize, HelicsError *err)
Definition MessageFederateExport.cpp:1093
void helicsMessageSetData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition MessageFederateExport.cpp:1167
const char * helicsMessageGetSource(HelicsMessage message)
Definition MessageFederateExport.cpp:913
void helicsMessageSetDataBuffer(HelicsMessage message, HelicsDataBuffer data, HelicsError *err)
Definition MessageFederateExport.cpp:1176
HelicsBool helicsMessageGetFlagOption(HelicsMessage message, int flag)
Definition MessageFederateExport.cpp:967
void helicsMessageSetString(HelicsMessage message, const char *data, HelicsError *err)
Definition MessageFederateExport.cpp:1157
HelicsDataBuffer helicsMessageDataBuffer(HelicsMessage message, HelicsError *err)
Definition MessageFederateExport.cpp:1033
void helicsMessageFree(HelicsMessage message)
Definition MessageFederateExport.cpp:1252
int helicsMessageGetMessageID(HelicsMessage message)
Definition MessageFederateExport.cpp:958
void helicsMessageClear(HelicsMessage message, HelicsError *err)
Definition MessageFederateExport.cpp:1199
void * helicsMessageGetBytesPointer(HelicsMessage message)
Definition MessageFederateExport.cpp:1024
void helicsMessageSetSource(HelicsMessage message, const char *src, HelicsError *err)
Definition MessageFederateExport.cpp:1051
void helicsMessageSetTime(HelicsMessage message, HelicsTime time, HelicsError *err)
Definition MessageFederateExport.cpp:1084
void helicsMessageSetOriginalDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition MessageFederateExport.cpp:1076
void helicsMessageReserve(HelicsMessage message, int reserveSize, HelicsError *err)
Definition MessageFederateExport.cpp:1107
const char * helicsMessageGetOriginalDestination(HelicsMessage message)
Definition MessageFederateExport.cpp:940
void helicsMessageSetOriginalSource(HelicsMessage message, const char *src, HelicsError *err)
Definition MessageFederateExport.cpp:1068
HelicsTime helicsMessageGetTime(HelicsMessage message)
Definition MessageFederateExport.cpp:949
void helicsMessageSetMessageID(HelicsMessage message, int32_t messageID, HelicsError *err)
Definition MessageFederateExport.cpp:1121
const char * helicsMessageGetString(HelicsMessage message)
Definition MessageFederateExport.cpp:980
HelicsBool helicsMessageIsValid(HelicsMessage message)
Definition MessageFederateExport.cpp:1042
Definition cpp98/Broker.hpp:18