helics  3.3.0
Input.hpp
1 /*
2 Copyright (c) 2017-2022,
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_INPUT_HPP_
8 #define HELICS_CPP98_INPUT_HPP_
9 #pragma once
10 
11 #include "helics/helics.h"
12 #include "helicsExceptions.hpp"
13 
14 #include <complex>
15 #include <string>
16 #include <vector>
17 
18 namespace helicscpp {
20 class Input {
21  public:
23  explicit Input(HelicsInput hsub) HELICS_NOTHROW: inp(hsub) {}
25  Input() HELICS_NOTHROW: inp(HELICS_NULL_POINTER) {}
27  Input(const Input& inputs) HELICS_NOTHROW: inp(inputs.inp) {}
29  Input& operator=(const Input& input)
30  {
31  inp = input.inp;
32  return *this;
33  }
35  operator HelicsInput() const { return inp; }
37  HelicsInput baseObject() const { return inp; }
39  bool isValid() const { return (helicsInputIsValid(inp) == HELICS_TRUE); }
41  void addTarget(const std::string& target)
42  {
43  helicsInputAddTarget(inp, target.c_str(), HELICS_IGNORE_ERROR);
44  }
47  void setDefault(const char* data, int len)
48  {
49  helicsInputSetDefaultBytes(inp, data, len, HELICS_IGNORE_ERROR);
50  }
52  void setDefault(const std::string& str)
53  {
54  helicsInputSetDefaultString(inp, str.c_str(), HELICS_IGNORE_ERROR);
55  }
57  void setDefault(int64_t val) { helicsInputSetDefaultInteger(inp, val, HELICS_IGNORE_ERROR); }
59  void setDefault(bool val)
60  {
61  helicsInputSetDefaultBoolean(inp, val ? HELICS_TRUE : HELICS_FALSE, HELICS_IGNORE_ERROR);
62  }
64  void setDefault(double val) { helicsInputSetDefaultDouble(inp, val, HELICS_IGNORE_ERROR); }
66  void setDefault(const std::complex<double>& cmplx)
67  {
68  helicsInputSetDefaultComplex(inp, cmplx.real(), cmplx.imag(), HELICS_IGNORE_ERROR);
69  }
70 
72  void setDefault(const std::vector<double>& data)
73  {
75  data.data(),
76  static_cast<int>(data.size()),
77  HELICS_IGNORE_ERROR);
78  }
79 
80 #if defined(__GNUC__)
81 # pragma GCC diagnostic push
82 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
83  // std::complex is explicitly allowed to alias like this in the standard
84 #endif
85 
86  void setDefault(const std::vector<std::complex<double> >& data)
87  {
89  reinterpret_cast<const double*>(data.data()),
90  static_cast<int>(data.size()),
91  HELICS_IGNORE_ERROR);
92  }
93 #if defined(__GNUC__)
94 # pragma GCC diagnostic pop
95 #endif
96 
98  int getBytes(std::vector<char>& data)
99  {
100  int size = helicsInputGetByteCount(inp);
101  data.resize(size);
103  inp, data.data(), static_cast<int>(data.size()), &size, HELICS_IGNORE_ERROR);
104  return size;
105  }
108  {
109  return helicsInputGetByteCount(inp);
110  }
111 
114  {
115  //-1 is for the null character which needs to be counted in C but not in a C++ string
116  return helicsInputGetStringSize(inp) - 1;
117  }
118 
120  std::string getString()
121  {
122  int size = helicsInputGetStringSize(inp);
123  std::string result;
124 
125  result.resize(static_cast<size_t>(size) + 1);
126  // this function results in a null terminated string
127  helicsInputGetString(inp, &result[0], size + 1, &size, HELICS_IGNORE_ERROR);
128  if (!(result.empty()) && (result[static_cast<size_t>(size) - 1] == '\0')) {
129  result.resize(static_cast<size_t>(size) - 1);
130  } else {
131  result.resize(size);
132  }
133  return result;
134  }
135 
137  void getString(std::string& str)
138  {
139  int size = helicsInputGetStringSize(inp);
140  str.resize(static_cast<size_t>(size) + 1);
141  // this function results in a null terminated string
142  helicsInputGetString(inp, &str[0], size + 1, &size, HELICS_IGNORE_ERROR);
143  if (!(str.empty()) && (str[static_cast<size_t>(size) - 1] == '\0')) {
144  str.resize(static_cast<size_t>(size) - 1);
145  } else {
146  str.resize(size);
147  }
148  }
149 
151  void getNamedPoint(std::string& name, double* val)
152  {
153  int size = helicsInputGetStringSize(inp);
154 
155  name.resize(static_cast<size_t>(size) + 1);
156  // this function results in a null terminated string
157  helicsInputGetNamedPoint(inp, &name[0], size + 1, &size, val, HELICS_IGNORE_ERROR);
158  name.resize(size);
159  }
161  int64_t getInteger()
162  {
163  return helicsInputGetInteger(inp, HELICS_IGNORE_ERROR);
164  }
166  bool getBoolean()
167  {
168  HelicsBool val = helicsInputGetBoolean(inp, HELICS_IGNORE_ERROR);
169  return (val == HELICS_TRUE);
170  }
172  double getDouble()
173  {
174  return helicsInputGetDouble(inp, HELICS_IGNORE_ERROR);
175  }
177  std::complex<double> getComplex()
178  {
179  HelicsComplex hc = helicsInputGetComplexObject(inp, HELICS_IGNORE_ERROR);
180  std::complex<double> result(hc.real, hc.imag);
181  return result;
182  }
187  int getVector(double* data, int maxlen)
188  {
189  helicsInputGetVector(inp, data, maxlen, &maxlen, hThrowOnError());
190  // maxlen contains the actual length now
191  return maxlen;
192  }
194  void getVector(std::vector<double>& data)
195  {
196  int actualSize = helicsInputGetVectorSize(inp);
197  data.resize(actualSize);
198  helicsInputGetVector(inp, data.data(), actualSize, HELICS_NULL_POINTER, hThrowOnError());
199  }
200 
205  int getComplexVector(double* data, int maxlen)
206  {
207  helicsInputGetComplexVector(inp, data, maxlen, &maxlen, hThrowOnError());
208  // maxlen contains the actual length now
209  return maxlen;
210  }
211 #if defined(__GNUC__)
212 # pragma GCC diagnostic push
213 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
214  // std::complex is explicitly allowed to alias like this in the standard
215 #endif
216 
217  void getComplexVector(std::vector<std::complex<double> >& data)
218  {
219  int actualSize = helicsInputGetVectorSize(inp);
220  data.resize(actualSize);
222  reinterpret_cast<double*>(data.data()),
223  actualSize,
224  HELICS_NULL_POINTER,
225  hThrowOnError());
226  }
227 #if defined(__GNUC__)
228 # pragma GCC diagnostic pop
229 #endif
230 
232  bool isUpdated() const
233  {
234  return (helicsInputIsUpdated(inp) > 0);
235  }
236 
239  {
240  return helicsInputLastUpdateTime(inp);
241  }
242 
244  void clearUpdate()
245  {
247  }
248  // call helicsInputIsUpdated for each inp
249 
252  const char* getName() const
253  {
254  return helicsInputGetName(inp);
255  }
257  const char* getUnits() const
258  {
259  return helicsInputGetExtractionUnits(inp);
260  }
262  const char* getInjectionUnits() const
263  {
264  return helicsInputGetInjectionUnits(inp);
265  }
267  const char* getPublicationType() const
268  {
269  return helicsInputGetPublicationType(inp);
270  }
272  const char* getType() const
273  {
274  return helicsInputGetType(inp);
275  }
277  const char* getTarget() const
278  {
279  return helicsSubscriptionGetTarget(inp);
280  }
282  const char* getInfo() const
283  {
284  return helicsInputGetInfo(inp);
285  }
287  void setInfo(const std::string& info)
288  {
289  helicsInputSetInfo(inp, info.c_str(), HELICS_IGNORE_ERROR);
290  }
292  const char* getTag(const std::string& tagname) const
293  {
294  return helicsInputGetTag(inp, tagname.c_str());
295  }
297  void setTag(const std::string& tagname, const std::string& tagvalue)
298  {
299  helicsInputSetTag(inp, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
300  }
301  void setOption(int32_t option, int32_t value = 1)
302  {
303  helicsInputSetOption(inp, option, value, HELICS_IGNORE_ERROR);
304  }
305  int32_t getOption(int32_t option)
306  {
307  return helicsInputGetOption(inp, option);
308  }
309 
310  private:
311  HelicsInput inp;
312 };
313 
314 } // namespace helicscpp
315 #endif
helicsInputGetVectorSize
int helicsInputGetVectorSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:893
helicscpp::Input::setDefault
void setDefault(const char *data, int len)
Definition: Input.hpp:47
HelicsTime
double HelicsTime
Definition: api-data.h:100
helicscpp::Input::clearUpdate
void clearUpdate()
Definition: Input.hpp:244
helicsInputLastUpdateTime
HelicsTime helicsInputLastUpdateTime(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1560
helicscpp::Input::getBytes
int getBytes(std::vector< char > &data)
Definition: Input.hpp:98
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
helicscpp::Input::getUnits
const char * getUnits() const
Definition: Input.hpp:257
helicsInputSetOption
void helicsInputSetOption(HelicsInput inp, int option, int value, HelicsError *err)
Definition: ValueFederateExport.cpp:1483
HELICS_TRUE
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
helicscpp::Input::getByteCount
int getByteCount()
Definition: Input.hpp:107
helicscpp::Input::getInfo
const char * getInfo() const
Definition: Input.hpp:282
helicsInputGetName
const char * helicsInputGetName(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1233
helicsInputGetBytes
void helicsInputGetBytes(HelicsInput ipt, void *data, int maxDataLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:707
helicsInputSetDefaultComplexVector
void helicsInputSetDefaultComplexVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1133
helicscpp::Input::getName
const char * getName() const
Definition: Input.hpp:252
helicscpp::Input::setDefault
void setDefault(const std::complex< double > &cmplx)
Definition: Input.hpp:66
helicscpp::Input::getVector
void getVector(std::vector< double > &data)
Definition: Input.hpp:194
helicsInputIsValid
HelicsBool helicsInputIsValid(HelicsInput ipt)
Definition: ValueFederateExport.cpp:669
helicsInputSetDefaultInteger
void helicsInputSetDefaultInteger(HelicsInput ipt, int64_t val, HelicsError *err)
Definition: ValueFederateExport.cpp:1056
helicscpp::Input::setDefault
void setDefault(int64_t val)
Definition: Input.hpp:57
helicsInputSetDefaultComplex
void helicsInputSetDefaultComplex(HelicsInput ipt, double real, double imag, HelicsError *err)
Definition: ValueFederateExport.cpp:1103
helicscpp::Input::Input
Input(const Input &inputs) HELICS_NOTHROW
Definition: Input.hpp:27
helicscpp::Input::getComplex
std::complex< double > getComplex()
Definition: Input.hpp:177
helicscpp::Input::operator=
Input & operator=(const Input &input)
Definition: Input.hpp:29
helicscpp::Input::getDouble
double getDouble()
Definition: Input.hpp:172
HelicsInput
void * HelicsInput
Definition: api-data.h:26
helicscpp::Input::getType
const char * getType() const
Definition: Input.hpp:272
helicscpp::Input::setDefault
void setDefault(const std::string &str)
Definition: Input.hpp:52
helicscpp::Input::baseObject
HelicsInput baseObject() const
Definition: Input.hpp:37
helicscpp::Input::setDefault
void setDefault(const std::vector< double > &data)
Definition: Input.hpp:72
helicscpp::Input::getBoolean
bool getBoolean()
Definition: Input.hpp:166
helicscpp::Input::setTag
void setTag(const std::string &tagname, const std::string &tagvalue)
Definition: Input.hpp:297
helicscpp::Input::getInjectionUnits
const char * getInjectionUnits() const
Definition: Input.hpp:262
helicscpp::Input::isValid
bool isValid() const
Definition: Input.hpp:39
HelicsComplex
Definition: api-data.h:158
helicsInputSetTag
void helicsInputSetTag(HelicsInput inp, const char *tagname, const char *tagvalue, HelicsError *err)
Definition: ValueFederateExport.cpp:1418
helicscpp::Input::getNamedPoint
void getNamedPoint(std::string &name, double *val)
Definition: Input.hpp:151
helicscpp::Input::getComplexVector
void getComplexVector(std::vector< std::complex< double > > &data)
Definition: Input.hpp:217
helicscpp::Input::setDefault
void setDefault(bool val)
Definition: Input.hpp:59
helicsInputGetType
const char * helicsInputGetType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1174
helicscpp::Input::setDefault
void setDefault(const std::vector< std::complex< double > > &data)
Definition: Input.hpp:86
helicsInputAddTarget
void helicsInputAddTarget(HelicsInput ipt, const char *target, HelicsError *err)
Definition: ValueFederateExport.cpp:678
helicscpp::Input::Input
Input(HelicsInput hsub) HELICS_NOTHROW
Definition: Input.hpp:23
helicsInputGetComplexVector
void helicsInputGetComplexVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:952
helicsInputGetStringSize
int helicsInputGetStringSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:909
helicsInputGetDouble
double helicsInputGetDouble(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:800
helicscpp::Input::setDefault
void setDefault(double val)
Definition: Input.hpp:64
helicscpp::Input
Definition: Input.hpp:20
helicscpp::Input::setInfo
void setInfo(const std::string &info)
Definition: Input.hpp:287
helicsInputSetInfo
void helicsInputSetInfo(HelicsInput inp, const char *info, HelicsError *err)
Definition: ValueFederateExport.cpp:1352
helicsInputSetDefaultDouble
void helicsInputSetDefaultDouble(HelicsInput ipt, double val, HelicsError *err)
Definition: ValueFederateExport.cpp:1074
helicsInputGetExtractionUnits
const char * helicsInputGetExtractionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1303
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicscpp::Input::getTag
const char * getTag(const std::string &tagname) const
Definition: Input.hpp:292
helicsSubscriptionGetTarget
const char * helicsSubscriptionGetTarget(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1251
helicscpp::Input::addTarget
void addTarget(const std::string &target)
Definition: Input.hpp:41
helicsInputGetTag
const char * helicsInputGetTag(HelicsInput inp, const char *tagname)
Definition: ValueFederateExport.cpp:1401
helicsInputGetPublicationType
const char * helicsInputGetPublicationType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1192
helicscpp::Input::isUpdated
bool isUpdated() const
Definition: Input.hpp:232
helicscpp::Input::getPublicationType
const char * getPublicationType() const
Definition: Input.hpp:267
helicscpp::Input::getInteger
int64_t getInteger()
Definition: Input.hpp:161
helicsInputSetDefaultBytes
void helicsInputSetDefaultBytes(HelicsInput ipt, const void *data, int inputDataLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1020
helicsInputClearUpdate
void helicsInputClearUpdate(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1577
helicsInputGetInfo
const char * helicsInputGetInfo(HelicsInput inp)
Definition: ValueFederateExport.cpp:1335
helicsInputGetByteCount
int helicsInputGetByteCount(HelicsInput ipt)
Definition: ValueFederateExport.cpp:688
helicscpp::Input::getStringSize
int getStringSize()
Definition: Input.hpp:113
helicsInputGetBoolean
HelicsBool helicsInputGetBoolean(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:782
helicsInputGetComplexObject
HelicsComplex helicsInputGetComplexObject(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:872
helicscpp::Input::getVector
int getVector(double *data, int maxlen)
Definition: Input.hpp:187
helicscpp::Input::getLastUpdateTime
HelicsTime getLastUpdateTime() const
Definition: Input.hpp:238
helicscpp::Input::Input
Input() HELICS_NOTHROW
Definition: Input.hpp:25
helicsInputSetDefaultString
void helicsInputSetDefaultString(HelicsInput ipt, const char *defaultString, HelicsError *err)
Definition: ValueFederateExport.cpp:1040
helicscpp::Input::getComplexVector
int getComplexVector(double *data, int maxlen)
Definition: Input.hpp:205
helicsInputGetInteger
int64_t helicsInputGetInteger(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:767
helicscpp::Input::getTarget
const char * getTarget() const
Definition: Input.hpp:277
helicsInputGetString
void helicsInputGetString(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, HelicsError *err)
Definition: ValueFederateExport.cpp:741
helicsInputGetInjectionUnits
const char * helicsInputGetInjectionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1286
helicsInputIsUpdated
HelicsBool helicsInputIsUpdated(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1549
helicsInputGetNamedPoint
void helicsInputGetNamedPoint(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, double *val, HelicsError *err)
Definition: ValueFederateExport.cpp:979
helicsInputGetOption
int helicsInputGetOption(HelicsInput inp, int option)
Definition: ValueFederateExport.cpp:1467
helicscpp::Input::getString
void getString(std::string &str)
Definition: Input.hpp:137
helicsInputGetVector
void helicsInputGetVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:925
helicscpp::Input::getString
std::string getString()
Definition: Input.hpp:120
helicsInputSetDefaultVector
void helicsInputSetDefaultVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1113
helicscpp
Definition: cpp98/Broker.hpp:18
HelicsBool
int HelicsBool
Definition: api-data.h:112
helicsInputSetDefaultBoolean
void helicsInputSetDefaultBoolean(HelicsInput ipt, HelicsBool val, HelicsError *err)
Definition: ValueFederateExport.cpp:1065