helics  3.0.1
cpp98/Core.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 #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
53 
54  Core(Core&& cr) HELICS_NOTHROW
55  {
56  core = cr.core;
57  cr.core = HELICS_NULL_POINTER;
58  }
60  Core& operator=(Core&& cr) HELICS_NOTHROW
61  {
62  core = cr.core;
63  cr.core = HELICS_NULL_POINTER;
64  return *this;
65  }
66 #endif
67 
71 
80  bool waitForDisconnect(int msToWait = -1)
81  {
83  }
86  const char* getIdentifier() const { return helicsCoreGetIdentifier(core); }
88  const char* getAddress() const { return helicsCoreGetAddress(core); }
97  Filter registerFilter(HelicsFilterTypes type, const std::string& name = std::string())
98  {
99  return Filter(helicsCoreRegisterFilter(core, type, name.c_str(), hThrowOnError()));
100  }
101 
108  CloningFilter registerCloningFilter(const std::string& deliveryEndpoint)
109  {
110  return CloningFilter(
111  helicsCoreRegisterCloningFilter(core, deliveryEndpoint.c_str(), hThrowOnError()));
112  }
113 
118  void setGlobal(const std::string& valueName, const std::string& value)
119  {
120  helicsCoreSetGlobal(core, valueName.c_str(), value.c_str(), hThrowOnError());
121  }
122 
123  void globalError(int errorCode, const std::string& errorString)
124  {
125  helicsCoreGlobalError(core, errorCode, errorString.c_str(), HELICS_IGNORE_ERROR);
126  }
131  void sendCommand(const std::string& target, const std::string& command)
132  {
133  helicsCoreSendCommand(core, target.c_str(), command.c_str(), hThrowOnError());
134  }
135 
149  std::string query(const std::string& target,
150  const std::string& queryStr,
152  {
153  // returns HelicsQuery
154  HelicsQuery q = helicsCreateQuery(target.c_str(), queryStr.c_str());
155  if (mode != HELICS_SEQUENCING_MODE_FAST) {
156  helicsQuerySetOrdering(q, mode, HELICS_IGNORE_ERROR);
157  }
158  std::string result(helicsQueryCoreExecute(q, core, hThrowOnError()));
159  helicsQueryFree(q);
160  return result;
161  }
162 
163  protected:
165 };
166 
167 } // namespace helicscpp
168 #endif
helicsCoreSendCommand
void helicsCoreSendCommand(HelicsCore core, const char *target, const char *command, HelicsError *err)
Definition: helicsExport.cpp:685
helicscpp::Core::query
std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST) const
Definition: cpp98/Core.hpp:149
helicsCoreClone
HelicsCore helicsCoreClone(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:336
helicsQueryCoreExecute
const char * helicsQueryCoreExecute(HelicsQuery query, HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:973
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:105
helicsCoreFree
void helicsCoreFree(HelicsCore core)
Definition: helicsExport.cpp:853
helicsQuerySetOrdering
void helicsQuerySetOrdering(HelicsQuery query, int32_t mode, HelicsError *err)
Definition: helicsExport.cpp:1090
helicscpp::Core::setReadyToInit
void setReadyToInit()
Definition: cpp98/Core.hpp:70
helicscpp::CloningFilter
Definition: Filter.hpp:106
helicscpp::Core::~Core
~Core()
Definition: cpp98/Core.hpp:37
helicscpp::Core::registerCloningFilter
CloningFilter registerCloningFilter(const std::string &deliveryEndpoint)
Definition: cpp98/Core.hpp:108
helicscpp::Core::setGlobal
void setGlobal(const std::string &valueName, const std::string &value)
Definition: cpp98/Core.hpp:118
helicscpp::Core::Core
Core(const std::string &type, const std::string &name, int argc, char **argv)
Definition: cpp98/Core.hpp:29
helicsCoreSetGlobal
void helicsCoreSetGlobal(HelicsCore core, const char *valueName, const char *value, HelicsError *err)
Definition: helicsExport.cpp:672
helicsCreateCore
HelicsCore helicsCreateCore(const char *type, const char *name, const char *initString, HelicsError *err)
Definition: helicsExport.cpp:266
helicsQueryFree
void helicsQueryFree(HelicsQuery query)
Definition: helicsExport.cpp:1099
helicscpp::Core::sendCommand
void sendCommand(const std::string &target, const std::string &command)
Definition: cpp98/Core.hpp:131
helicsCoreGetIdentifier
const char * helicsCoreGetIdentifier(HelicsCore core)
Definition: helicsExport.cpp:722
helicsCreateCoreFromArgs
HelicsCore helicsCreateCoreFromArgs(const char *type, const char *name, int argc, const char *const *argv, HelicsError *err)
Definition: helicsExport.cpp:301
helicsCoreRegisterCloningFilter
HelicsFilter helicsCoreRegisterCloningFilter(HelicsCore core, const char *name, HelicsError *err)
Definition: MessageFiltersExport.cpp:164
helicscpp::Core::Core
Core() HELICS_NOTHROW
Definition: cpp98/Core.hpp:22
helicsCoreGlobalError
void helicsCoreGlobalError(HelicsCore core, int errorCode, const char *errorString, HelicsError *err)
Definition: helicsExport.cpp:574
helicscpp::Core::waitForDisconnect
bool waitForDisconnect(int msToWait=-1)
Definition: cpp98/Core.hpp:80
helicscpp::Core::registerFilter
Filter registerFilter(HelicsFilterTypes type, const std::string &name=std::string())
Definition: cpp98/Core.hpp:97
helicscpp::Core
Definition: cpp98/Core.hpp:19
helicsCoreRegisterFilter
HelicsFilter helicsCoreRegisterFilter(HelicsCore core, HelicsFilterTypes type, const char *name, HelicsError *err)
Definition: MessageFiltersExport.cpp:103
helicscpp::Core::operator=
Core & operator=(const Core &cr)
Definition: cpp98/Core.hpp:47
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicsCoreDisconnect
void helicsCoreDisconnect(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:782
helicscpp::Core::getIdentifier
const char * getIdentifier() const
Definition: cpp98/Core.hpp:86
HelicsSequencingModes
HelicsSequencingModes
Definition: helics_enums.h:363
HelicsFilterTypes
HelicsFilterTypes
Definition: helics_enums.h:339
helicscpp::Core::isConnected
bool isConnected() const
Definition: cpp98/Core.hpp:43
helicscpp::Core::getAddress
const char * getAddress() const
Definition: cpp98/Core.hpp:88
helicscpp::Core::core
HelicsCore core
reference to the underlying core object
Definition: cpp98/Core.hpp:164
HELICS_SEQUENCING_MODE_FAST
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:365
helicscpp::Core::Core
Core(const std::string &type, const std::string &name, const std::string &initString)
Definition: cpp98/Core.hpp:24
HelicsCore
void * HelicsCore
Definition: api-data.h:49
helicsCoreSetReadyToInit
void helicsCoreSetReadyToInit(HelicsCore core, HelicsError *err)
Definition: helicsExport.cpp:755
helicsCreateQuery
HelicsQuery helicsCreateQuery(const char *target, const char *query)
Definition: helicsExport.cpp:942
helicscpp::Core::Core
Core(const Core &cr)
Definition: cpp98/Core.hpp:45
HelicsQuery
void * HelicsQuery
Definition: api-data.h:72
helicsCoreIsConnected
HelicsBool helicsCoreIsConnected(HelicsCore core)
Definition: helicsExport.cpp:663
helicsCoreGetAddress
const char * helicsCoreGetAddress(HelicsCore core)
Definition: helicsExport.cpp:744
helicscpp::Core::disconnect
void disconnect()
Definition: cpp98/Core.hpp:75
helicscpp::Filter
Definition: Filter.hpp:18
helicsCoreWaitForDisconnect
HelicsBool helicsCoreWaitForDisconnect(HelicsCore core, int msToWait, HelicsError *err)
Definition: helicsExport.cpp:809
helicscpp::Core::Core
Core(HelicsCore cr) HELICS_NOTHROW
Definition: cpp98/Core.hpp:34
helicscpp
Definition: cpp98/Broker.hpp:18
helicscpp::Core::baseObject
HelicsCore baseObject() const
Definition: cpp98/Core.hpp:41