helics  3.3.0
Endpoint.hpp
1 /*
2 Copyright (c) 2017-2022,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #ifndef HELICS_CPP98_ENDPOINT_HPP_
8 #define HELICS_CPP98_ENDPOINT_HPP_
9 #pragma once
10 
11 #include "helics/helics.h"
12 #include "helicsExceptions.hpp"
13 
14 #include <string>
15 #include <vector>
16 
17 namespace helicscpp {
18 class Endpoint;
19 class Federate;
20 
21 class Message {
22  public:
24  Message() HELICS_NOTHROW: mo(HELICS_NULL_POINTER) {}
26  explicit Message(const Federate& fed);
28  explicit Message(const Endpoint& ept);
30  explicit Message(HelicsMessage hmo) HELICS_NOTHROW: mo(hmo) {}
31 
33  Message(const Message& mess) HELICS_NOTHROW:
34  mo(helicsMessageClone(mess.mo, HELICS_IGNORE_ERROR))
35  {
36  }
38  Message& operator=(const Message& mess) HELICS_NOTHROW
39  {
40  if (mo != HELICS_NULL_POINTER) {
42  }
43  mo = helicsMessageClone(mess.mo, HELICS_IGNORE_ERROR);
44  return *this;
45  }
46 #ifdef HELICS_HAS_RVALUE_REFS
47 
48  Message(Message&& mess) HELICS_NOTHROW: mo(mess.release()) {}
50  Message& operator=(Message&& mess) HELICS_NOTHROW
51  {
52  mo = mess.release();
53  return *this;
54  }
55 #endif
56 
58  {
59  if (mo != HELICS_NULL_POINTER) {
61  }
62  }
64  operator HelicsMessage() const
65  {
66  return mo;
67  }
69  bool isValid() const
70  {
71  return (helicsMessageIsValid(mo) == HELICS_TRUE);
72  }
74  const char* source() const
75  {
76  return helicsMessageGetSource(mo);
77  }
79  Message& source(const std::string& src)
80  {
81  helicsMessageSetSource(mo, src.c_str(), hThrowOnError());
82  return *this;
83  }
85  Message& source(const char* src)
86  {
88  return *this;
89  }
91  const char* destination() const
92  {
93  return helicsMessageGetDestination(mo);
94  }
96  Message& destination(const std::string& dest)
97  {
98  helicsMessageSetDestination(mo, dest.c_str(), hThrowOnError());
99  return *this;
100  }
102  Message& destination(const char* dest)
103  {
105  return *this;
106  }
109  const char* originalSource() const
110  {
112  }
114  Message& originalSource(const std::string& osrc)
115  {
116  helicsMessageSetOriginalSource(mo, osrc.c_str(), hThrowOnError());
117  return *this;
118  }
120  const char* originalDestination() const
121  {
123  }
125  Message& originalDestination(const std::string& odest)
126  {
128  return *this;
129  }
131  int size() const
132  {
133  return helicsMessageGetByteCount(mo);
134  }
136  void resize(int newSize)
137  {
138  helicsMessageResize(mo, newSize, hThrowOnError());
139  }
142  void reserve(int newSize)
143  {
144  helicsMessageReserve(mo, newSize, hThrowOnError());
145  }
147  void* data() const
148  {
149  return helicsMessageGetBytesPointer(mo);
150  }
152  Message& data(const void* ptr, int size)
153  {
155  return *this;
156  }
158  Message& data(const std::string& str)
159  {
160  helicsMessageSetString(mo, str.c_str(), hThrowOnError());
161  return *this;
162  }
164  Message& data(const char* str)
165  {
167  return *this;
168  }
170  Message& append(const void* ptr, int size)
171  {
173  return *this;
174  }
176  Message& append(const std::string& str)
177  {
178  helicsMessageAppendData(mo, str.c_str(), static_cast<int>(str.size()), hThrowOnError());
179  return *this;
180  }
182  const char* c_str() const
183  {
184  return helicsMessageGetString(mo);
185  }
187  HelicsTime time() const
188  {
189  return helicsMessageGetTime(mo);
190  }
193  {
195  return *this;
196  }
198  Message& setFlag(int flag, bool val)
199  {
201  return *this;
202  }
204  bool getFlagOption(int flag) const
205  {
206  return (helicsMessageGetFlagOption(mo, flag) == HELICS_TRUE);
207  }
209  int messageID() const
210  {
211  return helicsMessageGetMessageID(mo);
212  }
214  Message& messageID(int newId)
215  {
217  return *this;
218  }
222  {
223  HelicsMessage mreturn = mo;
224  mo = HELICS_NULL_POINTER;
225  return mreturn;
226  }
227  void clear()
228  {
229  helicsMessageClear(mo, HELICS_IGNORE_ERROR);
230  }
232  Message& newMessageObject(const Federate& fed);
233 
235  Message& newMessageObject(const Endpoint& ept);
236 
237  private:
238  HelicsMessage mo;
239 };
240 
242 class Endpoint {
243  public:
245  explicit Endpoint(HelicsEndpoint hep) HELICS_NOTHROW: ep(hep) {}
247  Endpoint() HELICS_NOTHROW: ep(HELICS_NULL_POINTER) {}
249  Endpoint(const Endpoint& endpoint) HELICS_NOTHROW: ep(endpoint.ep) {}
251  Endpoint& operator=(const Endpoint& endpoint)
252  {
253  ep = endpoint.ep;
254  return *this;
255  }
257  operator HelicsEndpoint() { return ep; }
259  HelicsEndpoint baseObject() const { return ep; }
261  bool isValid() const { return (helicsEndpointIsValid(ep) == HELICS_TRUE); }
262  /* Checks if endpoint has unread messages **/
263  bool hasMessage() const
264  {
265  // returns int, 1 = true, 0 = false
266  return helicsEndpointHasMessage(ep) > 0;
267  }
269  void setDefaultDestination(const std::string& dest)
270  {
272  }
274  const char* getDefaultDestination() const { return helicsEndpointGetDefaultDestination(ep); }
277 
280 
283 
289  void send(const void* data, size_t data_size)
290  {
291  helicsEndpointSendBytes(ep, data, static_cast<int>(data_size), hThrowOnError());
292  }
293 
299  void sendTo(const void* data, size_t data_size, const std::string& dest)
300  {
302  ep, data, static_cast<int>(data_size), dest.c_str(), hThrowOnError());
303  }
309  void sendAt(const char* data, size_t data_size, HelicsTime time)
310  {
311  helicsEndpointSendBytesAt(ep, data, static_cast<int>(data_size), time, hThrowOnError());
312  }
319  void sendToAt(const void* data, size_t data_size, const std::string& dest, HelicsTime time)
320  {
322  ep, data, static_cast<int>(data_size), dest.c_str(), time, hThrowOnError());
323  }
327  void send(const std::string& data)
328  {
329  helicsEndpointSendBytes(ep, &(data[0]), static_cast<int>(data.size()), hThrowOnError());
330  }
331 
336  void sendTo(const std::string& data, const std::string& dest)
337  {
339  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
340  }
345  void sendAt(const std::string& data, HelicsTime time)
346  {
348  ep, &(data[0]), static_cast<int>(data.size()), time, hThrowOnError());
349  }
355  void sendToAt(const std::string& data, const std::string& dest, HelicsTime time)
356  {
358  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
359  }
360 
364  void send(const std::vector<char>& data)
365  {
366  helicsEndpointSendBytes(ep, data.data(), static_cast<int>(data.size()), hThrowOnError());
367  }
368 
373  void sendTo(const std::vector<char>& data, const std::string& dest)
374  {
376  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
377  }
382  void sendAt(const std::vector<char>& data, HelicsTime time)
383  {
385  ep, data.data(), static_cast<int>(data.size()), time, hThrowOnError());
386  }
392  void sendToAt(const std::vector<char>& data, const std::string& dest, HelicsTime time)
393  {
395  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
396  }
397 
400  void sendMessage(const Message& message)
401  {
402  // returns helicsStatus
404  }
405 #ifdef HELICS_HAS_RVALUE_REFS
406 
408  void sendMessage(Message&& message)
409  {
410  // returns helicsStatus
411  helicsEndpointSendMessageZeroCopy(ep, message.release(), hThrowOnError());
412  }
413 #endif
414 
417  {
418  // returns helicsStatus
419  helicsEndpointSendMessageZeroCopy(ep, static_cast<HelicsMessage>(message), hThrowOnError());
420  message.release();
421  }
423  const char* getName() const
424  {
425  return helicsEndpointGetName(ep);
426  }
428  const char* getType()
429  {
430  return helicsEndpointGetType(ep);
431  }
432 
434  const char* getInfo() const
435  {
436  return helicsEndpointGetInfo(ep);
437  }
439  void setInfo(const std::string& info)
440  {
441  helicsEndpointSetInfo(ep, info.c_str(), HELICS_IGNORE_ERROR);
442  }
443 
444  private:
445  HelicsEndpoint ep;
446 };
447 
448 inline Message::Message(const Endpoint& ept):
449  mo(helicsEndpointCreateMessage(ept.baseObject(), hThrowOnError()))
450 {
451 }
452 
454 {
456  if (mo != HELICS_NULL_POINTER) {
457  helicsMessageFree(mo);
458  }
459  mo = newmo;
460  return *this;
461 }
462 
463 } // namespace helicscpp
464 #endif
helicsMessageGetSource
const char * helicsMessageGetSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:832
helicscpp::Endpoint::getName
const char * getName() const
Definition: Endpoint.hpp:423
HelicsTime
double HelicsTime
Definition: api-data.h:100
helicscpp::Message::source
const char * source() const
Definition: Endpoint.hpp:74
helicscpp::Endpoint::sendToAt
void sendToAt(const std::vector< char > &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:392
helicscpp::Message
Definition: Endpoint.hpp:21
helicscpp::Message::reserve
void reserve(int newSize)
Definition: Endpoint.hpp:142
helicsEndpointSendBytes
void helicsEndpointSendBytes(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:221
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
helicscpp::Endpoint::getInfo
const char * getInfo() const
Definition: Endpoint.hpp:434
helicscpp::Message::time
Message & time(HelicsTime val)
Definition: Endpoint.hpp:192
HELICS_TRUE
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
helicsMessageGetOriginalDestination
const char * helicsMessageGetOriginalDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:859
helicscpp::Message::destination
Message & destination(const char *dest)
Definition: Endpoint.hpp:102
helicscpp::Message::getFlagOption
bool getFlagOption(int flag) const
Definition: Endpoint.hpp:204
helicsMessageSetMessageID
void helicsMessageSetMessageID(HelicsMessage message, int32_t messageID, HelicsError *err)
Definition: MessageFederateExport.cpp:1031
helicsEndpointPendingMessageCount
int helicsEndpointPendingMessageCount(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:382
helicsMessageGetBytesPointer
void * helicsMessageGetBytesPointer(HelicsMessage message)
Definition: MessageFederateExport.cpp:943
helicsMessageGetOriginalSource
const char * helicsMessageGetOriginalSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:850
helicsEndpointSendMessageZeroCopy
void helicsEndpointSendMessageZeroCopy(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:318
helicscpp::Message::destination
Message & destination(const std::string &dest)
Definition: Endpoint.hpp:96
helicscpp::Message::append
Message & append(const void *ptr, int size)
Definition: Endpoint.hpp:170
helicscpp::Endpoint::sendToAt
void sendToAt(const std::string &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:355
helicsMessageGetByteCount
int helicsMessageGetByteCount(HelicsMessage message)
Definition: MessageFederateExport.cpp:910
helicsEndpointIsValid
HelicsBool helicsEndpointIsValid(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:185
helicscpp::Federate
Definition: cpp98/Federate.hpp:248
helicsMessageSetTime
void helicsMessageSetTime(HelicsMessage message, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:994
helicscpp::Message::append
Message & append(const std::string &str)
Definition: Endpoint.hpp:176
helicscpp::Message::setFlag
Message & setFlag(int flag, bool val)
Definition: Endpoint.hpp:198
helicsMessageClone
HelicsMessage helicsMessageClone(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1124
helicscpp::Message::resize
void resize(int newSize)
Definition: Endpoint.hpp:136
helicsMessageGetFlagOption
HelicsBool helicsMessageGetFlagOption(HelicsMessage message, int flag)
Definition: MessageFederateExport.cpp:886
helicscpp::Endpoint::sendAt
void sendAt(const std::string &data, HelicsTime time)
Definition: Endpoint.hpp:345
helicscpp::Message::release
HelicsMessage release()
Definition: Endpoint.hpp:221
helicscpp::Message::operator=
Message & operator=(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:38
helicsMessageGetTime
HelicsTime helicsMessageGetTime(HelicsMessage message)
Definition: MessageFederateExport.cpp:868
helicscpp::Message::originalSource
const char * originalSource() const
Definition: Endpoint.hpp:109
helicsEndpointSendMessage
void helicsEndpointSendMessage(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:300
helicsEndpointSetInfo
void helicsEndpointSetInfo(HelicsEndpoint endpoint, const char *info, HelicsError *err)
Definition: MessageFederateExport.cpp:625
helicscpp::Message::Message
Message(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:33
helicsEndpointGetMessage
HelicsMessage helicsEndpointGetMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:472
helicsMessageGetDestination
const char * helicsMessageGetDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:841
helicscpp::Endpoint::sendTo
void sendTo(const std::vector< char > &data, const std::string &dest)
Definition: Endpoint.hpp:373
helicsMessageSetOriginalDestination
void helicsMessageSetOriginalDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:986
helicscpp::Endpoint::sendTo
void sendTo(const void *data, size_t data_size, const std::string &dest)
Definition: Endpoint.hpp:299
helicscpp::Endpoint::getMessage
Message getMessage()
Definition: Endpoint.hpp:279
helicsMessageFree
void helicsMessageFree(HelicsMessage message)
Definition: MessageFederateExport.cpp:1148
helicsMessageAppendData
void helicsMessageAppendData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1086
helicscpp::Message::data
Message & data(const char *str)
Definition: Endpoint.hpp:164
helicsEndpointSendBytesAt
void helicsEndpointSendBytesAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:257
helicscpp::Message::size
int size() const
Definition: Endpoint.hpp:131
helicsMessageIsValid
HelicsBool helicsMessageIsValid(HelicsMessage message)
Definition: MessageFederateExport.cpp:952
helicscpp::Endpoint::sendMessageZeroCopy
void sendMessageZeroCopy(Message &message)
Definition: Endpoint.hpp:416
helicscpp::Message::originalDestination
Message & originalDestination(const std::string &odest)
Definition: Endpoint.hpp:125
helicscpp::Endpoint::send
void send(const void *data, size_t data_size)
Definition: Endpoint.hpp:289
helicsMessageSetOriginalSource
void helicsMessageSetOriginalSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:978
HelicsEndpoint
void * HelicsEndpoint
Definition: api-data.h:37
helicsMessageResize
void helicsMessageResize(HelicsMessage message, int newSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1003
helicsMessageClear
void helicsMessageClear(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1095
helicsEndpointCreateMessage
HelicsMessage helicsEndpointCreateMessage(HelicsEndpoint endpoint, HelicsError *err)
Definition: MessageFederateExport.cpp:515
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicsEndpointGetInfo
const char * helicsEndpointGetInfo(HelicsEndpoint end)
Definition: MessageFederateExport.cpp:608
helicscpp::Endpoint
Definition: Endpoint.hpp:242
helicscpp::Endpoint::getDefaultDestination
const char * getDefaultDestination() const
Definition: Endpoint.hpp:274
helicscpp::Message::messageID
int messageID() const
Definition: Endpoint.hpp:209
helicscpp::Endpoint::sendToAt
void sendToAt(const void *data, size_t data_size, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:319
helicscpp::Endpoint::sendAt
void sendAt(const std::vector< char > &data, HelicsTime time)
Definition: Endpoint.hpp:382
helicscpp::Message::originalSource
Message & originalSource(const std::string &osrc)
Definition: Endpoint.hpp:114
helicscpp::Endpoint::Endpoint
Endpoint(HelicsEndpoint hep) HELICS_NOTHROW
Definition: Endpoint.hpp:245
helicsEndpointSendBytesToAt
void helicsEndpointSendBytesToAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:275
helicsMessageGetString
const char * helicsMessageGetString(HelicsMessage message)
Definition: MessageFederateExport.cpp:899
helicscpp::Message::originalDestination
const char * originalDestination() const
Definition: Endpoint.hpp:120
helicsEndpointSendBytesTo
void helicsEndpointSendBytesTo(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:239
helicsMessageReserve
void helicsMessageReserve(HelicsMessage message, int reserveSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1017
helicscpp::Message::data
Message & data(const std::string &str)
Definition: Endpoint.hpp:158
HelicsMessage
void * HelicsMessage
Definition: api-data.h:94
helicscpp::Endpoint::baseObject
HelicsEndpoint baseObject() const
Definition: Endpoint.hpp:259
helicscpp::Message::c_str
const char * c_str() const
Definition: Endpoint.hpp:182
helicscpp::Endpoint::createMessage
Message createMessage()
Definition: Endpoint.hpp:282
helicscpp::Message::Message
Message() HELICS_NOTHROW
Definition: Endpoint.hpp:24
helicscpp::Message::data
Message & data(const void *ptr, int size)
Definition: Endpoint.hpp:152
helicsMessageGetMessageID
int helicsMessageGetMessageID(HelicsMessage message)
Definition: MessageFederateExport.cpp:877
helicscpp::Endpoint::isValid
bool isValid() const
Definition: Endpoint.hpp:261
helicsMessageSetFlagOption
void helicsMessageSetFlagOption(HelicsMessage message, int flag, HelicsBool flagValue, HelicsError *err)
Definition: MessageFederateExport.cpp:1049
helicscpp::Endpoint::pendingMessageCount
uint64_t pendingMessageCount() const
Definition: Endpoint.hpp:276
helicsMessageSetSource
void helicsMessageSetSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:961
helicscpp::Endpoint::send
void send(const std::vector< char > &data)
Definition: Endpoint.hpp:364
helicsEndpointSetDefaultDestination
void helicsEndpointSetDefaultDestination(HelicsEndpoint endpoint, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:194
helicsMessageSetDestination
void helicsMessageSetDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:970
helicsEndpointGetType
const char * helicsEndpointGetType(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:570
helicsEndpointGetName
const char * helicsEndpointGetName(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:588
helicscpp::Endpoint::sendAt
void sendAt(const char *data, size_t data_size, HelicsTime time)
Definition: Endpoint.hpp:309
helicscpp::Endpoint::Endpoint
Endpoint(const Endpoint &endpoint) HELICS_NOTHROW
Definition: Endpoint.hpp:249
helicsEndpointHasMessage
HelicsBool helicsEndpointHasMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:364
helicscpp::Message::~Message
~Message()
Definition: Endpoint.hpp:57
helicscpp::Message::messageID
Message & messageID(int newId)
Definition: Endpoint.hpp:214
helicscpp::Message::source
Message & source(const char *src)
Definition: Endpoint.hpp:85
helicscpp::Endpoint::sendTo
void sendTo(const std::string &data, const std::string &dest)
Definition: Endpoint.hpp:336
helicscpp::Endpoint::setInfo
void setInfo(const std::string &info)
Definition: Endpoint.hpp:439
helicscpp::Endpoint::Endpoint
Endpoint() HELICS_NOTHROW
Definition: Endpoint.hpp:247
helicscpp::Endpoint::operator=
Endpoint & operator=(const Endpoint &endpoint)
Definition: Endpoint.hpp:251
helicscpp::Message::data
void * data() const
Definition: Endpoint.hpp:147
helicsMessageSetString
void helicsMessageSetString(HelicsMessage message, const char *data, HelicsError *err)
Definition: MessageFederateExport.cpp:1067
helicscpp::Message::destination
const char * destination() const
Definition: Endpoint.hpp:91
helicscpp::Endpoint::setDefaultDestination
void setDefaultDestination(const std::string &dest)
Definition: Endpoint.hpp:269
helicsEndpointGetDefaultDestination
const char * helicsEndpointGetDefaultDestination(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:211
helicsMessageSetData
void helicsMessageSetData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1077
helicscpp::Message::isValid
bool isValid() const
Definition: Endpoint.hpp:69
helicscpp::Message::source
Message & source(const std::string &src)
Definition: Endpoint.hpp:79
helicscpp
Definition: cpp98/Broker.hpp:18
helicscpp::Message::newMessageObject
Message & newMessageObject(const Federate &fed)
Definition: cpp98/MessageFederate.hpp:116
helicscpp::Endpoint::getType
const char * getType()
Definition: Endpoint.hpp:428
helicscpp::Endpoint::send
void send(const std::string &data)
Definition: Endpoint.hpp:327
helicscpp::Message::Message
Message(HelicsMessage hmo) HELICS_NOTHROW
Definition: Endpoint.hpp:30
helicscpp::Message::time
HelicsTime time() const
Definition: Endpoint.hpp:187
helicscpp::Endpoint::sendMessage
void sendMessage(const Message &message)
Definition: Endpoint.hpp:400