helics  3.5.2
Input.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_INPUT_HPP_
8 #define HELICS_CPP98_INPUT_HPP_
9 #pragma once
10 
11 #include "DataBuffer.hpp"
12 #include "helics/helics.h"
13 #include "helicsExceptions.hpp"
14 
15 #include <complex>
16 #include <string>
17 #include <vector>
18 
19 namespace helicscpp {
21 class Input {
22  public:
24  explicit Input(HelicsInput hsub) HELICS_NOTHROW: inp(hsub) {}
26  Input() HELICS_NOTHROW: inp(HELICS_NULL_POINTER) {}
28  Input(const Input& inputs) HELICS_NOTHROW: inp(inputs.inp) {}
30  Input& operator=(const Input& input)
31  {
32  inp = input.inp;
33  return *this;
34  }
36  operator HelicsInput() const { return inp; }
38  HelicsInput baseObject() const { return inp; }
40  bool isValid() const { return (helicsInputIsValid(inp) == HELICS_TRUE); }
42  void addTarget(const std::string& target)
43  {
44  helicsInputAddTarget(inp, target.c_str(), HELICS_IGNORE_ERROR);
45  }
48  void setDefault(const char* data, int len)
49  {
50  helicsInputSetDefaultBytes(inp, data, len, HELICS_IGNORE_ERROR);
51  }
53  void setDefault(const std::string& str)
54  {
55  helicsInputSetDefaultString(inp, str.c_str(), HELICS_IGNORE_ERROR);
56  }
58  void setDefault(int64_t val) { helicsInputSetDefaultInteger(inp, val, HELICS_IGNORE_ERROR); }
60  void setDefault(bool val)
61  {
62  helicsInputSetDefaultBoolean(inp, val ? HELICS_TRUE : HELICS_FALSE, HELICS_IGNORE_ERROR);
63  }
65  void setDefault(double val) { helicsInputSetDefaultDouble(inp, val, HELICS_IGNORE_ERROR); }
67  void setDefault(const std::complex<double>& cmplx)
68  {
69  helicsInputSetDefaultComplex(inp, cmplx.real(), cmplx.imag(), HELICS_IGNORE_ERROR);
70  }
71 
73  void setDefault(const std::vector<double>& data)
74  {
76  data.data(),
77  static_cast<int>(data.size()),
78  HELICS_IGNORE_ERROR);
79  }
80 
81 #if defined(__GNUC__)
82 # pragma GCC diagnostic push
83 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
84  // std::complex is explicitly allowed to alias like this in the standard
85 #endif
87  void setDefault(const std::vector<std::complex<double> >& data)
88  {
90  reinterpret_cast<const double*>(data.data()),
91  static_cast<int>(data.size()),
92  HELICS_IGNORE_ERROR);
93  }
94 #if defined(__GNUC__)
95 # pragma GCC diagnostic pop
96 #endif
99  int getBytes(std::vector<char>& data)
100  {
101  int size = helicsInputGetByteCount(inp);
102  data.resize(size);
104  inp, data.data(), static_cast<int>(data.size()), &size, HELICS_IGNORE_ERROR);
105  return size;
106  }
108  int getByteCount() { return helicsInputGetByteCount(inp); }
109 
112  {
113  //-1 is for the null character which needs to be counted in C but not in a C++ string
114  return helicsInputGetStringSize(inp) - 1;
115  }
116 
118  std::string getString()
119  {
120  int size = helicsInputGetStringSize(inp);
121  std::string result;
122 
123  result.resize(static_cast<size_t>(size) + 1);
124  // this function results in a null terminated string
125  helicsInputGetString(inp, &result[0], size + 1, &size, HELICS_IGNORE_ERROR);
126  if (!(result.empty()) && (result[static_cast<size_t>(size) - 1] == '\0')) {
127  result.resize(static_cast<size_t>(size) - 1);
128  } else {
129  result.resize(size);
130  }
131  return result;
132  }
133 
135  void getString(std::string& str)
136  {
137  int size = helicsInputGetStringSize(inp);
138  str.resize(static_cast<size_t>(size) + 1);
139  // this function results in a null terminated string
140  helicsInputGetString(inp, &str[0], size + 1, &size, HELICS_IGNORE_ERROR);
141  if (!(str.empty()) && (str[static_cast<size_t>(size) - 1] == '\0')) {
142  str.resize(static_cast<size_t>(size) - 1);
143  } else {
144  str.resize(size);
145  }
146  }
147 
149  void getNamedPoint(std::string& name, double* val)
150  {
151  int size = helicsInputGetStringSize(inp);
152 
153  name.resize(static_cast<size_t>(size) + 1);
154  // this function results in a null terminated string
155  helicsInputGetNamedPoint(inp, &name[0], size + 1, &size, val, HELICS_IGNORE_ERROR);
156  name.resize(size);
157  }
159  int64_t getInteger() { return helicsInputGetInteger(inp, HELICS_IGNORE_ERROR); }
161  bool getBoolean()
162  {
163  HelicsBool val = helicsInputGetBoolean(inp, HELICS_IGNORE_ERROR);
164  return (val == HELICS_TRUE);
165  }
167  double getDouble() { return helicsInputGetDouble(inp, HELICS_IGNORE_ERROR); }
169  std::complex<double> getComplex()
170  {
171  HelicsComplex hc = helicsInputGetComplexObject(inp, HELICS_IGNORE_ERROR);
172  std::complex<double> result(hc.real, hc.imag);
173  return result;
174  }
179  int getVector(double* data, int maxlen)
180  {
181  helicsInputGetVector(inp, data, maxlen, &maxlen, hThrowOnError());
182  // maxlen contains the actual length now
183  return maxlen;
184  }
186  void getVector(std::vector<double>& data)
187  {
188  int actualSize = helicsInputGetVectorSize(inp);
189  data.resize(actualSize);
190  helicsInputGetVector(inp, data.data(), actualSize, HELICS_NULL_POINTER, hThrowOnError());
191  }
192 
197  int getComplexVector(double* data, int maxlen)
198  {
199  helicsInputGetComplexVector(inp, data, maxlen, &maxlen, hThrowOnError());
200  // maxlen contains the actual length now
201  return maxlen;
202  }
203 #if defined(__GNUC__)
204 # pragma GCC diagnostic push
205 # pragma GCC diagnostic ignored "-Wstrict-aliasing"
206  // std::complex is explicitly allowed to alias like this in the standard
207 #endif
209  void getComplexVector(std::vector<std::complex<double> >& data)
210  {
211  int actualSize = helicsInputGetVectorSize(inp);
212  data.resize(actualSize);
214  reinterpret_cast<double*>(data.data()),
215  actualSize,
216  HELICS_NULL_POINTER,
217  hThrowOnError());
218  }
219 #if defined(__GNUC__)
220 # pragma GCC diagnostic pop
221 #endif
224  {
226  }
228  bool isUpdated() const { return (helicsInputIsUpdated(inp) > 0); }
229 
232 
235  // call helicsInputIsUpdated for each inp
236 
239  const char* getName() const { return helicsInputGetName(inp); }
241  const char* getUnits() const { return helicsInputGetExtractionUnits(inp); }
243  const char* getInjectionUnits() const { return helicsInputGetInjectionUnits(inp); }
245  const char* getPublicationType() const { return helicsInputGetPublicationType(inp); }
247  const char* getType() const { return helicsInputGetType(inp); }
249  const char* getTarget() const { return helicsInputGetTarget(inp); }
251  const char* getInfo() const { return helicsInputGetInfo(inp); }
253  void setInfo(const std::string& info)
254  {
255  helicsInputSetInfo(inp, info.c_str(), HELICS_IGNORE_ERROR);
256  }
258  const char* getTag(const std::string& tagname) const
259  {
260  return helicsInputGetTag(inp, tagname.c_str());
261  }
263  void setTag(const std::string& tagname, const std::string& tagvalue)
264  {
265  helicsInputSetTag(inp, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
266  }
267  void setOption(int32_t option, int32_t value = 1)
268  {
269  helicsInputSetOption(inp, option, value, HELICS_IGNORE_ERROR);
270  }
271  int32_t getOption(int32_t option) { return helicsInputGetOption(inp, option); }
272 
273  private:
274  HelicsInput inp;
275 };
276 
277 } // namespace helicscpp
278 #endif
HelicsTime helicsInputLastUpdateTime(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1633
HelicsBool helicsInputIsUpdated(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1622
void helicsInputClearUpdate(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1650
void * HelicsInput
Definition: api-data.h:26
double HelicsTime
Definition: api-data.h:100
int HelicsBool
Definition: api-data.h:112
const HelicsBool HELICS_FALSE
Definition: api-data.h:115
const HelicsBool HELICS_TRUE
Definition: api-data.h:114
Definition: DataBuffer.hpp:18
Definition: Input.hpp:21
void clearUpdate()
Definition: Input.hpp:234
int getVector(double *data, int maxlen)
Definition: Input.hpp:179
DataBuffer getDataBuffer()
Definition: Input.hpp:223
HelicsTime getLastUpdateTime() const
Definition: Input.hpp:231
bool getBoolean()
Definition: Input.hpp:161
const char * getInjectionUnits() const
Definition: Input.hpp:243
void getString(std::string &str)
Definition: Input.hpp:135
bool isValid() const
Definition: Input.hpp:40
const char * getUnits() const
Definition: Input.hpp:241
void setDefault(const std::vector< double > &data)
Definition: Input.hpp:73
void setDefault(const std::string &str)
Definition: Input.hpp:53
Input & operator=(const Input &input)
Definition: Input.hpp:30
int getBytes(std::vector< char > &data)
Definition: Input.hpp:99
void setInfo(const std::string &info)
Definition: Input.hpp:253
void setDefault(const char *data, int len)
Definition: Input.hpp:48
void setDefault(bool val)
Definition: Input.hpp:60
void setTag(const std::string &tagname, const std::string &tagvalue)
Definition: Input.hpp:263
const char * getInfo() const
Definition: Input.hpp:251
int64_t getInteger()
Definition: Input.hpp:159
Input(const Input &inputs) HELICS_NOTHROW
Definition: Input.hpp:28
int getByteCount()
Definition: Input.hpp:108
void getComplexVector(std::vector< std::complex< double > > &data)
Definition: Input.hpp:209
int getStringSize()
Definition: Input.hpp:111
const char * getTarget() const
Definition: Input.hpp:249
void getNamedPoint(std::string &name, double *val)
Definition: Input.hpp:149
std::complex< double > getComplex()
Definition: Input.hpp:169
void setDefault(const std::complex< double > &cmplx)
Definition: Input.hpp:67
int getComplexVector(double *data, int maxlen)
Definition: Input.hpp:197
Input() HELICS_NOTHROW
Definition: Input.hpp:26
void setDefault(const std::vector< std::complex< double > > &data)
Definition: Input.hpp:87
Input(HelicsInput hsub) HELICS_NOTHROW
Definition: Input.hpp:24
const char * getTag(const std::string &tagname) const
Definition: Input.hpp:258
bool isUpdated() const
Definition: Input.hpp:228
void addTarget(const std::string &target)
Definition: Input.hpp:42
void setDefault(int64_t val)
Definition: Input.hpp:58
double getDouble()
Definition: Input.hpp:167
const char * getName() const
Definition: Input.hpp:239
const char * getPublicationType() const
Definition: Input.hpp:245
void setDefault(double val)
Definition: Input.hpp:65
const char * getType() const
Definition: Input.hpp:247
HelicsInput baseObject() const
Definition: Input.hpp:38
std::string getString()
Definition: Input.hpp:118
void getVector(std::vector< double > &data)
Definition: Input.hpp:186
Definition: helicsExceptions.hpp:38
const char * helicsInputGetInfo(HelicsInput inp)
Definition: ValueFederateExport.cpp:1408
const char * helicsInputGetType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1242
void helicsInputSetInfo(HelicsInput inp, const char *info, HelicsError *err)
Definition: ValueFederateExport.cpp:1425
const char * helicsInputGetTag(HelicsInput inp, const char *tagname)
Definition: ValueFederateExport.cpp:1474
void helicsInputSetOption(HelicsInput inp, int option, int value, HelicsError *err)
Definition: ValueFederateExport.cpp:1556
const char * helicsInputGetPublicationType(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1260
int helicsInputGetOption(HelicsInput inp, int option)
Definition: ValueFederateExport.cpp:1540
void helicsInputSetTag(HelicsInput inp, const char *tagname, const char *tagvalue, HelicsError *err)
Definition: ValueFederateExport.cpp:1491
const char * helicsInputGetExtractionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1376
const char * helicsInputGetInjectionUnits(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1359
const char * helicsInputGetTarget(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1319
const char * helicsInputGetName(HelicsInput ipt)
Definition: ValueFederateExport.cpp:1301
void helicsInputSetDefaultBytes(HelicsInput ipt, const void *data, int inputDataLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1088
void helicsInputSetDefaultVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1181
void helicsInputSetDefaultInteger(HelicsInput ipt, int64_t val, HelicsError *err)
Definition: ValueFederateExport.cpp:1124
void helicsInputSetDefaultComplex(HelicsInput ipt, double real, double imag, HelicsError *err)
Definition: ValueFederateExport.cpp:1171
void helicsInputSetDefaultComplexVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition: ValueFederateExport.cpp:1201
void helicsInputSetDefaultDouble(HelicsInput ipt, double val, HelicsError *err)
Definition: ValueFederateExport.cpp:1142
void helicsInputSetDefaultString(HelicsInput ipt, const char *defaultString, HelicsError *err)
Definition: ValueFederateExport.cpp:1108
void helicsInputSetDefaultBoolean(HelicsInput ipt, HelicsBool val, HelicsError *err)
Definition: ValueFederateExport.cpp:1133
void helicsInputGetString(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, HelicsError *err)
Definition: ValueFederateExport.cpp:809
void helicsInputGetNamedPoint(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, double *val, HelicsError *err)
Definition: ValueFederateExport.cpp:1047
int helicsInputGetStringSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:977
void helicsInputGetBytes(HelicsInput ipt, void *data, int maxDataLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:775
void helicsInputGetComplexVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:1020
HelicsBool helicsInputGetBoolean(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:850
HelicsDataBuffer helicsInputGetDataBuffer(HelicsInput inp, HelicsError *err)
Definition: ValueFederateExport.cpp:764
int helicsInputGetVectorSize(HelicsInput ipt)
Definition: ValueFederateExport.cpp:961
int64_t helicsInputGetInteger(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:835
int helicsInputGetByteCount(HelicsInput ipt)
Definition: ValueFederateExport.cpp:745
HelicsComplex helicsInputGetComplexObject(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:940
void helicsInputGetVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition: ValueFederateExport.cpp:993
double helicsInputGetDouble(HelicsInput ipt, HelicsError *err)
Definition: ValueFederateExport.cpp:868
void helicsInputAddTarget(HelicsInput ipt, const char *target, HelicsError *err)
Definition: ValueFederateExport.cpp:735
HelicsBool helicsInputIsValid(HelicsInput ipt)
Definition: ValueFederateExport.cpp:726
Definition: cpp98/Broker.hpp:18
Definition: api-data.h:160