Skip to content

Commit 7e23606

Browse files
committed
wip binary
1 parent 61877ad commit 7e23606

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

export/include/fmu4cpp/fmu_base.hpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,20 @@ namespace fmu4cpp {
196196
}
197197
}
198198

199+
void set_binary(const unsigned int vr[], size_t nvr, const uint8_t *value[], const size_t size[]) {
200+
#ifdef FMI2
201+
static_assert("set_binary not available for FMI2");
202+
#endif
203+
204+
for (unsigned i = 0; i < nvr; i++) {
205+
const auto ref = vr[i];
206+
const auto idx = vrToBinaryIndices_.at(ref);
207+
const uint8_t *ptr = value[i];
208+
const size_t len = size[i];
209+
binary_[idx].set(std::string(reinterpret_cast<const char*>(ptr), len));
210+
}
211+
}
212+
199213
[[nodiscard]] std::string guid() const;
200214

201215
[[nodiscard]] std::string make_description() const;
@@ -246,10 +260,17 @@ namespace fmu4cpp {
246260
const std::function<std::string()> &getter,
247261
const std::optional<std::function<void(std::string)>> &setter = std::nullopt);
248262

263+
BinaryVariable binary(const std::string &name, std::string *ptr, const std::function<void(std::string)> &onChange = {});
264+
BinaryVariable binary(const std::string &name,
265+
const std::function<std::string()> &getter,
266+
const std::optional<std::function<void(std::string)>> &setter = std::nullopt);
267+
249268
void register_variable(IntVariable v);
250269
void register_variable(RealVariable v);
251270
void register_variable(BoolVariable v);
252271
void register_variable(StringVariable v);
272+
void register_variable(BinaryVariable v);
273+
253274

254275
virtual void enter_initialisation_mode();
255276
virtual bool do_step(double dt) = 0;
@@ -283,6 +304,11 @@ namespace fmu4cpp {
283304
std::vector<StringVariable> strings_;
284305
std::vector<std::string> stringBuffer_;
285306
std::unordered_map<unsigned int, size_t> vrToStringIndices_;
307+
308+
std::vector<StringVariable> binary_;
309+
std::vector<std::string> binaryBuffer_;
310+
std::unordered_map<unsigned int, size_t> vrToBinaryIndices_;
311+
286312
};
287313

288314

export/include/fmu4cpp/fmu_variable.hpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ namespace fmu4cpp {
263263
: Variable(name, vr, index, getter, setter) {}
264264
};
265265

266-
class StringVariable final : public Variable<std::string, StringVariable> {
266+
class StringVariable : public Variable<std::string, StringVariable> {
267267

268268
public:
269269
StringVariable(
@@ -279,6 +279,22 @@ namespace fmu4cpp {
279279
: Variable(name, vr, index, getter, setter) {}
280280
};
281281

282+
class BinaryVariable : public Variable<std::string, BinaryVariable> {
283+
284+
public:
285+
BinaryVariable(
286+
const std::string &name,
287+
unsigned int vr, size_t index, std::string *ptr, const std::function<void(std::string)> &onChange)
288+
: Variable(name, vr, index, ptr, onChange) {}
289+
290+
BinaryVariable(
291+
const std::string &name,
292+
unsigned int vr, size_t index,
293+
const std::function<std::string()> &getter,
294+
const std::optional<std::function<void(std::string)>> &setter)
295+
: Variable(name, vr, index, getter, setter) {}
296+
};
297+
282298
bool requires_start(const VariableBase &v);
283299

284300
}// namespace fmu4cpp

export/src/fmu4cpp/fmu_base.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ namespace fmu4cpp {
8888
vrToStringIndices_.emplace(v.value_reference(), strings_.size() - 1);
8989
}
9090

91+
void fmu_base::register_variable(BinaryVariable v) {
92+
binary_.emplace_back(std::move(v));
93+
vrToBinaryIndices_.emplace(v.value_reference(), binary_.size() - 1);
94+
}
95+
9196
[[maybe_unused]] std::string fmu_base::guid() const {
9297
const model_info info = get_model_info();
9398
const std::vector content{

0 commit comments

Comments
 (0)