helics  3.5.2
cpp98/Core.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_CORE_HPP_
8 #define HELICS_CPP98_CORE_HPP_
9 #pragma once
10 
11 #include "Filter.hpp"
12 #include "config.hpp"
13 #include "helics/helics.h"
14 
15 #include <stdexcept>
16 #include <string>
17 
18 namespace helicscpp {
19 class Core {
20  public:
22  Core() HELICS_NOTHROW: core(HELICS_NULL_POINTER) {}
24  Core(const std::string& type, const std::string& name, const std::string& initString)
25  {
26  core = helicsCreateCore(type.c_str(), name.c_str(), initString.c_str(), hThrowOnError());
27  }
29  Core(const std::string& type, const std::string& name, int argc, char** argv)
30  {
31  core = helicsCreateCoreFromArgs(type.c_str(), name.c_str(), argc, argv, hThrowOnError());
32  }
34  explicit Core(HelicsCore cr) HELICS_NOTHROW: core(cr) {}
35 
39  operator HelicsCore() { return core; }
41  HelicsCore baseObject() const { return core; }
43  bool isConnected() const { return (helicsCoreIsConnected(core) != HELICS_FALSE); }
45  Core(const Core& cr) { core = helicsCoreClone(cr.core, hThrowOnError()); }
47  Core& operator=(const Core& cr)
48  {
50  return *this;
51  }
52 #ifdef HELICS_HAS_RVALUE_REFS
54  Core(Core&& cr) HELICS_NOTHROW: core(cr.core) { cr.core = HELICS_NULL_POINTER; }
56  Core& operator=(Core&& cr) HELICS_NOTHROW
57  {
58  core = cr.core;
59  cr.core = HELICS_NULL_POINTER;
60  return *this;
61  }
62 #endif
67 
76  bool waitForDisconnect(int msToWait = -1)
77  {
79  }
82  const char* getIdentifier() const { return helicsCoreGetIdentifier(core); }
84  const char* getAddress() const { return helicsCoreGetAddress(core); }
93  Filter registerFilter(HelicsFilterTypes type, const std::string& name = std::string())
94  {
95  return Filter(helicsCoreRegisterFilter(core, type, name.c_str(), hThrowOnError()));
96  }
97 
104  CloningFilter registerCloningFilter(const std::string& deliveryEndpoint)
105  {
106  return CloningFilter(
107  helicsCoreRegisterCloningFilter(core, deliveryEndpoint.c_str(), hThrowOnError()));
108  }
109 
114  void setGlobal(const std::string& valueName, const std::string& value)
115  {
116  helicsCoreSetGlobal(core, valueName.c_str(), value.c_str(), hThrowOnError());
117  }
118 
123  void addAlias(const std::string& interfaceName, const std::string& alias)
124  {
125  helicsCoreAddAlias(core, interfaceName.c_str(), alias.c_str(), hThrowOnError());
126  }
127 
128  void globalError(int errorCode, const std::string& errorString)
129  {
130  helicsCoreGlobalError(core, errorCode, errorString.c_str(), HELICS_IGNORE_ERROR);
131  }
136  void sendCommand(const std::string& target, const std::string& command)
137  {
138  helicsCoreSendCommand(core, target.c_str(), command.c_str(), hThrowOnError());
139  }
140 
154  std::string query(const std::string& target,
155  const std::string& queryStr,
157  {
158  // returns HelicsQuery
159  HelicsQuery q = helicsCreateQuery(target.c_str(), queryStr.c_str());
160  if (mode != HELICS_SEQUENCING_MODE_FAST) {
161  helicsQuerySetOrdering(q, mode, HELICS_IGNORE_ERROR);
162  }
163  std::string result(helicsQueryCoreExecute(q, core, hThrowOnError()));
164  helicsQueryFree(q);
165  return result;
166  }
167 
168  protected:
170 };
171 
172 } // namespace helicscpp
173 #endif
HelicsFilter helicsCoreRegisterCloningFilter(HelicsCore core, const char *name, HelicsError *err)
Definition: MessageFiltersExport.cpp:207
HelicsFilter helicsCoreRegisterFilter(HelicsCore core, HelicsFilterTypes type, const char *name, HelicsError *err)
Definition: MessageFiltersExport.cpp:146
void * HelicsCore
Definition: api-data.h:54
void * HelicsQuery
Definition: api-data.h:77
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
Definition: Filter.hpp:112
Definition: cpp98/Core.hpp:19
Core & operator=(const Core &cr)
Definition: cpp98/Core.hpp:47
void disconnect()
Definition: cpp98/Core.hpp:71
void setGlobal(const std::string &valueName, const std::string &value)
Definition: cpp98/Core.hpp:114
Core(const Core &cr)
Definition: cpp98/Core.hpp:45
bool waitForDisconnect(int msToWait=-1)
Definition: cpp98/Core.hpp:76
void addAlias(const std::string &interfaceName, const std::string &alias)
Definition: cpp98/Core.hpp:123
const char * getAddress() const
Definition: cpp98/Core.hpp:84
Core(HelicsCore cr) HELICS_NOTHROW
Definition: cpp98/Core.hpp:34
Core() HELICS_NOTHROW
Definition: cpp98/Core.hpp:22
Core(const std::string &type, const std::string &name, int argc, char **argv)
Definition: cpp98/Core.hpp:29
~Core()
Definition: cpp98/Core.hpp:37
bool isConnected() const
Definition: cpp98/Core.hpp:43
HelicsCore core
reference to the underlying core object
Definition: cpp98/Core.hpp:169
void setReadyToInit()
Definition: cpp98/Core.hpp:66
void sendCommand(const std::string &target, const std::string &command)
Definition: cpp98/Core.hpp:136
Filter registerFilter(HelicsFilterTypes type, const std::string &name=std::string())
Definition: cpp98/Core.hpp:93
HelicsCore baseObject() const
Definition: cpp98/Core.hpp:41
Core(const std::string &type, const std::string &name, const std::string &initString)
Definition: cpp98/Core.hpp:24
const char * getIdentifier() const
Definition: cpp98/Core.hpp:82
CloningFilter registerCloningFilter(const std::string &deliveryEndpoint)
Definition: cpp98/Core.hpp:104
std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST) const
Definition: cpp98/Core.hpp:154
Definition: Filter.hpp:18
Definition: helicsExceptions.hpp:38
void helicsCoreSetGlobal(HelicsCore core, const char *valueName, const char *value, HelicsError *err)
Definition: helicsExport.cpp:800
void helicsCoreSendCommand(HelicsCore core, const char *target, const char *command, HelicsError *err)
Definition: helicsExport.cpp:820
void helicsCoreDisconnect(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:945
const char * helicsCoreGetAddress(HelicsCore core)
Definition: helicsExport.cpp:900
void helicsQuerySetOrdering(HelicsQuery query, int32_t mode, HelicsError *err)
Definition: helicsExport.cpp:1297
HelicsCore helicsCoreClone(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:431
void helicsCoreAddAlias(HelicsCore core, const char *interfaceName, const char *alias, HelicsError *err)
Definition: helicsExport.cpp:600
void helicsQueryFree(HelicsQuery query)
Definition: helicsExport.cpp:1306
const char * helicsCoreGetIdentifier(HelicsCore core)
Definition: helicsExport.cpp:878
void helicsCoreSetReadyToInit(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:911
void helicsCoreGlobalError(HelicsCore core, int errorCode, const char *errorString, HelicsError *err)
Definition: helicsExport.cpp:702
HelicsQuery helicsCreateQuery(const char *target, const char *query)
Definition: helicsExport.cpp:1120
HelicsCore helicsCreateCore(const char *type, const char *name, const char *initString, HelicsError *err)
Definition: helicsExport.cpp:361
HelicsCore helicsCreateCoreFromArgs(const char *type, const char *name, int argc, const char *const *argv, HelicsError *err)
Definition: helicsExport.cpp:396
void helicsCoreFree(HelicsCore core)
Definition: helicsExport.cpp:1032
HelicsBool helicsCoreWaitForDisconnect(HelicsCore core, int msToWait, HelicsError *err)
Definition: helicsExport.cpp:980
const char * helicsQueryCoreExecute(HelicsQuery query, HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:1161
HelicsBool helicsCoreIsConnected(HelicsCore core)
Definition: helicsExport.cpp:791
HelicsFilterTypes
Definition: helics_enums.h:389
HelicsSequencingModes
Definition: helics_enums.h:425
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:427
Definition: cpp98/Broker.hpp:18