Skip to content

Commit 02e8754

Browse files
committed
declare dependencies by name
1 parent 957cfe4 commit 02e8754

4 files changed

Lines changed: 30 additions & 18 deletions

File tree

export/include/fmu4cpp/fmu_variable.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace fmu4cpp {
4848
std::optional<variability_t> variability_;
4949
std::optional<initial_t> initial_;
5050
std::vector<std::string> annotations_;
51-
std::vector<size_t> dependencies_;
51+
std::vector<std::string> dependencies_;
5252

5353
public:
5454
VariableBase(std::string name, unsigned int vr, size_t index)
@@ -78,7 +78,7 @@ namespace fmu4cpp {
7878
return initial_;
7979
}
8080

81-
[[nodiscard]] std::vector<size_t> getDependencies() const {
81+
[[nodiscard]] std::vector<std::string> getDependencies() const {
8282
if (causality_ != causality_t::OUTPUT) {
8383
throw std::logic_error("Can only declare dependencies for outputs!");
8484
}
@@ -142,7 +142,7 @@ namespace fmu4cpp {
142142
return *static_cast<V *>(this);
143143
}
144144

145-
V &setDependencies(const std::vector<size_t> &dependencies) {
145+
V &setDependencies(const std::vector<std::string> &dependencies) {
146146
for (auto i: dependencies) {
147147
dependencies_.emplace_back(i);
148148
}

export/src/fmu4cpp/fmu_base.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,17 @@ namespace fmu4cpp {
265265
ss << "\t\t<Outputs>\n";
266266
for (const auto &v: unknowns) {
267267
ss << "\t\t\t<Unknown index=\"" << v->index() << "\"";
268-
const auto deps = v->getDependencies();
269-
if (!deps.empty()) {
268+
if (const auto deps = v->getDependencies(); !deps.empty()) {
270269
ss << " dependencies=\"";
271270
for (unsigned i = 0; i < deps.size(); i++) {
272-
ss << deps[i];
271+
const auto &depName = deps[i];
272+
const auto dep = std::find_if(allVars.begin(), allVars.end(), [depName](const auto &v) {
273+
return v->name() == depName;
274+
});
275+
if (dep == allVars.end()) {
276+
throw std::runtime_error("Unknown dependency: " + depName);
277+
}
278+
ss << (*dep)->index();
273279
if (i != deps.size() - 1) {
274280
ss << " ";
275281
}
@@ -428,11 +434,17 @@ namespace fmu4cpp {
428434
if (!unknowns.empty()) {
429435
for (const auto &v: unknowns) {
430436
ss << "\t\t\t<Output valueReference=\"" << v->value_reference() << "\"";
431-
const auto deps = v->getDependencies(); // indices
432-
if (!deps.empty()) {
437+
if (const auto deps = v->getDependencies(); !deps.empty()) {
433438
ss << " dependencies=\"";
434439
for (unsigned i = 0; i < deps.size(); i++) {
435-
ss << deps[i]-1; // valueRef is index -1
440+
const auto &depName = deps[i];
441+
const auto dep = std::find_if(allVars.begin(), allVars.end(), [depName](const auto &v) {
442+
return v->name() == depName;
443+
});
444+
if (dep == allVars.end()) {
445+
throw std::runtime_error("Unknown dependency: " + depName);
446+
}
447+
ss << (*dep)->index() - 1;// valueRef is index -1
436448
if (i != deps.size() - 1) {
437449
ss << " ";
438450
}
@@ -448,7 +460,7 @@ namespace fmu4cpp {
448460
});
449461
if (!initialUnknowns.empty()) {
450462
for (const auto &v: initialUnknowns) {
451-
ss << "\t\t\t<InitialUnknown valueReference=\"" << v->index()-1 << "\"";
463+
ss << "\t\t\t<InitialUnknown valueReference=\"" << v->index() - 1 << "\"";
452464
ss << "/>\n";
453465
}
454466
}

export/tests/identity_test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,25 @@ class Model : public fmu4cpp::fmu_base {
3636
.setCausality(fmu4cpp::causality_t::OUTPUT)
3737
.setVariability(fmu4cpp::variability_t::DISCRETE)
3838
.setInitial(fmu4cpp::initial_t::CALCULATED)
39-
.setDependencies({get_int_variable("integerIn")->index()}));
39+
.setDependencies({"integerIn"}));
4040

4141
register_variable(real("realOut", &real_)
4242
.setCausality(fmu4cpp::causality_t::OUTPUT)
4343
.setVariability(fmu4cpp::variability_t::DISCRETE)
4444
.setInitial(fmu4cpp::initial_t::CALCULATED)
45-
.setDependencies({get_real_variable("realIn")->index()}));
45+
.setDependencies({"realIn"}));
4646

4747
register_variable(boolean("booleanOut", &boolean_)
4848
.setCausality(fmu4cpp::causality_t::OUTPUT)
4949
.setVariability(fmu4cpp::variability_t::DISCRETE)
5050
.setInitial(fmu4cpp::initial_t::CALCULATED)
51-
.setDependencies({get_bool_variable("booleanIn")->index()}));
51+
.setDependencies({"booleanIn"}));
5252

5353
register_variable(string("stringOut", [this] { return string_; })
5454
.setCausality(fmu4cpp::causality_t::OUTPUT)
5555
.setVariability(fmu4cpp::variability_t::DISCRETE)
5656
.setInitial(fmu4cpp::initial_t::CALCULATED)
57-
.setDependencies({get_string_variable("stringIn")->index()}));
57+
.setDependencies({"stringIn"}));
5858

5959
Model::reset();
6060
}

src/model.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,25 @@ class Model : public fmu_base {
3737
.setCausality(causality_t::OUTPUT)
3838
.setVariability(variability_t::DISCRETE)
3939
.setInitial(initial_t::CALCULATED)
40-
.setDependencies({get_int_variable("integerIn")->index()}));
40+
.setDependencies({"integerIn"}));
4141

4242
register_variable(real("realOut", &real_)
4343
.setCausality(causality_t::OUTPUT)
4444
.setVariability(variability_t::DISCRETE)
4545
.setInitial(initial_t::CALCULATED)
46-
.setDependencies({get_real_variable("realIn")->index()}));
46+
.setDependencies({"realIn"}));
4747

4848
register_variable(boolean("booleanOut", &boolean_)
4949
.setCausality(causality_t::OUTPUT)
5050
.setVariability(variability_t::DISCRETE)
5151
.setInitial(initial_t::CALCULATED)
52-
.setDependencies({get_bool_variable("booleanIn")->index()}));
52+
.setDependencies({"booleanIn"}));
5353

5454
register_variable(string("stringOut", &string_)
5555
.setCausality(causality_t::OUTPUT)
5656
.setVariability(variability_t::DISCRETE)
5757
.setInitial(initial_t::CALCULATED)
58-
.setDependencies({get_string_variable("stringIn")->index()}));
58+
.setDependencies({"stringIn"}));
5959

6060
Model::reset();
6161
}

0 commit comments

Comments
 (0)