helics 3.7.0
Loading...
Searching...
No Matches
Input.hpp
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-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
19namespace helicscpp {
21class 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 HELICS_NODISCARD HelicsInput baseObject() const { return inp; }
40 HELICS_NODISCARD 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 HELICS_NODISCARD 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 HELICS_NODISCARD int getByteCount() { return helicsInputGetByteCount(inp); }
109
111 HELICS_NODISCARD int getStringSize()
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 HELICS_NODISCARD 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 HELICS_NODISCARD int64_t getInteger()
160 {
161 return helicsInputGetInteger(inp, HELICS_IGNORE_ERROR);
162 }
164 HELICS_NODISCARD bool getBoolean()
165 {
166 HelicsBool val = helicsInputGetBoolean(inp, HELICS_IGNORE_ERROR);
167 return (val == HELICS_TRUE);
168 }
170 HELICS_NODISCARD double getDouble() { return helicsInputGetDouble(inp, HELICS_IGNORE_ERROR); }
172 std::complex<double> getComplex()
173 {
174 HelicsComplex hc = helicsInputGetComplexObject(inp, HELICS_IGNORE_ERROR);
175 std::complex<double> result(hc.real, hc.imag);
176 return result;
177 }
182 int getVector(double* data, int maxlen)
183 {
184 helicsInputGetVector(inp, data, maxlen, &maxlen, hThrowOnError());
185 // maxlen contains the actual length now
186 return maxlen;
187 }
189 void getVector(std::vector<double>& data)
190 {
191 int actualSize = helicsInputGetVectorSize(inp);
192 data.resize(actualSize);
193 helicsInputGetVector(inp, data.data(), actualSize, HELICS_NULL_POINTER, hThrowOnError());
194 }
195
200 int getComplexVector(double* data, int maxlen)
201 {
202 helicsInputGetComplexVector(inp, data, maxlen, &maxlen, hThrowOnError());
203 // maxlen contains the actual length now
204 return maxlen;
205 }
206#if defined(__GNUC__)
207# pragma GCC diagnostic push
208# pragma GCC diagnostic ignored "-Wstrict-aliasing"
209 // std::complex is explicitly allowed to alias like this in the standard
210#endif
212 void getComplexVector(std::vector<std::complex<double> >& data)
213 {
214 int actualSize = helicsInputGetVectorSize(inp);
215 data.resize(actualSize);
217 reinterpret_cast<double*>(data.data()),
218 actualSize,
219 HELICS_NULL_POINTER,
220 hThrowOnError());
221 }
222#if defined(__GNUC__)
223# pragma GCC diagnostic pop
224#endif
226 HELICS_NODISCARD DataBuffer getDataBuffer()
227 {
229 }
231 HELICS_NODISCARD bool isUpdated() const { return (helicsInputIsUpdated(inp) > 0); }
232
234 HELICS_NODISCARD HelicsTime getLastUpdateTime() const { return helicsInputLastUpdateTime(inp); }
235
238 // call helicsInputIsUpdated for each inp
239
242 HELICS_NODISCARD const char* getName() const { return helicsInputGetName(inp); }
244 HELICS_NODISCARD const char* getUnits() const { return helicsInputGetExtractionUnits(inp); }
246 HELICS_NODISCARD const char* getInjectionUnits() const
247 {
249 }
251 HELICS_NODISCARD const char* getPublicationType() const
252 {
254 }
256 HELICS_NODISCARD const char* getType() const { return helicsInputGetType(inp); }
258 HELICS_NODISCARD const char* getTarget() const { return helicsInputGetTarget(inp); }
260 HELICS_NODISCARD const char* getInfo() const { return helicsInputGetInfo(inp); }
262 void setInfo(const std::string& info)
263 {
264 helicsInputSetInfo(inp, info.c_str(), HELICS_IGNORE_ERROR);
265 }
267 HELICS_NODISCARD const char* getTag(const std::string& tagname) const
268 {
269 return helicsInputGetTag(inp, tagname.c_str());
270 }
272 void setTag(const std::string& tagname, const std::string& tagvalue)
273 {
274 helicsInputSetTag(inp, tagname.c_str(), tagvalue.c_str(), HELICS_IGNORE_ERROR);
275 }
276 void setOption(int32_t option, int32_t value = 1)
277 {
278 helicsInputSetOption(inp, option, value, HELICS_IGNORE_ERROR);
279 }
280 HELICS_NODISCARD int32_t getOption(int32_t option) { return helicsInputGetOption(inp, option); }
281
282 private:
283 HelicsInput inp;
284};
285
286} // namespace helicscpp
287#endif
HelicsTime helicsInputLastUpdateTime(HelicsInput ipt)
Definition ValueFederateExport.cpp:1637
HelicsBool helicsInputIsUpdated(HelicsInput ipt)
Definition ValueFederateExport.cpp:1626
void helicsInputClearUpdate(HelicsInput ipt)
Definition ValueFederateExport.cpp:1654
void * HelicsInput
Definition api-data.h:26
double HelicsTime
Definition api-data.h:106
int HelicsBool
Definition api-data.h:120
const HelicsBool HELICS_FALSE
Definition api-data.h:123
const HelicsBool HELICS_TRUE
Definition api-data.h:122
Definition DataBuffer.hpp:18
Definition Input.hpp:21
void clearUpdate()
Definition Input.hpp:237
int getVector(double *data, int maxlen)
Definition Input.hpp:182
HELICS_NODISCARD int getStringSize()
Definition Input.hpp:111
void getString(std::string &str)
Definition Input.hpp:135
HELICS_NODISCARD const char * getName() const
Definition Input.hpp:242
void setDefault(const std::vector< double > &data)
Definition Input.hpp:73
void setDefault(const std::string &str)
Definition Input.hpp:53
HELICS_NODISCARD const char * getInjectionUnits() const
Definition Input.hpp:246
void setInfo(const std::string &info)
Definition Input.hpp:262
HELICS_NODISCARD const char * getTarget() const
Definition Input.hpp:258
HELICS_NODISCARD std::string getString()
Definition Input.hpp:118
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:272
HELICS_NODISCARD const char * getTag(const std::string &tagname) const
Definition Input.hpp:267
Input(const Input &inputs) HELICS_NOTHROW
Definition Input.hpp:28
void getComplexVector(std::vector< std::complex< double > > &data)
Definition Input.hpp:212
void getNamedPoint(std::string &name, double *val)
Definition Input.hpp:149
HELICS_NODISCARD bool isUpdated() const
Definition Input.hpp:231
void setDefault(const std::complex< double > &cmplx)
Definition Input.hpp:67
HELICS_NODISCARD double getDouble()
Definition Input.hpp:170
HELICS_NODISCARD const char * getPublicationType() const
Definition Input.hpp:251
HELICS_NODISCARD const char * getInfo() const
Definition Input.hpp:260
int getComplexVector(double *data, int maxlen)
Definition Input.hpp:200
HELICS_NODISCARD HelicsInput baseObject() const
Definition Input.hpp:38
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
Input & operator=(const Input &input)
Definition Input.hpp:30
void addTarget(const std::string &target)
Definition Input.hpp:42
void setDefault(int64_t val)
Definition Input.hpp:58
HELICS_NODISCARD bool getBoolean()
Definition Input.hpp:164
HELICS_NODISCARD const char * getType() const
Definition Input.hpp:256
void setDefault(double val)
Definition Input.hpp:65
HELICS_NODISCARD int getBytes(std::vector< char > &data)
Definition Input.hpp:99
HELICS_NODISCARD HelicsTime getLastUpdateTime() const
Definition Input.hpp:234
HELICS_NODISCARD DataBuffer getDataBuffer()
Definition Input.hpp:226
HELICS_NODISCARD bool isValid() const
Definition Input.hpp:40
HELICS_NODISCARD const char * getUnits() const
Definition Input.hpp:244
HELICS_NODISCARD int getByteCount()
Definition Input.hpp:108
HELICS_NODISCARD int64_t getInteger()
Definition Input.hpp:159
void getVector(std::vector< double > &data)
Definition Input.hpp:189
std::complex< double > getComplex()
Definition Input.hpp:172
Definition helicsExceptions.hpp:38
const char * helicsInputGetInjectionUnits(HelicsInput ipt)
Definition ValueFederateExport.cpp:1363
const char * helicsInputGetExtractionUnits(HelicsInput ipt)
Definition ValueFederateExport.cpp:1380
void helicsInputSetInfo(HelicsInput inp, const char *info, HelicsError *err)
Definition ValueFederateExport.cpp:1429
const char * helicsInputGetTarget(HelicsInput ipt)
Definition ValueFederateExport.cpp:1323
void helicsInputSetOption(HelicsInput inp, int option, int value, HelicsError *err)
Definition ValueFederateExport.cpp:1560
const char * helicsInputGetName(HelicsInput ipt)
Definition ValueFederateExport.cpp:1305
const char * helicsInputGetInfo(HelicsInput inp)
Definition ValueFederateExport.cpp:1412
const char * helicsInputGetPublicationType(HelicsInput ipt)
Definition ValueFederateExport.cpp:1264
int helicsInputGetOption(HelicsInput inp, int option)
Definition ValueFederateExport.cpp:1544
void helicsInputSetTag(HelicsInput inp, const char *tagname, const char *tagvalue, HelicsError *err)
Definition ValueFederateExport.cpp:1495
const char * helicsInputGetTag(HelicsInput inp, const char *tagname)
Definition ValueFederateExport.cpp:1478
const char * helicsInputGetType(HelicsInput ipt)
Definition ValueFederateExport.cpp:1246
void helicsInputSetDefaultBytes(HelicsInput ipt, const void *data, int inputDataLength, HelicsError *err)
Definition ValueFederateExport.cpp:1092
void helicsInputSetDefaultVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition ValueFederateExport.cpp:1185
void helicsInputSetDefaultInteger(HelicsInput ipt, int64_t val, HelicsError *err)
Definition ValueFederateExport.cpp:1128
void helicsInputSetDefaultComplex(HelicsInput ipt, double real, double imag, HelicsError *err)
Definition ValueFederateExport.cpp:1175
void helicsInputSetDefaultComplexVector(HelicsInput ipt, const double *vectorInput, int vectorLength, HelicsError *err)
Definition ValueFederateExport.cpp:1205
void helicsInputSetDefaultDouble(HelicsInput ipt, double val, HelicsError *err)
Definition ValueFederateExport.cpp:1146
void helicsInputSetDefaultString(HelicsInput ipt, const char *defaultString, HelicsError *err)
Definition ValueFederateExport.cpp:1112
void helicsInputSetDefaultBoolean(HelicsInput ipt, HelicsBool val, HelicsError *err)
Definition ValueFederateExport.cpp:1137
void helicsInputGetString(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, HelicsError *err)
Definition ValueFederateExport.cpp:813
void helicsInputGetNamedPoint(HelicsInput ipt, char *outputString, int maxStringLength, int *actualLength, double *val, HelicsError *err)
Definition ValueFederateExport.cpp:1051
int helicsInputGetStringSize(HelicsInput ipt)
Definition ValueFederateExport.cpp:981
void helicsInputGetBytes(HelicsInput ipt, void *data, int maxDataLength, int *actualSize, HelicsError *err)
Definition ValueFederateExport.cpp:779
void helicsInputGetComplexVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition ValueFederateExport.cpp:1024
HelicsBool helicsInputGetBoolean(HelicsInput ipt, HelicsError *err)
Definition ValueFederateExport.cpp:854
HelicsDataBuffer helicsInputGetDataBuffer(HelicsInput inp, HelicsError *err)
Definition ValueFederateExport.cpp:768
int helicsInputGetVectorSize(HelicsInput ipt)
Definition ValueFederateExport.cpp:965
int64_t helicsInputGetInteger(HelicsInput ipt, HelicsError *err)
Definition ValueFederateExport.cpp:839
int helicsInputGetByteCount(HelicsInput ipt)
Definition ValueFederateExport.cpp:749
HelicsComplex helicsInputGetComplexObject(HelicsInput ipt, HelicsError *err)
Definition ValueFederateExport.cpp:944
void helicsInputGetVector(HelicsInput ipt, double data[], int maxLength, int *actualSize, HelicsError *err)
Definition ValueFederateExport.cpp:997
double helicsInputGetDouble(HelicsInput ipt, HelicsError *err)
Definition ValueFederateExport.cpp:872
void helicsInputAddTarget(HelicsInput ipt, const char *target, HelicsError *err)
Definition ValueFederateExport.cpp:739
HelicsBool helicsInputIsValid(HelicsInput ipt)
Definition ValueFederateExport.cpp:730
Definition cpp98/Broker.hpp:18
Definition api-data.h:168