helics  3.0.1
cpp98/MessageFederate.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 
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:
28  MessageFederate(const std::string& fedName, FederateInfo& fi)
29  {
30  fed = helicsCreateMessageFederate(fedName.c_str(), fi.getInfo(), hThrowOnError());
31  }
32 
36  explicit MessageFederate(const std::string& configString)
37  {
38  fed = helicsCreateMessageFederateFromConfig(configString.c_str(), hThrowOnError());
39  }
40 
42  MessageFederate() HELICS_NOTHROW {}
43 
52  Endpoint registerEndpoint(const std::string& name, const std::string& type = std::string())
53  {
54  HelicsEndpoint ep =
55  helicsFederateRegisterEndpoint(fed, name.c_str(), type.c_str(), hThrowOnError());
56  local_endpoints.push_back(ep);
57  return Endpoint(ep);
58  }
59 
65  Endpoint registerGlobalEndpoint(const std::string& name,
66  const std::string& type = std::string())
67  {
68  HelicsEndpoint ep =
69  helicsFederateRegisterGlobalEndpoint(fed, name.c_str(), type.c_str(), hThrowOnError());
70  local_endpoints.push_back(ep);
71  return Endpoint(ep);
72  }
73 
77  Endpoint getEndpoint(const std::string& name)
78  {
79  return Endpoint(helicsFederateGetEndpoint(fed, name.c_str(), hThrowOnError()));
80  }
84  Endpoint getEndpoint(int index)
85  {
87  }
88 
90  bool hasMessage() const
91  {
92  // returns int, 1 = true, 0 = false
93  return (helicsFederateHasMessage(fed) > 0);
94  }
95 
98 
101 
106 
107  private:
108  std::vector<HelicsEndpoint> local_endpoints;
109 };
110 // this code needs the definition of federate before it can de defined
111 inline Message::Message(const Federate& fed):
112  mo(helicsFederateCreateMessage(fed.getObject(), hThrowOnError()))
113 {
114 }
115 
117 {
119  if (mo != HELICS_NULL_POINTER) {
120  helicsMessageFree(mo);
121  }
122  mo = newmo;
123  return *this;
124 }
125 } // namespace helicscpp
126 #endif
helicscpp::MessageFederate::MessageFederate
MessageFederate(const std::string &fedName, FederateInfo &fi)
Definition: cpp98/MessageFederate.hpp:28
helicscpp::Federate::getObject
HelicsFederate getObject() const
Definition: cpp98/Federate.hpp:687
helicscpp::Message
Definition: Endpoint.hpp:21
helicsFederateRegisterEndpoint
HelicsEndpoint helicsFederateRegisterEndpoint(HelicsFederate fed, const char *name, const char *type, HelicsError *err)
Definition: MessageFederateExport.cpp:48
helicscpp::MessageFederate
Definition: cpp98/MessageFederate.hpp:22
helicsFederateCreateMessage
HelicsMessage helicsFederateCreateMessage(HelicsFederate fed, HelicsError *err)
Definition: MessageFederateExport.cpp:539
helicscpp::FederateInfo::getInfo
HelicsFederateInfo getInfo()
Definition: cpp98/Federate.hpp:165
helicsCreateMessageFederateFromConfig
HelicsFederate helicsCreateMessageFederateFromConfig(const char *configFile, HelicsError *err)
Definition: FederateExport.cpp:476
helicsFederateGetEndpointByIndex
HelicsEndpoint helicsFederateGetEndpointByIndex(HelicsFederate fed, int index, HelicsError *err)
Definition: MessageFederateExport.cpp:160
helicscpp::Federate
Definition: cpp98/Federate.hpp:194
helicscpp::FederateInfo
Definition: cpp98/Federate.hpp:27
helicscpp::MessageFederate::hasMessage
bool hasMessage() const
Definition: cpp98/MessageFederate.hpp:90
helicscpp::MessageFederate::MessageFederate
MessageFederate() HELICS_NOTHROW
Definition: cpp98/MessageFederate.hpp:42
helicscpp::MessageFederate::MessageFederate
MessageFederate(const std::string &configString)
Definition: cpp98/MessageFederate.hpp:36
helicsFederateHasMessage
HelicsBool helicsFederateHasMessage(HelicsFederate fed)
Definition: MessageFederateExport.cpp:389
helicscpp::MessageFederate::getMessage
Message getMessage()
Definition: cpp98/MessageFederate.hpp:100
helicsMessageFree
void helicsMessageFree(HelicsMessage message)
Definition: MessageFederateExport.cpp:1157
helicsCreateMessageFederate
HelicsFederate helicsCreateMessageFederate(const char *fedName, HelicsFederateInfo fi, HelicsError *err)
Definition: FederateExport.cpp:450
helicscpp::MessageFederate::registerGlobalEndpoint
Endpoint registerGlobalEndpoint(const std::string &name, const std::string &type=std::string())
Definition: cpp98/MessageFederate.hpp:65
helicsFederateGetMessage
HelicsMessage helicsFederateGetMessage(HelicsFederate fed)
Definition: MessageFederateExport.cpp:521
helicsFederateGetEndpoint
HelicsEndpoint helicsFederateGetEndpoint(HelicsFederate fed, const char *name, HelicsError *err)
Definition: MessageFederateExport.cpp:133
HelicsEndpoint
void * HelicsEndpoint
Definition: api-data.h:37
helicscpp::MessageFederate::createMessage
Message createMessage()
Definition: cpp98/MessageFederate.hpp:103
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicscpp::Endpoint
Definition: Endpoint.hpp:200
helicscpp::MessageFederate::pendingMessageCount
int pendingMessageCount() const
Definition: cpp98/MessageFederate.hpp:97
helicsFederateRegisterGlobalEndpoint
HelicsEndpoint helicsFederateRegisterGlobalEndpoint(HelicsFederate fed, const char *name, const char *type, HelicsError *err)
Definition: MessageFederateExport.cpp:90
HelicsMessage
void * HelicsMessage
Definition: api-data.h:84
helicscpp::MessageFederate::registerEndpoint
Endpoint registerEndpoint(const std::string &name, const std::string &type=std::string())
Definition: cpp98/MessageFederate.hpp:52
helicscpp::MessageFederate::getEndpointCount
int getEndpointCount() const
Definition: cpp98/MessageFederate.hpp:105
helicscpp::Message::Message
Message() HELICS_NOTHROW
Definition: Endpoint.hpp:24
helicsFederatePendingMessageCount
int helicsFederatePendingMessageCount(HelicsFederate fed)
Definition: MessageFederateExport.cpp:407
helicscpp::Federate::fed
HelicsFederate fed
underlying HelicsFederate object
Definition: cpp98/Federate.hpp:690
helicsFederateGetEndpointCount
int helicsFederateGetEndpointCount(HelicsFederate fed)
Definition: MessageFederateExport.cpp:631
helicscpp::MessageFederate::getEndpoint
Endpoint getEndpoint(int index)
Definition: cpp98/MessageFederate.hpp:84
helicscpp::MessageFederate::getEndpoint
Endpoint getEndpoint(const std::string &name)
Definition: cpp98/MessageFederate.hpp:77
helicscpp
Definition: cpp98/Broker.hpp:18
helicscpp::Message::newMessageObject
Message & newMessageObject(const Federate &fed)
Definition: cpp98/MessageFederate.hpp:116