helics  3.0.1
Input.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_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  }
107  int getByteCount() { return helicsInputGetByteCount(inp); }
108 
111  {
112  //-1 is for the null character which needs to be counted in C but not in a C++ string
113  return helicsInputGetStringSize(inp) - 1;
114  }
115 
117  std::string getString()
118  {
119  int size = helicsInputGetStringSize(inp);
120  std::string result;
121 
122  result.resize(static_cast<size_t>(size) + 1);
123  // this function results in a null terminated string
124  helicsInputGetString(inp, &result[0], size + 1, &size, HELICS_IGNORE_ERROR);
125  if (!(result.empty()) && (result[static_cast<size_t>(size) - 1] == '\0')) {
126  result.resize(static_cast<size_t>(size) - 1);
127  } else {
128  result.resize(size);
129  }
130  return result;
131  }
132 
134  void getString(std::string& str)
135  {
136  int size = helicsInputGetStringSize(inp);
137  str.resize(static_cast<size_t>(size) + 1);
138  // this function results in a null terminated string
139  helicsInputGetString(inp, &str[0], size + 1, &size, HELICS_IGNORE_ERROR);
140  if (!(str.empty()) && (str[static_cast<size_t>(size) - 1] == '\0')) {
141  str.resize(static_cast<size_t>(size) - 1);
142  } else {
143  str.resize(size);
144  }
145  }
146 
148  void getNamedPoint(std::string& name, double* val)
149  {
150  int size = helicsInputGetStringSize(inp);
151 
152  name.resize(static_cast<size_t>(size) + 1);
153  // this function results in a null terminated string
154  helicsInputGetNamedPoint(inp, &name[0], size + 1, &size, val, HELICS_IGNORE_ERROR);
155  name.resize(size);
156  }
158  int64_t getInteger() { return helicsInputGetInteger(inp, HELICS_IGNORE_ERROR); }
160  bool getBoolean()
161  {
162  HelicsBool val = helicsInputGetBoolean(inp, HELICS_IGNORE_ERROR);
163  return (val == HELICS_TRUE);
164  }
166  double getDouble() { return helicsInputGetDouble(inp, HELICS_IGNORE_ERROR); }
168  std::complex<double> getComplex()
169  {
170  HelicsComplex hc = helicsInputGetComplexObject(inp, HELICS_IGNORE_ERROR);
171  std::complex<double> result(hc.real, hc.imag);
172  return result;
173  }
178  int getVector(double* data, int maxlen)
179  {
180  helicsInputGetVector(inp, data, maxlen, &maxlen, hThrowOnError());
181  // maxlen contains the actual length now
182  return maxlen;
183  }
185  void getVector(std::vector<double>& data)
186  {
187  int actualSize = helicsInputGetVectorSize(inp);
188  data.resize(actualSize);
189  helicsInputGetVector(inp, data.data(), actualSize, HELICS_NULL_POINTER, hThrowOnError());
190  }
191 
196  int getComplexVector(double* data, int maxlen)
197  {
198  helicsInputGetComplexVector(inp, data, maxlen, &maxlen, hThrowOnError());
199  // maxlen contains the actual length now
200  return maxlen;
201  }
202 #if defined(__GNUC__)
203 # pragma GCC diagnostic push
204 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
205  // std::complex is explicitly allowed to alias like this in the standard
206 #endif
207 
208  void getComplexVector(std::vector<std::complex<double> >& data)
209  {
210  int actualSize = helicsInputGetVectorSize(inp);
211  data.resize(actualSize);
213  reinterpret_cast<double*>(data.data()),
214  actualSize,
215  HELICS_NULL_POINTER,
216  hThrowOnError());
217  }
218 #if defined(__GNUC__)
219 # pragma GCC diagnostic pop
220 #endif
221 
223  bool isUpdated() const { return (helicsInputIsUpdated(inp) > 0); }
224 
227 
230  // call helicsInputIsUpdated for each inp
231 
234  const char* getName() const { return helicsInputGetName(inp); }
236  const char* getUnits() const { return helicsInputGetExtractionUnits(inp); }
238  const char* getInjectionUnits() const { return helicsInputGetInjectionUnits(inp); }
240  const char* getPublicationType() const { return helicsInputGetPublicationType(inp); }
242  const char* getType() const { return helicsInputGetType(inp); }
244  const char* getTarget() const { return helicsSubscriptionGetTarget(inp); }
246  const char* getInfo() const { return helicsInputGetInfo(inp); }
248  void setInfo(const std::string& info)
249  {
250  helicsInputSetInfo(inp, info.c_str(), HELICS_IGNORE_ERROR);
251  }
253  const char* getTag(const std::string& tagname) const
254  {
255  return helicsInputGetTag(inp, tagname.c_str());
256  }
258  void setTag(const std::string& tagname, const std::string& tagvalue)
259  {
260  helicsInputSetTag(inp, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
261  }
262  void setOption(int32_t option, int32_t value = 1)
263  {
264  helicsInputSetOption(inp, option, value, HELICS_IGNORE_ERROR);
265  }
266  int32_t getOption(int32_t option) { return helicsInputGetOption(inp, option); }
267 
268  private:
269  HelicsInput inp;
270 };
271 
272 } // namespace helicscpp
273 #endif
helicsInputGetVectorSize
int helicsInputGetVectorSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:888
helicscpp::Input::setDefault
void setDefault(const char *data, int len)
Definition: Input.hpp:47
HelicsTime
double HelicsTime
Definition: api-data.h:90
helicscpp::Input::clearUpdate
void clearUpdate()
Definition: Input.hpp:229
helicsInputLastUpdateTime
HelicsTime helicsInputLastUpdateTime(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1554
helicscpp::Input::getBytes
int getBytes(std::vector< char > &data)
Definition: Input.hpp:98
HELICS_FALSE
const HelicsBool HELICS_FALSE
Definition: api-data.h:105
helicscpp::Input::getUnits
const char * getUnits() const
Definition: Input.hpp:236
helicsInputSetOption
void helicsInputSetOption(HelicsInput inp, int option, int value, HelicsError *err)
Definition: ValueFederateExport.cpp:1477
HELICS_TRUE
const HelicsBool HELICS_TRUE
Definition: api-data.h:104
helicscpp::Input::getByteCount
int getByteCount()
Definition: Input.hpp:107
helicscpp::Input::getInfo
const char * getInfo() const
Definition: Input.hpp:246
helicsInputGetName
const char * helicsInputGetName(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1227
helicsInputGetBytes
void helicsInputGetBytes(HelicsInput ipt, void *data, int maxDataLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:702
helicsInputSetDefaultComplexVector
void helicsInputSetDefaultComplexVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1128
helicscpp::Input::getName
const char * getName() const
Definition: Input.hpp:234
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:185
helicsInputIsValid
HelicsBool helicsInputIsValid(HelicsInput ipt)
Definition: ValueFederateExport.cpp:664
helicsInputSetDefaultInteger
void helicsInputSetDefaultInteger(HelicsInput ipt, int64_t val, HelicsError *err)
Definition: ValueFederateExport.cpp:1051
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:1098
helicscpp::Input::Input
Input(const Input &inputs) HELICS_NOTHROW
Definition: Input.hpp:27
helicscpp::Input::getComplex
std::complex< double > getComplex()
Definition: Input.hpp:168
helicscpp::Input::operator=
Input & operator=(const Input &input)
Definition: Input.hpp:29
helicscpp::Input::getDouble
double getDouble()
Definition: Input.hpp:166
HelicsInput
void * HelicsInput
Definition: api-data.h:26
helicscpp::Input::getType
const char * getType() const
Definition: Input.hpp:242
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:160
helicscpp::Input::setTag
void setTag(const std::string &tagname, const std::string &tagvalue)
Definition: Input.hpp:258
helicscpp::Input::getInjectionUnits
const char * getInjectionUnits() const
Definition: Input.hpp:238
helicscpp::Input::isValid
bool isValid() const
Definition: Input.hpp:39
HelicsComplex
Definition: api-data.h:147
helicsInputSetTag
void helicsInputSetTag(HelicsInput inp, const char *tagname, const char *tagvalue, HelicsError *err)
Definition: ValueFederateExport.cpp:1412
helicscpp::Input::getNamedPoint
void getNamedPoint(std::string &name, double *val)
Definition: Input.hpp:148
helicscpp::Input::getComplexVector
void getComplexVector(std::vector< std::complex< double > > &data)
Definition: Input.hpp:208
helicscpp::Input::setDefault
void setDefault(bool val)
Definition: Input.hpp:59
helicsInputGetType
const char * helicsInputGetType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1168
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:673
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:947
helicsInputGetStringSize
int helicsInputGetStringSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:904
helicsInputGetDouble
double helicsInputGetDouble(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:795
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:248
helicsInputSetInfo
void helicsInputSetInfo(HelicsInput inp, const char *info, HelicsError *err)
Definition: ValueFederateExport.cpp:1346
helicsInputSetDefaultDouble
void helicsInputSetDefaultDouble(HelicsInput ipt, double val, HelicsError *err)
Definition: ValueFederateExport.cpp:1069
helicsInputGetExtractionUnits
const char * helicsInputGetExtractionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1297
helicscpp::hThrowOnError
Definition: helicsExceptions.hpp:38
helicscpp::Input::getTag
const char * getTag(const std::string &tagname) const
Definition: Input.hpp:253
helicsSubscriptionGetTarget
const char * helicsSubscriptionGetTarget(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1245
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:1395
helicsInputGetPublicationType
const char * helicsInputGetPublicationType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1186
helicscpp::Input::isUpdated
bool isUpdated() const
Definition: Input.hpp:223
helicscpp::Input::getPublicationType
const char * getPublicationType() const
Definition: Input.hpp:240
helicscpp::Input::getInteger
int64_t getInteger()
Definition: Input.hpp:158
helicsInputSetDefaultBytes
void helicsInputSetDefaultBytes(HelicsInput ipt, const void *data, int inputDataLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1015
helicsInputClearUpdate
void helicsInputClearUpdate(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1571
helicsInputGetInfo
const char * helicsInputGetInfo(HelicsInput inp)
Definition: ValueFederateExport.cpp:1329
helicsInputGetByteCount
int helicsInputGetByteCount(HelicsInput ipt)
Definition: ValueFederateExport.cpp:683
helicscpp::Input::getStringSize
int getStringSize()
Definition: Input.hpp:110
helicsInputGetBoolean
HelicsBool helicsInputGetBoolean(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:777
helicsInputGetComplexObject
HelicsComplex helicsInputGetComplexObject(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:867
helicscpp::Input::getVector
int getVector(double *data, int maxlen)
Definition: Input.hpp:178
helicscpp::Input::getLastUpdateTime
HelicsTime getLastUpdateTime() const
Definition: Input.hpp:226
helicscpp::Input::Input
Input() HELICS_NOTHROW
Definition: Input.hpp:25
helicscpp::Input::getComplexVector
int getComplexVector(double *data, int maxlen)
Definition: Input.hpp:196
helicsInputGetInteger
int64_t helicsInputGetInteger(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:762
helicscpp::Input::getTarget
const char * getTarget() const
Definition: Input.hpp:244
helicsInputGetString
void helicsInputGetString(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, HelicsError *err)
Definition: ValueFederateExport.cpp:736
helicsInputGetInjectionUnits
const char * helicsInputGetInjectionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1280
helicsInputIsUpdated
HelicsBool helicsInputIsUpdated(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1543
helicsInputGetNamedPoint
void helicsInputGetNamedPoint(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, double *val, HelicsError *err)
Definition: ValueFederateExport.cpp:974
helicsInputGetOption
int helicsInputGetOption(HelicsInput inp, int option)
Definition: ValueFederateExport.cpp:1461
helicscpp::Input::getString
void getString(std::string &str)
Definition: Input.hpp:134
helicsInputGetVector
void helicsInputGetVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:920
helicscpp::Input::getString
std::string getString()
Definition: Input.hpp:117
helicsInputSetDefaultVector
void helicsInputSetDefaultVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1108
helicsInputSetDefaultString
void helicsInputSetDefaultString(HelicsInput ipt, const char *str, HelicsError *err)
Definition: ValueFederateExport.cpp:1035
helicscpp
Definition: cpp98/Broker.hpp:18
HelicsBool
int HelicsBool
Definition: api-data.h:102
helicsInputSetDefaultBoolean
void helicsInputSetDefaultBoolean(HelicsInput ipt, HelicsBool val, HelicsError *err)
Definition: ValueFederateExport.cpp:1060