23 #include <deps/sbg_graph/deps_graph.hpp>
28 struct QSSModelConfig {
30 SB::Deps::Graph
graph;
33 struct DefAlgDepsUse {
38 range = var_dep.mapF().wholeDom();
40 offset = var_dep.eqOffset();
45 DefAlgDepsUse(Equation e, SB::PWLMap pwl_def_map, Expression use_exp, SB::Deps::LMapExp use_map_exp, SB::Deps::LMapExp def_map_exp,
46 int off,
bool rec =
false)
50 range = pwl_def_map.wholeDom();
81 if (lhs.eq.id() != rhs.eq.id()) {
82 if (lhs.use_map.constantExp() && rhs.use_map.constantExp()) {
83 return lhs.eq.id() < rhs.eq.id();
85 if (lhs.use_map.constantExp() && !rhs.use_map.constantExp()) {
86 return lhs.use_map.constants() < rhs.use_map.appliedInitValues();
88 if (!lhs.use_map.constantExp() && rhs.use_map.constantExp()) {
89 return lhs.use_map.appliedInitValues() < rhs.use_map.constants();
91 if (!lhs.use_map.constantExp() && !rhs.use_map.constantExp()) {
92 return lhs.use_map.appliedInitValues() < rhs.use_map.appliedInitValues();
97 return lhs.use_map < rhs.use_map;
117 DepData(
int id_exp, SB::Deps::VariableDep var_dep_exp,
bool from_alg_exp) :
id(id_exp),
var_dep(var_dep_exp),
from_alg(from_alg_exp) {}
125 typedef std::map<std::string, DepsData>
DepsMap;
127 string addAlgDeps(
Equation eq, SB::Deps::LMapExp eq_use, std::map<int, AlgDeps> der_deps, std::map<int, AlgDeps> alg_deps,
128 PrintedDeps& printed_deps,
bool comes_from_rec =
false);
138 template <
typename N>
142 const bool SCALAR_EXP = dep_data.
var_dep.nMap().constantExp();
147 if (variable.
isArray() && path_recursive_deps) {
148 return Range(variable);
156 Index use_idx(use_exp);
157 std::vector<std::string> var_names = (use_idx.isConstant() && node.range()) ? node.range()->getIndexes() : use_idx.variables();
160 if (dep_data.
var_dep.equations().size() == 1 && dep_data.
var_dep.variables().size() > 1) {
162 }
else if (dep_data.
var_dep.equations().size() > 1 && dep_data.
var_dep.variables().size() == 1) {
167 return Range(dep_data.
var_dep.equations(), dep_data.
var_dep.eqOffset(), use_idx.variables(), node.range());
171 return Range(dep_data.
var_dep.variables(), dep_data.
var_dep.varOffset(), var_names);
185 bool findDep(
DepsMap deps, DepData dep_data,
bool multiple_nodes =
false);