helics  3.5.2
cpp98/Broker.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_BROKER_HPP_
8 #define HELICS_CPP98_BROKER_HPP_
9 #pragma once
10 
11 #include "config.hpp"
12 #include "helics/helics.h"
13 #include "helicsExceptions.hpp"
14 
15 #include <stdexcept>
16 #include <string>
17 
18 namespace helicscpp {
19 class Broker {
20  public:
22  Broker() HELICS_NOTHROW: broker(HELICS_NULL_POINTER) {}
28  Broker(std::string type, std::string name, std::string initString)
29  {
30  broker =
31  helicsCreateBroker(type.c_str(), name.c_str(), initString.c_str(), hThrowOnError());
33  throw(std::runtime_error("broker creation failed"));
34  }
35  }
42  Broker(std::string type, std::string name, int argc, char** argv)
43  {
44  broker =
45  helicsCreateBrokerFromArgs(type.c_str(), name.c_str(), argc, argv, hThrowOnError());
46  }
50  Broker& operator=(const Broker& brk)
51  {
53  return *this;
54  }
55 #ifdef HELICS_HAS_RVALUE_REFS
57  Broker(Broker&& brk) HELICS_NOTHROW: broker(brk.broker) { brk.broker = HELICS_NULL_POINTER; }
59  Broker& operator=(Broker&& brk) HELICS_NOTHROW
60  {
61  broker = brk.broker;
62  brk.broker = HELICS_NULL_POINTER;
63  return *this;
64  }
65 #endif
67  virtual ~Broker()
68  {
69  if (broker != HELICS_NULL_POINTER) {
71  }
72  }
74  operator HelicsBroker() { return broker; }
77  HelicsBroker baseObject() const { return broker; }
79  bool isConnected() const { return (helicsBrokerIsConnected(broker) != HELICS_FALSE); }
84  bool waitForDisconnect(int msToWait = -1)
85  {
87  }
92  const char* getIdentifier() const { return helicsBrokerGetIdentifier(broker); }
94  const char* getAddress() const { return helicsBrokerGetAddress(broker); }
95 
104  void setGlobal(const std::string& valueName, const std::string& value)
105  {
106  helicsBrokerSetGlobal(broker, valueName.c_str(), value.c_str(), hThrowOnError());
107  }
112  void addAlias(const std::string& interfaceName, const std::string& alias)
113  {
114  helicsBrokerAddAlias(broker, interfaceName.c_str(), alias.c_str(), hThrowOnError());
115  }
119  void dataLink(const std::string& source, const std::string& target)
120  {
121  helicsBrokerDataLink(broker, source.c_str(), target.c_str(), hThrowOnError());
122  }
127  void addSourceFilterToEndpoint(const std::string& filter, const std::string& target)
128  {
130  filter.c_str(),
131  target.c_str(),
132  hThrowOnError());
133  }
138  void addDestinationFilterToEndpoint(const std::string& filter, const std::string& target)
139  {
141  filter.c_str(),
142  target.c_str(),
143  hThrowOnError());
144  }
145 
159  std::string query(const std::string& target,
160  const std::string& queryStr,
162  {
163  // returns HelicsQuery
164  HelicsQuery q = helicsCreateQuery(target.c_str(), queryStr.c_str());
165  if (mode != HELICS_SEQUENCING_MODE_FAST) {
166  helicsQuerySetOrdering(q, mode, HELICS_IGNORE_ERROR);
167  }
168  std::string result(helicsQueryBrokerExecute(q, broker, hThrowOnError()));
169  helicsQueryFree(q);
170  return result;
171  }
172 
177  void sendCommand(const std::string& target, const std::string& command)
178  {
179  helicsBrokerSendCommand(broker, target.c_str(), command.c_str(), hThrowOnError());
180  }
181 
182  void setTimeBarrier(HelicsTime barrierTime)
183  {
184  helicsBrokerSetTimeBarrier(broker, barrierTime, HELICS_IGNORE_ERROR);
185  }
186 
187  void clearTimeBarrier() { helicsBrokerClearTimeBarrier(broker); }
188 
189  void globalError(int errorCode, const std::string& errorString)
190  {
191  helicsBrokerGlobalError(broker, errorCode, errorString.c_str(), HELICS_IGNORE_ERROR);
192  }
193 
194  protected:
196 };
197 
198 } // namespace helicscpp
199 #endif
double HelicsTime
Definition: api-data.h:100
void * HelicsQuery
Definition: api-data.h:77
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
void * HelicsBroker
Definition: api-data.h:60
Definition: cpp98/Broker.hpp:19
const char * getIdentifier() const
Definition: cpp98/Broker.hpp:92
void addAlias(const std::string &interfaceName, const std::string &alias)
Definition: cpp98/Broker.hpp:112
Broker() HELICS_NOTHROW
Definition: cpp98/Broker.hpp:22
Broker(std::string type, std::string name, int argc, char **argv)
Definition: cpp98/Broker.hpp:42
HelicsBroker baseObject() const
Definition: cpp98/Broker.hpp:77
Broker(const Broker &brk)
Definition: cpp98/Broker.hpp:48
void addSourceFilterToEndpoint(const std::string &filter, const std::string &target)
Definition: cpp98/Broker.hpp:127
HelicsBroker broker
underlying broker information
Definition: cpp98/Broker.hpp:195
Broker(std::string type, std::string name, std::string initString)
Definition: cpp98/Broker.hpp:28
void disconnect()
Definition: cpp98/Broker.hpp:90
void dataLink(const std::string &source, const std::string &target)
Definition: cpp98/Broker.hpp:119
bool isConnected() const
Definition: cpp98/Broker.hpp:79
virtual ~Broker()
Definition: cpp98/Broker.hpp:67
bool waitForDisconnect(int msToWait=-1)
Definition: cpp98/Broker.hpp:84
std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST) const
Definition: cpp98/Broker.hpp:159
Broker & operator=(const Broker &brk)
Definition: cpp98/Broker.hpp:50
const char * getAddress() const
Definition: cpp98/Broker.hpp:94
void sendCommand(const std::string &target, const std::string &command)
Definition: cpp98/Broker.hpp:177
void addDestinationFilterToEndpoint(const std::string &filter, const std::string &target)
Definition: cpp98/Broker.hpp:138
void setGlobal(const std::string &valueName, const std::string &value)
Definition: cpp98/Broker.hpp:104
Definition: helicsExceptions.hpp:38
void helicsBrokerSetTimeBarrier(HelicsBroker broker, HelicsTime barrierTime, HelicsError *err)
Definition: helicsExport.cpp:675
const char * helicsBrokerGetIdentifier(HelicsBroker broker)
Definition: helicsExport.cpp:868
const char * helicsBrokerGetAddress(HelicsBroker broker)
Definition: helicsExport.cpp:889
void helicsBrokerDataLink(HelicsBroker broker, const char *source, const char *target, HelicsError *err)
Definition: helicsExport.cpp:556
void helicsBrokerGlobalError(HelicsBroker broker, int errorCode, const char *errorString, HelicsError *err)
Definition: helicsExport.cpp:693
HelicsBool helicsBrokerWaitForDisconnect(HelicsBroker broker, int msToWait, HelicsError *err)
Definition: helicsExport.cpp:962
void helicsQuerySetOrdering(HelicsQuery query, int32_t mode, HelicsError *err)
Definition: helicsExport.cpp:1297
void helicsBrokerSendCommand(HelicsBroker broker, const char *target, const char *command, HelicsError *err)
Definition: helicsExport.cpp:648
HelicsBroker helicsBrokerClone(HelicsBroker broker, HelicsError *err)
Definition: helicsExport.cpp:522
HelicsBroker helicsCreateBrokerFromArgs(const char *type, const char *name, int argc, const char *const *argv, HelicsError *err)
Definition: helicsExport.cpp:489
const char * helicsQueryBrokerExecute(HelicsQuery query, HelicsBroker broker, HelicsError *err)
Definition: helicsExport.cpp:1184
void helicsQueryFree(HelicsQuery query)
Definition: helicsExport.cpp:1306
void helicsBrokerAddDestinationFilterToEndpoint(HelicsBroker broker, const char *filter, const char *endpoint, HelicsError *err)
Definition: helicsExport.cpp:724
HelicsQuery helicsCreateQuery(const char *target, const char *query)
Definition: helicsExport.cpp:1120
void helicsBrokerClearTimeBarrier(HelicsBroker broker)
Definition: helicsExport.cpp:684
HelicsBool helicsBrokerIsConnected(HelicsBroker broker)
Definition: helicsExport.cpp:545
HelicsBroker helicsCreateBroker(const char *type, const char *name, const char *initString, HelicsError *err)
Definition: helicsExport.cpp:461
void helicsBrokerDisconnect(HelicsBroker broker, HelicsError *err)
Definition: helicsExport.cpp:998
void helicsBrokerAddSourceFilterToEndpoint(HelicsBroker broker, const char *filter, const char *endpoint, HelicsError *err)
Definition: helicsExport.cpp:711
void helicsBrokerSetGlobal(HelicsBroker broker, const char *valueName, const char *value, HelicsError *err)
Definition: helicsExport.cpp:584
void helicsBrokerFree(HelicsBroker broker)
Definition: helicsExport.cpp:1042
void helicsBrokerAddAlias(HelicsBroker broker, const char *interfaceName, const char *alias, HelicsError *err)
Definition: helicsExport.cpp:624
HelicsSequencingModes
Definition: helics_enums.h:425
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:427
Definition: cpp98/Broker.hpp:18