helics  3.5.2
Endpoint.hpp
1 /*
2 Copyright (c) 2017-2024,
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 "DataBuffer.hpp"
12 #include "helics/helics.h"
13 #include "helicsExceptions.hpp"
14 
15 #include <string>
16 #include <vector>
17 
18 namespace helicscpp {
19 class Endpoint;
20 class Federate;
21 
22 class 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  bool isValid() const { return (helicsMessageIsValid(mo) == HELICS_TRUE); }
69  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  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  const char* originalSource() const { return helicsMessageGetOriginalSource(mo); }
100  Message& originalSource(const std::string& osrc)
101  {
102  helicsMessageSetOriginalSource(mo, osrc.c_str(), hThrowOnError());
103  return *this;
104  }
106  const char* originalDestination() const { return helicsMessageGetOriginalDestination(mo); }
108  Message& originalDestination(const std::string& odest)
109  {
111  return *this;
112  }
114  int size() const { return helicsMessageGetByteCount(mo); }
116  void resize(int newSize) { helicsMessageResize(mo, newSize, hThrowOnError()); }
119  void reserve(int newSize) { helicsMessageReserve(mo, newSize, hThrowOnError()); }
121  void* data() const { return helicsMessageGetBytesPointer(mo); }
123  Message& data(const void* ptr, int size)
124  {
126  return *this;
127  }
129  Message& data(const std::string& str)
130  {
131  helicsMessageSetString(mo, str.c_str(), hThrowOnError());
132  return *this;
133  }
135  Message& data(const char* str)
136  {
138  return *this;
139  }
142  {
144  return *this;
145  }
147  Message& append(const void* ptr, int size)
148  {
150  return *this;
151  }
153  Message& append(const std::string& str)
154  {
155  helicsMessageAppendData(mo, str.c_str(), static_cast<int>(str.size()), hThrowOnError());
156  return *this;
157  }
159  const char* c_str() const { return helicsMessageGetString(mo); }
161  HelicsTime time() const { return helicsMessageGetTime(mo); }
164  {
166  return *this;
167  }
169  Message& setFlag(int flag, bool val)
170  {
172  return *this;
173  }
175  bool getFlagOption(int flag) const
176  {
177  return (helicsMessageGetFlagOption(mo, flag) == HELICS_TRUE);
178  }
180  int messageID() const { return helicsMessageGetMessageID(mo); }
182  Message& messageID(int newId)
183  {
185  return *this;
186  }
190  {
191  HelicsMessage mreturn = mo;
192  mo = HELICS_NULL_POINTER;
193  return mreturn;
194  }
195  void clear() { helicsMessageClear(mo, HELICS_IGNORE_ERROR); }
197  DataBuffer dataBuffer() { return DataBuffer(helicsMessageDataBuffer(mo, HELICS_IGNORE_ERROR)); }
199  Message& newMessageObject(const Federate& fed);
200 
202  Message& newMessageObject(const Endpoint& ept);
203 
204  private:
205  HelicsMessage mo;
206 };
207 
209 class Endpoint {
210  public:
212  explicit Endpoint(HelicsEndpoint hep) HELICS_NOTHROW: ep(hep) {}
214  Endpoint() HELICS_NOTHROW: ep(HELICS_NULL_POINTER) {}
216  Endpoint(const Endpoint& endpoint) HELICS_NOTHROW: ep(endpoint.ep) {}
218  Endpoint& operator=(const Endpoint& endpoint)
219  {
220  ep = endpoint.ep;
221  return *this;
222  }
224  operator HelicsEndpoint() { return ep; }
226  HelicsEndpoint baseObject() const { return ep; }
228  bool isValid() const { return (helicsEndpointIsValid(ep) == HELICS_TRUE); }
229  /* Checks if endpoint has unread messages **/
230  bool hasMessage() const
231  {
232  // returns int, 1 = true, 0 = false
233  return helicsEndpointHasMessage(ep) > 0;
234  }
236  void setDefaultDestination(const std::string& dest)
237  {
239  }
241  const char* getDefaultDestination() const { return helicsEndpointGetDefaultDestination(ep); }
244 
247 
250 
256  void send(const void* data, size_t data_size)
257  {
258  helicsEndpointSendBytes(ep, data, static_cast<int>(data_size), hThrowOnError());
259  }
260 
266  void sendTo(const void* data, size_t data_size, const std::string& dest)
267  {
269  ep, data, static_cast<int>(data_size), dest.c_str(), hThrowOnError());
270  }
276  void sendAt(const char* data, size_t data_size, HelicsTime time)
277  {
278  helicsEndpointSendBytesAt(ep, data, static_cast<int>(data_size), time, hThrowOnError());
279  }
286  void sendToAt(const void* data, size_t data_size, const std::string& dest, HelicsTime time)
287  {
289  ep, data, static_cast<int>(data_size), dest.c_str(), time, hThrowOnError());
290  }
294  void send(const std::string& data)
295  {
296  helicsEndpointSendBytes(ep, &(data[0]), static_cast<int>(data.size()), hThrowOnError());
297  }
298 
303  void sendTo(const std::string& data, const std::string& dest)
304  {
306  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
307  }
312  void sendAt(const std::string& data, HelicsTime time)
313  {
315  ep, &(data[0]), static_cast<int>(data.size()), time, hThrowOnError());
316  }
322  void sendToAt(const std::string& data, const std::string& dest, HelicsTime time)
323  {
325  ep, &(data[0]), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
326  }
327 
331  void send(const std::vector<char>& data)
332  {
333  helicsEndpointSendBytes(ep, data.data(), static_cast<int>(data.size()), hThrowOnError());
334  }
335 
340  void sendTo(const std::vector<char>& data, const std::string& dest)
341  {
343  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), hThrowOnError());
344  }
349  void sendAt(const std::vector<char>& data, HelicsTime time)
350  {
352  ep, data.data(), static_cast<int>(data.size()), time, hThrowOnError());
353  }
359  void sendToAt(const std::vector<char>& data, const std::string& dest, HelicsTime time)
360  {
362  ep, data.data(), static_cast<int>(data.size()), dest.c_str(), time, hThrowOnError());
363  }
364 
367  void sendMessage(const Message& message)
368  {
369  // returns helicsStatus
371  }
372 #ifdef HELICS_HAS_RVALUE_REFS
375  void sendMessage(Message&& message)
376  {
377  // returns helicsStatus
378  helicsEndpointSendMessageZeroCopy(ep, message.release(), hThrowOnError());
379  }
380 #endif
384  {
385  // returns helicsStatus
386  helicsEndpointSendMessageZeroCopy(ep, static_cast<HelicsMessage>(message), hThrowOnError());
387  message.release();
388  }
390  const char* getName() const { return helicsEndpointGetName(ep); }
392  const char* getType() { return helicsEndpointGetType(ep); }
393 
395  const char* getInfo() const { return helicsEndpointGetInfo(ep); }
397  void setInfo(const std::string& info)
398  {
399  helicsEndpointSetInfo(ep, info.c_str(), HELICS_IGNORE_ERROR);
400  }
401 
402  private:
403  HelicsEndpoint ep;
404 };
405 
406 inline Message::Message(const Endpoint& ept):
407  mo(helicsEndpointCreateMessage(ept.baseObject(), hThrowOnError()))
408 {
409 }
410 
412 {
414  if (mo != HELICS_NULL_POINTER) {
415  helicsMessageFree(mo);
416  }
417  mo = newmo;
418  return *this;
419 }
420 
421 } // namespace helicscpp
422 #endif
void helicsEndpointSetDefaultDestination(HelicsEndpoint endpoint, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:213
HelicsBool helicsEndpointIsValid(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:204
HelicsMessage helicsEndpointCreateMessage(HelicsEndpoint endpoint, HelicsError *err)
Definition: MessageFederateExport.cpp:534
void helicsEndpointSendBytes(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:240
void helicsEndpointSendMessageZeroCopy(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:337
int helicsEndpointPendingMessageCount(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:401
const char * helicsEndpointGetInfo(HelicsEndpoint end)
Definition: MessageFederateExport.cpp:627
void helicsEndpointSendBytesAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:276
const char * helicsEndpointGetName(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:607
HelicsBool helicsEndpointHasMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:383
void helicsEndpointSendMessage(HelicsEndpoint endpoint, HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:319
const char * helicsEndpointGetType(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:589
const char * helicsEndpointGetDefaultDestination(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:230
void helicsEndpointSendBytesTo(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:258
HelicsMessage helicsEndpointGetMessage(HelicsEndpoint endpoint)
Definition: MessageFederateExport.cpp:491
void helicsEndpointSendBytesToAt(HelicsEndpoint endpoint, const void *data, int inputDataLength, const char *dst, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:294
void helicsEndpointSetInfo(HelicsEndpoint endpoint, const char *info, HelicsError *err)
Definition: MessageFederateExport.cpp:644
void * HelicsEndpoint
Definition: api-data.h:37
double HelicsTime
Definition: api-data.h:100
void * HelicsMessage
Definition: api-data.h:94
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
Definition: DataBuffer.hpp:18
HelicsDataBuffer getHelicsDataBuffer()
Definition: DataBuffer.hpp:165
Definition: Endpoint.hpp:209
void sendTo(const std::vector< char > &data, const std::string &dest)
Definition: Endpoint.hpp:340
Endpoint(HelicsEndpoint hep) HELICS_NOTHROW
Definition: Endpoint.hpp:212
void setInfo(const std::string &info)
Definition: Endpoint.hpp:397
void sendToAt(const void *data, size_t data_size, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:286
const char * getDefaultDestination() const
Definition: Endpoint.hpp:241
const char * getName() const
Definition: Endpoint.hpp:390
void sendTo(const void *data, size_t data_size, const std::string &dest)
Definition: Endpoint.hpp:266
void sendTo(const std::string &data, const std::string &dest)
Definition: Endpoint.hpp:303
void sendAt(const std::vector< char > &data, HelicsTime time)
Definition: Endpoint.hpp:349
HelicsEndpoint baseObject() const
Definition: Endpoint.hpp:226
Message createMessage()
Definition: Endpoint.hpp:249
Endpoint() HELICS_NOTHROW
Definition: Endpoint.hpp:214
void sendAt(const std::string &data, HelicsTime time)
Definition: Endpoint.hpp:312
Message getMessage()
Definition: Endpoint.hpp:246
void send(const std::string &data)
Definition: Endpoint.hpp:294
void sendMessage(const Message &message)
Definition: Endpoint.hpp:367
void sendToAt(const std::vector< char > &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:359
Endpoint(const Endpoint &endpoint) HELICS_NOTHROW
Definition: Endpoint.hpp:216
const char * getType()
Definition: Endpoint.hpp:392
const char * getInfo() const
Definition: Endpoint.hpp:395
void send(const void *data, size_t data_size)
Definition: Endpoint.hpp:256
void sendMessageZeroCopy(Message &message)
Definition: Endpoint.hpp:383
void setDefaultDestination(const std::string &dest)
Definition: Endpoint.hpp:236
void send(const std::vector< char > &data)
Definition: Endpoint.hpp:331
void sendToAt(const std::string &data, const std::string &dest, HelicsTime time)
Definition: Endpoint.hpp:322
void sendAt(const char *data, size_t data_size, HelicsTime time)
Definition: Endpoint.hpp:276
bool isValid() const
Definition: Endpoint.hpp:228
Endpoint & operator=(const Endpoint &endpoint)
Definition: Endpoint.hpp:218
uint64_t pendingMessageCount() const
Definition: Endpoint.hpp:243
Definition: cpp98/Federate.hpp:226
Definition: Endpoint.hpp:22
const char * source() const
Definition: Endpoint.hpp:69
Message & data(const char *str)
Definition: Endpoint.hpp:135
const char * c_str() const
Definition: Endpoint.hpp:159
Message & destination(const std::string &dest)
Definition: Endpoint.hpp:85
Message & append(const void *ptr, int size)
Definition: Endpoint.hpp:147
~Message()
Definition: Endpoint.hpp:58
HelicsTime time() const
Definition: Endpoint.hpp:161
int messageID() const
Definition: Endpoint.hpp:180
void * data() const
Definition: Endpoint.hpp:121
Message() HELICS_NOTHROW
Definition: Endpoint.hpp:25
Message & setFlag(int flag, bool val)
Definition: Endpoint.hpp:169
void resize(int newSize)
Definition: Endpoint.hpp:116
Message & newMessageObject(const Federate &fed)
Definition: cpp98/MessageFederate.hpp:116
Message & originalSource(const std::string &osrc)
Definition: Endpoint.hpp:100
HelicsMessage release()
Definition: Endpoint.hpp:189
Message & data(DataBuffer buffer)
Definition: Endpoint.hpp:141
Message & data(const void *ptr, int size)
Definition: Endpoint.hpp:123
Message(HelicsMessage hmo) HELICS_NOTHROW
Definition: Endpoint.hpp:31
void reserve(int newSize)
Definition: Endpoint.hpp:119
Message & source(const std::string &src)
Definition: Endpoint.hpp:71
Message & destination(const char *dest)
Definition: Endpoint.hpp:91
const char * originalSource() const
Definition: Endpoint.hpp:98
Message & operator=(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:39
DataBuffer dataBuffer()
Definition: Endpoint.hpp:197
Message & originalDestination(const std::string &odest)
Definition: Endpoint.hpp:108
Message & append(const std::string &str)
Definition: Endpoint.hpp:153
const char * originalDestination() const
Definition: Endpoint.hpp:106
Message & source(const char *src)
Definition: Endpoint.hpp:77
int size() const
Definition: Endpoint.hpp:114
const char * destination() const
Definition: Endpoint.hpp:83
bool getFlagOption(int flag) const
Definition: Endpoint.hpp:175
Message(const Message &mess) HELICS_NOTHROW
Definition: Endpoint.hpp:34
Message & data(const std::string &str)
Definition: Endpoint.hpp:129
bool isValid() const
Definition: Endpoint.hpp:67
Message & time(HelicsTime val)
Definition: Endpoint.hpp:163
Message & messageID(int newId)
Definition: Endpoint.hpp:182
Definition: helicsExceptions.hpp:38
const char * helicsMessageGetString(HelicsMessage message)
Definition: MessageFederateExport.cpp:918
const char * helicsMessageGetOriginalSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:869
void helicsMessageAppendData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1128
HelicsMessage helicsMessageClone(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1166
void helicsMessageSetFlagOption(HelicsMessage message, int flag, HelicsBool flagValue, HelicsError *err)
Definition: MessageFederateExport.cpp:1077
int helicsMessageGetByteCount(HelicsMessage message)
Definition: MessageFederateExport.cpp:929
void helicsMessageSetDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:998
void helicsMessageResize(HelicsMessage message, int newSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1031
void helicsMessageSetData(HelicsMessage message, const void *data, int inputDataLength, HelicsError *err)
Definition: MessageFederateExport.cpp:1105
const char * helicsMessageGetSource(HelicsMessage message)
Definition: MessageFederateExport.cpp:851
void helicsMessageSetDataBuffer(HelicsMessage message, HelicsDataBuffer data, HelicsError *err)
Definition: MessageFederateExport.cpp:1114
HelicsBool helicsMessageGetFlagOption(HelicsMessage message, int flag)
Definition: MessageFederateExport.cpp:905
void * helicsMessageGetBytesPointer(HelicsMessage message)
Definition: MessageFederateExport.cpp:962
void helicsMessageSetString(HelicsMessage message, const char *data, HelicsError *err)
Definition: MessageFederateExport.cpp:1095
HelicsDataBuffer helicsMessageDataBuffer(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:971
void helicsMessageFree(HelicsMessage message)
Definition: MessageFederateExport.cpp:1190
int helicsMessageGetMessageID(HelicsMessage message)
Definition: MessageFederateExport.cpp:896
void helicsMessageClear(HelicsMessage message, HelicsError *err)
Definition: MessageFederateExport.cpp:1137
const char * helicsMessageGetDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:860
void helicsMessageSetSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:989
void helicsMessageSetTime(HelicsMessage message, HelicsTime time, HelicsError *err)
Definition: MessageFederateExport.cpp:1022
void helicsMessageSetOriginalDestination(HelicsMessage message, const char *dst, HelicsError *err)
Definition: MessageFederateExport.cpp:1014
const char * helicsMessageGetOriginalDestination(HelicsMessage message)
Definition: MessageFederateExport.cpp:878
void helicsMessageReserve(HelicsMessage message, int reserveSize, HelicsError *err)
Definition: MessageFederateExport.cpp:1045
void helicsMessageSetOriginalSource(HelicsMessage message, const char *src, HelicsError *err)
Definition: MessageFederateExport.cpp:1006
HelicsTime helicsMessageGetTime(HelicsMessage message)
Definition: MessageFederateExport.cpp:887
void helicsMessageSetMessageID(HelicsMessage message, int32_t messageID, HelicsError *err)
Definition: MessageFederateExport.cpp:1059
HelicsBool helicsMessageIsValid(HelicsMessage message)
Definition: MessageFederateExport.cpp:980
Definition: cpp98/Broker.hpp:18