helics  3.0.1
Endpoint.hpp
1 /*
2 Copyright (c) 2017-2021,
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 { return mo; }
66  bool isValid() const { return (helicsMessageIsValid(mo) == HELICS_TRUE); }
68  const char* source() const { return helicsMessageGetSource(mo); }
70  Message& source(const std::string& src)
71  {
72  helicsMessageSetSource(mo, src.c_str(), hThrowOnError());
73  return *this;
74  }
76  Message& source(const char* src)
77  {
79  return *this;
80  }
82  const char* destination() const { return helicsMessageGetDestination(mo); }
84  Message& destination(const std::string& dest)
85  {
86  helicsMessageSetDestination(mo, dest.c_str(), hThrowOnError());
87  return *this;
88  }
90  Message& destination(const char* dest)
91  {
93  return *this;
94  }
97  const char* originalSource() const { return helicsMessageGetOriginalSource(mo); }
99  Message& originalSource(const std::string& osrc)
100  {
101  helicsMessageSetOriginalSource(mo, osrc.c_str(), hThrowOnError());
102  return *this;
103  }
105  const char* originalDestination() const { return helicsMessageGetOriginalDestination(mo); }
107  Message& originalDestination(const std::string& odest)
108  {
110  return *this;
111  }
113  int size() const { return helicsMessageGetByteCount(mo); }
115  void resize(int newSize) { helicsMessageResize(mo, newSize, hThrowOnError()); }
118  void reserve(int newSize) { helicsMessageReserve(mo, newSize, hThrowOnError()); }
120  void* data() const { return helicsMessageGetBytesPointer(mo); }
122  Message& data(const void* ptr, int size)
123  {
125  return *this;
126  }
128  Message& data(const std::string& str)
129  {
130  helicsMessageSetString(mo, str.c_str(), hThrowOnError());
131  return *this;
132  }
134  Message& data(const char* str)
135  {
137  return *this;
138  }
140  Message& append(const void* ptr, int size)
141  {
143  return *this;
144  }
146  Message& append(const std::string& str)
147  {
148  helicsMessageAppendData(mo, str.c_str(), static_cast<int>(str.size()), hThrowOnError());
149  return *this;
150  }
152  const char* c_str() const { return helicsMessageGetString(mo); }
154  HelicsTime time() const { return helicsMessageGetTime(mo); }
157  {
159  return *this;
160  }
162  Message& setFlag(int flag, bool val)
163  {
165  return *this;
166  }
168  bool getFlagOption(int flag) const
169  {
170  return (helicsMessageGetFlagOption(mo, flag) == HELICS_TRUE);
171  }
173  int messageID() const { return helicsMessageGetMessageID(mo); }
175  Message& messageID(int newId)
176  {
178  return *this;
179  }
183  {
184  HelicsMessage mreturn = mo;
185  mo = HELICS_NULL_POINTER;
186  return mreturn;
187  }
188  void clear() { helicsMessageClear(mo, HELICS_IGNORE_ERROR); }
190  Message& newMessageObject(const Federate& fed);
191 
193  Message& newMessageObject(const Endpoint& ept);
194 
195  private:
196  HelicsMessage mo;
197 };
198 
200 class Endpoint {
201  public:
203  explicit Endpoint(HelicsEndpoint hep) HELICS_NOTHROW: ep(hep) {}
205  Endpoint() HELICS_NOTHROW: ep(HELICS_NULL_POINTER) {}
207  Endpoint(const Endpoint& endpoint) HELICS_NOTHROW: ep(endpoint.ep) {}
209  Endpoint& operator=(const Endpoint& endpoint)
210  {
211  ep = endpoint.ep;
212  return *this;
213  }
215  operator HelicsEndpoint() { return ep; }
217  HelicsEndpoint baseObject() const { return ep; }
219  bool isValid() const { return (helicsEndpointIsValid(ep) == HELICS_TRUE); }
220  /* Checks if endpoint has unread messages **/
221  bool hasMessage() const
222  {
223  // returns int, 1 = true, 0 = false
224  return helicsEndpointHasMessage(ep) > 0;
225  }
227  void setDefaultDestination(const std::string& dest)
228  {
230  }
232  const char* getDefaultDestination() const { return helicsEndpointGetDefaultDestination(ep); }
235 
238 
241 
247  void send(const void* data, size_t data_size)
248  {
249  helicsEndpointSendBytes(ep, data, static_cast<int>(data_size), hThrowOnError());
250  }
251 
257  void sendTo(const void* data, size_t data_size, const std::string& dest)
258  {
260  ep, data, static_cast<int>(data_size), dest.c_str(), hThrowOnError());
261  }
267  void sendAt(const char* data, size_t data_size, HelicsTime time)
268  {
269  helicsEndpointSendBytesAt(ep, data, static_cast<int>(data_size), time, hThrowOnError());
270  }
277  void sendToAt(const void* data, size_t data_size, const std::string& dest, HelicsTime time)
278  {
280  ep, data, static_cast<int>(data_size), dest.c_str(), time, hThrowOnError());
281  }
285  void send(const std::string& data)
286  {
287  helicsEndpointSendBytes(ep, &(data[0]), static_cast<int>(data.size()), hThrowOnError());
288  }
289 
294  void sendTo(const std::string& data, const std::string& dest)
295  {
297  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
298  }
303  void sendAt(const std::string& data, HelicsTime time)
304  {
306  ep, &(data[0]), static_cast<int>(data.size()), time, hThrowOnError());
307  }
313  void sendToAt(const std::string& data, const std::string& dest, HelicsTime time)
314  {
316  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
317  }
318 
322  void send(const std::vector<char>& data)
323  {
324  helicsEndpointSendBytes(ep, data.data(), static_cast<int>(data.size()), hThrowOnError());
325  }
326 
331  void sendTo(const std::vector<char>& data, const std::string& dest)
332  {
334  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
335  }
340  void sendAt(const std::vector<char>& data, HelicsTime time)
341  {
343  ep, data.data(), static_cast<int>(data.size()), time, hThrowOnError());
344  }
350  void sendToAt(const std::vector<char>& data, const std::string& dest, HelicsTime time)
351  {
353  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
354  }
355 
358  void sendMessage(const Message& message)
359  {
360  // returns helicsStatus
362  }
363 #ifdef HELICS_HAS_RVALUE_REFS
364 
366  void sendMessage(Message&& message)
367  {
368  // returns helicsStatus
369  helicsEndpointSendMessageZeroCopy(ep, message.release(), hThrowOnError());
370  }
371 #endif
372 
375  {
376  // returns helicsStatus
377  helicsEndpointSendMessageZeroCopy(ep, static_cast<HelicsMessage>(message), hThrowOnError());
378  message.release();
379  }
381  const char* getName() const { return helicsEndpointGetName(ep); }
383  const char* getType() { return helicsEndpointGetType(ep); }
384 
386  const char* getInfo() const { return helicsEndpointGetInfo(ep); }
388  void setInfo(const std::string& info)
389  {
390  helicsEndpointSetInfo(ep, info.c_str(), HELICS_IGNORE_ERROR);
391  }
392 
393  private:
394  HelicsEndpoint ep;
395 };
396 
397 inline Message::Message(const Endpoint& ept):
398  mo(helicsEndpointCreateMessage(ept.baseObject(), hThrowOnError()))
399 {
400 }
401 
403 {
405  if (mo != HELICS_NULL_POINTER) {
406  helicsMessageFree(mo);
407  }
408  mo = newmo;
409  return *this;
410 }
411 
412 } // namespace helicscpp
413 #endif
helicsMessageGetSource
const char * helicsMessageGetSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:841
helicscpp::Endpoint::getName
const char * getName() const
Definition: Endpoint.hpp:381
HelicsTime
double HelicsTime
Definition: api-data.h:90
helicscpp::Message::source
const char * source() const
Definition: Endpoint.hpp:68
helicscpp::Endpoint::sendToAt
void sendToAt(const std::vector< char > &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:350
helicscpp::Message
Definition: Endpoint.hpp:21
helicscpp::Message::reserve
void reserve(int newSize)
Definition: Endpoint.hpp:118
helicsEndpointSendBytes
void helicsEndpointSendBytes(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:248
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:105
helicscpp::Endpoint::getInfo
const char * getInfo() const
Definition: Endpoint.hpp:386
helicscpp::Message::time
Message & time(HelicsTime val)
Definition: Endpoint.hpp:156
HELICS_TRUE
const HelicsBool HELICS_TRUE
Definition: api-data.h:104
helicsMessageGetOriginalDestination
const char * helicsMessageGetOriginalDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:868
helicscpp::Message::destination
Message & destination(const char *dest)
Definition: Endpoint.hpp:90
helicscpp::Message::getFlagOption
bool getFlagOption(int flag) const
Definition: Endpoint.hpp:168
helicsMessageSetMessageID
void helicsMessageSetMessageID(HelicsMessage message, int32_t messageID, HelicsError *err)
Definition: MessageFederateExport.cpp:1040
helicsEndpointPendingMessageCount
int helicsEndpointPendingMessageCount(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:416
helicsMessageGetBytesPointer
void * helicsMessageGetBytesPointer(HelicsMessage message)
Definition: MessageFederateExport.cpp:952
helicsMessageGetOriginalSource
const char * helicsMessageGetOriginalSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:859
helicsEndpointSendMessageZeroCopy
void helicsEndpointSendMessageZeroCopy(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:345
helicscpp::Message::destination
Message & destination(const std::string &dest)
Definition: Endpoint.hpp:84
helicscpp::Message::append
Message & append(const void *ptr, int size)
Definition: Endpoint.hpp:140
helicscpp::Endpoint::sendToAt
void sendToAt(const std::string &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:313
helicsMessageGetByteCount
int helicsMessageGetByteCount(HelicsMessage message)
Definition: MessageFederateExport.cpp:919
helicsEndpointIsValid
HelicsBool helicsEndpointIsValid(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:186
helicscpp::Federate
Definition: cpp98/Federate.hpp:194
helicsMessageSetTime
void helicsMessageSetTime(HelicsMessage message, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:1003
helicscpp::Message::append
Message & append(const std::string &str)
Definition: Endpoint.hpp:146
helicscpp::Message::setFlag
Message & setFlag(int flag, bool val)
Definition: Endpoint.hpp:162
helicsMessageClone
HelicsMessage helicsMessageClone(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1133
helicscpp::Message::resize
void resize(int newSize)
Definition: Endpoint.hpp:115
helicsMessageGetFlagOption
HelicsBool helicsMessageGetFlagOption(HelicsMessage message, int flag)
Definition: MessageFederateExport.cpp:895
helicscpp::Endpoint::sendAt
void sendAt(const std::string &data, HelicsTime time)
Definition: Endpoint.hpp:303
helicscpp::Message::release
HelicsMessage release()
Definition: Endpoint.hpp:182
helicscpp::Message::operator=
Message & operator=(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:38
helicsMessageGetTime
HelicsTime helicsMessageGetTime(HelicsMessage message)
Definition: MessageFederateExport.cpp:877
helicscpp::Message::originalSource
const char * originalSource() const
Definition: Endpoint.hpp:97
helicsEndpointSendMessage
void helicsEndpointSendMessage(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:327
helicsEndpointSetInfo
void helicsEndpointSetInfo(HelicsEndpoint endpoint, const char *info, HelicsError *err)
Definition: MessageFederateExport.cpp:658
helicscpp::Message::Message
Message(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:33
helicsEndpointGetMessage
HelicsMessage helicsEndpointGetMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:505
helicsMessageGetDestination
const char * helicsMessageGetDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:850
helicscpp::Endpoint::sendTo
void sendTo(const std::vector< char > &data, const std::string &dest)
Definition: Endpoint.hpp:331
helicsMessageSetOriginalDestination
void helicsMessageSetOriginalDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:995
helicscpp::Endpoint::sendTo
void sendTo(const void *data, size_t data_size, const std::string &dest)
Definition: Endpoint.hpp:257
helicscpp::Endpoint::getMessage
Message getMessage()
Definition: Endpoint.hpp:237
helicsMessageFree
void helicsMessageFree(HelicsMessage message)
Definition: MessageFederateExport.cpp:1157
helicsMessageAppendData
void helicsMessageAppendData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1095
helicscpp::Message::data
Message & data(const char *str)
Definition: Endpoint.hpp:134
helicsEndpointSendBytesAt
void helicsEndpointSendBytesAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:284
helicscpp::Message::size
int size() const
Definition: Endpoint.hpp:113
helicsMessageIsValid
HelicsBool helicsMessageIsValid(HelicsMessage message)
Definition: MessageFederateExport.cpp:961
helicscpp::Endpoint::sendMessageZeroCopy
void sendMessageZeroCopy(Message &message)
Definition: Endpoint.hpp:374
helicscpp::Message::originalDestination
Message & originalDestination(const std::string &odest)
Definition: Endpoint.hpp:107
helicscpp::Endpoint::send
void send(const void *data, size_t data_size)
Definition: Endpoint.hpp:247
helicsMessageSetOriginalSource
void helicsMessageSetOriginalSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:987
HelicsEndpoint
void * HelicsEndpoint
Definition: api-data.h:37
helicsMessageSetString
void helicsMessageSetString(HelicsMessage message, const char *str, HelicsError *err)
Definition: MessageFederateExport.cpp:1076
helicsMessageResize
void helicsMessageResize(HelicsMessage message, int newSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1012
helicsMessageClear
void helicsMessageClear(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1104
helicsEndpointCreateMessage
HelicsMessage helicsEndpointCreateMessage(HelicsEndpoint endpoint, HelicsError *err)
Definition: MessageFederateExport.cpp:548
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicsEndpointGetInfo
const char * helicsEndpointGetInfo(HelicsEndpoint end)
Definition: MessageFederateExport.cpp:641
helicscpp::Endpoint
Definition: Endpoint.hpp:200
helicscpp::Endpoint::getDefaultDestination
const char * getDefaultDestination() const
Definition: Endpoint.hpp:232
helicscpp::Message::messageID
int messageID() const
Definition: Endpoint.hpp:173
helicscpp::Endpoint::sendToAt
void sendToAt(const void *data, size_t data_size, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:277
helicscpp::Endpoint::sendAt
void sendAt(const std::vector< char > &data, HelicsTime time)
Definition: Endpoint.hpp:340
helicscpp::Message::originalSource
Message & originalSource(const std::string &osrc)
Definition: Endpoint.hpp:99
helicscpp::Endpoint::Endpoint
Endpoint(HelicsEndpoint hep) HELICS_NOTHROW
Definition: Endpoint.hpp:203
helicsEndpointSendBytesToAt
void helicsEndpointSendBytesToAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:302
helicsMessageGetString
const char * helicsMessageGetString(HelicsMessage message)
Definition: MessageFederateExport.cpp:908
helicscpp::Message::originalDestination
const char * originalDestination() const
Definition: Endpoint.hpp:105
helicsEndpointSendBytesTo
void helicsEndpointSendBytesTo(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:266
helicsMessageReserve
void helicsMessageReserve(HelicsMessage message, int reserveSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1026
helicscpp::Message::data
Message & data(const std::string &str)
Definition: Endpoint.hpp:128
HelicsMessage
void * HelicsMessage
Definition: api-data.h:84
helicscpp::Endpoint::baseObject
HelicsEndpoint baseObject() const
Definition: Endpoint.hpp:217
helicscpp::Message::c_str
const char * c_str() const
Definition: Endpoint.hpp:152
helicscpp::Endpoint::createMessage
Message createMessage()
Definition: Endpoint.hpp:240
helicscpp::Message::Message
Message() HELICS_NOTHROW
Definition: Endpoint.hpp:24
helicscpp::Message::data
Message & data(const void *ptr, int size)
Definition: Endpoint.hpp:122
helicsMessageGetMessageID
int helicsMessageGetMessageID(HelicsMessage message)
Definition: MessageFederateExport.cpp:886
helicscpp::Endpoint::isValid
bool isValid() const
Definition: Endpoint.hpp:219
helicsMessageSetFlagOption
void helicsMessageSetFlagOption(HelicsMessage message, int flag, HelicsBool flagValue, HelicsError *err)
Definition: MessageFederateExport.cpp:1058
helicscpp::Endpoint::pendingMessageCount
uint64_t pendingMessageCount() const
Definition: Endpoint.hpp:234
helicsMessageSetSource
void helicsMessageSetSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:970
helicscpp::Endpoint::send
void send(const std::vector< char > &data)
Definition: Endpoint.hpp:322
helicsEndpointSetDefaultDestination
void helicsEndpointSetDefaultDestination(HelicsEndpoint endpoint, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:195
helicsMessageSetDestination
void helicsMessageSetDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:979
helicsEndpointGetType
const char * helicsEndpointGetType(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:603
helicsEndpointGetName
const char * helicsEndpointGetName(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:621
helicscpp::Endpoint::sendAt
void sendAt(const char *data, size_t data_size, HelicsTime time)
Definition: Endpoint.hpp:267
helicscpp::Endpoint::Endpoint
Endpoint(const Endpoint &endpoint) HELICS_NOTHROW
Definition: Endpoint.hpp:207
helicsEndpointHasMessage
HelicsBool helicsEndpointHasMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:398
helicscpp::Message::~Message
~Message()
Definition: Endpoint.hpp:57
helicscpp::Message::messageID
Message & messageID(int newId)
Definition: Endpoint.hpp:175
helicscpp::Message::source
Message & source(const char *src)
Definition: Endpoint.hpp:76
helicscpp::Endpoint::sendTo
void sendTo(const std::string &data, const std::string &dest)
Definition: Endpoint.hpp:294
helicscpp::Endpoint::setInfo
void setInfo(const std::string &info)
Definition: Endpoint.hpp:388
helicscpp::Endpoint::Endpoint
Endpoint() HELICS_NOTHROW
Definition: Endpoint.hpp:205
helicscpp::Endpoint::operator=
Endpoint & operator=(const Endpoint &endpoint)
Definition: Endpoint.hpp:209
helicscpp::Message::data
void * data() const
Definition: Endpoint.hpp:120
helicscpp::Message::destination
const char * destination() const
Definition: Endpoint.hpp:82
helicscpp::Endpoint::setDefaultDestination
void setDefaultDestination(const std::string &dest)
Definition: Endpoint.hpp:227
helicsEndpointGetDefaultDestination
const char * helicsEndpointGetDefaultDestination(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:212
helicsMessageSetData
void helicsMessageSetData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1086
helicscpp::Message::isValid
bool isValid() const
Definition: Endpoint.hpp:66
helicscpp::Message::source
Message & source(const std::string &src)
Definition: Endpoint.hpp:70
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:383
helicscpp::Endpoint::send
void send(const std::string &data)
Definition: Endpoint.hpp:285
helicscpp::Message::Message
Message(HelicsMessage hmo) HELICS_NOTHROW
Definition: Endpoint.hpp:30
helicscpp::Message::time
HelicsTime time() const
Definition: Endpoint.hpp:154
helicscpp::Endpoint::sendMessage
void sendMessage(const Message &message)
Definition: Endpoint.hpp:358