Skip to content

Commit 432b1bc

Browse files
committed
add optional callback for ptr setter
needed for updating other values when e.g. an input is set during initialization and using ptr access over lambda setter
1 parent 02e8754 commit 432b1bc

4 files changed

Lines changed: 26 additions & 23 deletions

File tree

export/include/fmu4cpp/fmu_base.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,22 @@ namespace fmu4cpp {
228228
virtual ~fmu_base() = default;
229229

230230
protected:
231-
IntVariable integer(const std::string &name, int *ptr);
231+
IntVariable integer(const std::string &name, int *ptr, const std::function<void(int)> &onChange = {});
232232
IntVariable integer(const std::string &name,
233233
const std::function<int()> &getter,
234234
const std::optional<std::function<void(int)>> &setter = std::nullopt);
235235

236-
RealVariable real(const std::string &name, double *ptr);
236+
RealVariable real(const std::string &name, double *ptr, const std::function<void(double)> &onChange = {});
237237
RealVariable real(const std::string &name,
238238
const std::function<double()> &getter,
239239
const std::optional<std::function<void(double)>> &setter = std::nullopt);
240240

241-
BoolVariable boolean(const std::string &name, bool *ptr);
241+
BoolVariable boolean(const std::string &name, bool *ptr, const std::function<void(bool)> &onChange = {});
242242
BoolVariable boolean(const std::string &name,
243243
const std::function<bool()> &getter,
244244
const std::optional<std::function<void(bool)>> &setter);
245245

246-
StringVariable string(const std::string &name, std::string *ptr);
246+
StringVariable string(const std::string &name, std::string *ptr, const std::function<void(std::string)> &onChange = {});
247247
StringVariable string(const std::string &name,
248248
const std::function<std::string()> &getter,
249249
const std::optional<std::function<void(std::string)>> &setter = std::nullopt);

export/include/fmu4cpp/fmu_variable.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ namespace fmu4cpp {
103103
public:
104104
Variable(
105105
const std::string &name,
106-
unsigned int vr, size_t index, T *ptr)
107-
: VariableBase(name, vr, index), access_(std::make_unique<PtrAccess<T>>(ptr)) {}
106+
unsigned int vr, size_t index, T *ptr, const std::function<void(T)>& onChange)
107+
: VariableBase(name, vr, index), access_(std::make_unique<PtrAccess<T>>(ptr, onChange)) {}
108108

109109
Variable(
110110
const std::string &name,
@@ -170,8 +170,8 @@ namespace fmu4cpp {
170170
public:
171171
IntVariable(
172172
const std::string &name,
173-
unsigned int vr, size_t index, int *ptr)
174-
: Variable(name, vr, index, ptr) {}
173+
unsigned int vr, size_t index, int *ptr, std::function<void(int)> onChange)
174+
: Variable(name, vr, index, ptr, onChange) {}
175175

176176
IntVariable(
177177
const std::string &name,
@@ -208,8 +208,8 @@ namespace fmu4cpp {
208208
public:
209209
RealVariable(
210210
const std::string &name,
211-
unsigned int vr, size_t index, double *ptr)
212-
: Variable(name, vr, index, ptr) {
211+
unsigned int vr, size_t index, double *ptr, const std::function<void(double)>& onChange)
212+
: Variable(name, vr, index, ptr, onChange) {
213213

214214
variability_ = variability_t::CONTINUOUS;
215215
}
@@ -252,8 +252,8 @@ namespace fmu4cpp {
252252
public:
253253
BoolVariable(
254254
const std::string &name,
255-
unsigned int vr, size_t index, bool *ptr)
256-
: Variable(name, vr, index, ptr) {}
255+
unsigned int vr, size_t index, bool *ptr, const std::function<void(bool)>& onChange)
256+
: Variable(name, vr, index, ptr, onChange) {}
257257

258258
BoolVariable(
259259
const std::string &name,
@@ -268,8 +268,8 @@ namespace fmu4cpp {
268268
public:
269269
StringVariable(
270270
const std::string &name,
271-
unsigned int vr, size_t index, std::string *ptr)
272-
: Variable(name, vr, index, ptr) {}
271+
unsigned int vr, size_t index, std::string *ptr, const std::function<void(std::string)>& onChange)
272+
: Variable(name, vr, index, ptr, onChange) {}
273273

274274
StringVariable(
275275
const std::string &name,

export/include/fmu4cpp/variable_access.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@ namespace fmu4cpp {
2020
class PtrAccess final : public VariableAccess<T> {
2121

2222
public:
23-
explicit PtrAccess(T *ptr) : ptr_(ptr) {}
23+
explicit PtrAccess(T *ptr, const std::function<void(T)>& onChange)
24+
: ptr_(ptr), onChange_(onChange) {}
2425

2526
T get() override {
2627
return *ptr_;
2728
}
2829

2930
void set(T value) override {
3031
*ptr_ = value;
32+
if (onChange_) onChange_(value);
3133
}
3234

3335
private:
3436
T *ptr_;
37+
std::function<void(T)> onChange_;
3538
};
3639

3740
template<typename T>

export/src/fmu4cpp/fmu_base.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,32 +66,32 @@ namespace fmu4cpp {
6666
return indentedString;
6767
}
6868

69-
IntVariable fmu_base::integer(const std::string &name, int *ptr) {
70-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr};
69+
IntVariable fmu_base::integer(const std::string &name, int *ptr, const std::function<void(int)>& onChange) {
70+
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
7171
}
7272

7373
IntVariable fmu_base::integer(const std::string &name, const std::function<int()> &getter, const std::optional<std::function<void(int)>> &setter) {
7474
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
7575
}
7676

77-
RealVariable fmu_base::real(const std::string &name, double *ptr) {
78-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr};
77+
RealVariable fmu_base::real(const std::string &name, double *ptr, const std::function<void(double)>& onChange) {
78+
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
7979
}
8080

8181
RealVariable fmu_base::real(const std::string &name, const std::function<double()> &getter, const std::optional<std::function<void(double)>> &setter) {
8282
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
8383
}
8484

85-
BoolVariable fmu_base::boolean(const std::string &name, bool *ptr) {
86-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr};
85+
BoolVariable fmu_base::boolean(const std::string &name, bool *ptr, const std::function<void(bool)>& onChange) {
86+
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
8787
}
8888

8989
BoolVariable fmu_base::boolean(const std::string &name, const std::function<bool()> &getter, const std::optional<std::function<void(bool)>> &setter) {
9090
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, getter, setter};
9191
}
9292

93-
StringVariable fmu_base::string(const std::string &name, std::string *ptr) {
94-
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr};
93+
StringVariable fmu_base::string(const std::string &name, std::string *ptr, const std::function<void(std::string)>& onChange) {
94+
return {name, static_cast<unsigned int>(numVariables_), ++numVariables_, ptr, onChange};
9595
}
9696

9797
StringVariable fmu_base::string(const std::string &name, const std::function<std::string()> &getter, const std::optional<std::function<void(std::string)>> &setter) {

0 commit comments

Comments
 (0)