helics  3.6.1
cpp98/MessageFederate.hpp
1 /*
2 Copyright (c) 2017-2025,
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 
8 #ifndef HELICS_CPP98_MESSAGE_FEDERATE_HPP_
9 #define HELICS_CPP98_MESSAGE_FEDERATE_HPP_
10 #pragma once
11 
12 #include "Endpoint.hpp"
13 #include "Federate.hpp"
14 #include "helics/helics.h"
15 
16 #include <string>
17 #include <vector>
18 
19 namespace helicscpp {
22 class MessageFederate: public virtual Federate {
23  public:
29  MessageFederate(const std::string& fedName, FederateInfo& fedInfo)
30  {
31  fed = helicsCreateMessageFederate(fedName.c_str(), fedInfo.getInfo(), hThrowOnError());
32  }
33 
37  explicit MessageFederate(const std::string& configString)
38  {
39  fed = helicsCreateMessageFederateFromConfig(configString.c_str(), hThrowOnError());
40  }
41 
43  MessageFederate() HELICS_NOTHROW {}
44 
53  Endpoint registerEndpoint(const std::string& name, const std::string& type = std::string())
54  {
55  HelicsEndpoint ep =
56  helicsFederateRegisterEndpoint(fed, name.c_str(), type.c_str(), hThrowOnError());
57  local_endpoints.push_back(ep);
58  return Endpoint(ep);
59  }
60 
66  Endpoint registerGlobalEndpoint(const std::string& name,
67  const std::string& type = std::string())
68  {
69  HelicsEndpoint ep =
70  helicsFederateRegisterGlobalEndpoint(fed, name.c_str(), type.c_str(), hThrowOnError());
71  local_endpoints.push_back(ep);
72  return Endpoint(ep);
73  }
74 
78  Endpoint getEndpoint(const std::string& name)
79  {
80  return Endpoint(helicsFederateGetEndpoint(fed, name.c_str(), hThrowOnError()));
81  }
85  Endpoint getEndpoint(int index)
86  {
88  }
89 
91  bool hasMessage() const
92  {
93  // returns int, 1 = true, 0 = false
94  return (helicsFederateHasMessage(fed) > 0);
95  }
96 
99 
102 
107 
108  private:
109  std::vector<HelicsEndpoint> local_endpoints;
110 };
111 // this code needs the definition of federate before it can de defined
112 inline Message::Message(const Federate& fed):
113  mo(helicsFederateCreateMessage(fed.getObject(), hThrowOnError()))
114 {
115 }
116 
118 {
120  if (mo != HELICS_NULL_POINTER) {
121  helicsMessageFree(mo);
122  }
123  mo = newmo;
124  return *this;
125 }
126 } // namespace helicscpp
127 #endif
HelicsEndpoint helicsFederateRegisterGlobalEndpoint(HelicsFederate fed, const char *name, const char *type, HelicsError *err)
Definition: MessageFederateExport.cpp:118
HelicsEndpoint helicsFederateRegisterEndpoint(HelicsFederate fed, const char *name, const char *type, HelicsError *err)
Definition: MessageFederateExport.cpp:76
HelicsMessage helicsFederateGetMessage(HelicsFederate fed)
Definition: MessageFederateExport.cpp:569
HelicsBool helicsFederateHasMessage(HelicsFederate fed)
Definition: MessageFederateExport.cpp:436
int helicsFederateGetEndpointCount(HelicsFederate fed)
Definition: MessageFederateExport.cpp:679
HelicsEndpoint helicsFederateGetEndpoint(HelicsFederate fed, const char *name, HelicsError *err)
Definition: MessageFederateExport.cpp:161
HelicsMessage helicsFederateCreateMessage(HelicsFederate fed, HelicsError *err)
Definition: MessageFederateExport.cpp:587
int helicsFederatePendingMessageCount(HelicsFederate fed)
Definition: MessageFederateExport.cpp:454
HelicsEndpoint helicsFederateGetEndpointByIndex(HelicsFederate fed, int index, HelicsError *err)
Definition: MessageFederateExport.cpp:184
void * HelicsEndpoint
Definition: api-data.h:37
void * HelicsMessage
Definition: api-data.h:100
Definition: Endpoint.hpp:209
Definition: cpp98/Federate.hpp:28
HelicsFederateInfo getInfo()
Definition: cpp98/Federate.hpp:163
Definition: cpp98/Federate.hpp:229
HelicsFederate fed
underlying HelicsFederate object
Definition: cpp98/Federate.hpp:904
HelicsFederate getObject() const
Definition: cpp98/Federate.hpp:901
Definition: cpp98/MessageFederate.hpp:22
Endpoint registerEndpoint(const std::string &name, const std::string &type=std::string())
Definition: cpp98/MessageFederate.hpp:53
MessageFederate(const std::string &configString)
Definition: cpp98/MessageFederate.hpp:37
int getEndpointCount() const
Definition: cpp98/MessageFederate.hpp:106
int pendingMessageCount() const
Definition: cpp98/MessageFederate.hpp:98
bool hasMessage() const
Definition: cpp98/MessageFederate.hpp:91
Message getMessage()
Definition: cpp98/MessageFederate.hpp:101
Endpoint getEndpoint(const std::string &name)
Definition: cpp98/MessageFederate.hpp:78
Endpoint getEndpoint(int index)
Definition: cpp98/MessageFederate.hpp:85
Endpoint registerGlobalEndpoint(const std::string &name, const std::string &type=std::string())
Definition: cpp98/MessageFederate.hpp:66
Message createMessage()
Definition: cpp98/MessageFederate.hpp:104
MessageFederate(const std::string &fedName, FederateInfo &fedInfo)
Definition: cpp98/MessageFederate.hpp:29
MessageFederate() HELICS_NOTHROW
Definition: cpp98/MessageFederate.hpp:43
Definition: Endpoint.hpp:22
Message() HELICS_NOTHROW
Definition: Endpoint.hpp:25
Message & newMessageObject(const Federate &fed)
Definition: cpp98/MessageFederate.hpp:117
Definition: helicsExceptions.hpp:38
void helicsMessageFree(HelicsMessage message)
Definition: MessageFederateExport.cpp:1252
HelicsFederate helicsCreateMessageFederate(const char *fedName, HelicsFederateInfo fedInfo, HelicsError *err)
Definition: FederateExport.cpp:515
HelicsFederate helicsCreateMessageFederateFromConfig(const char *configFile, HelicsError *err)
Definition: FederateExport.cpp:537
Definition: cpp98/Broker.hpp:18