22 #include <boost/algorithm/string/trim.hpp>
25 #include <ast/parser/parse.hpp>
26 #include <deps/builders/eq_graph_builder.hpp>
27 #include <deps/sbg_graph/build_from_exps.hpp>
28 #include <deps/sb_dependencies.hpp>
50 if (dep_code.scalar) {
51 code << dep_code.begin[0];
52 for (
string alg : dep_code.alg_code) {
55 for (
string eq : dep_code.code) {
56 boost::algorithm::trim_right(eq);
59 code <<
TAB <<
TAB << dep_code.end[0] << endl;
61 assert(dep_code.alg_code.size() == dep_code.code.size());
62 int size = dep_code.code.size();
63 for (
int i = 0; i < size; i++) {
64 code << dep_code.begin[i];
65 code << dep_code.alg_code[i];
66 code << dep_code.code[i];
67 code << dep_code.end[i] << endl;
77 map<string, DepCode> deps_code;
81 std::stringstream simple;
82 std::stringstream
generic;
83 FunctionPrinter printer;
84 for (
auto variable :
_deps) {
86 list<DepData> var_deps = variable.second;
90 std::stringstream begin;
91 std::stringstream
end;
98 Index use_idx(use_exp);
99 string use_id = use_idx.
identifier(alg_recursive_use && !ifr.get().isScalar());
106 if ((var_dep.var_dep.equations().size() == 1) && use_exp.
isScalar() && der.
hasRange() && !alg_recursive_use) {
111 if (deps_code.find(use_id) == deps_code.end()) {
113 dep_code.
scalar = (use_exp.
isScalar() && !alg_recursive_use) || ifr.get().isScalar();
114 deps_code[use_id] = dep_code;
116 DepCode dep_code = deps_code[use_id];
117 dep_code.
begin.push_back(printer.beginExpression(use_id, range));
121 deps_code[use_id] = dep_code;
124 for (
auto dc : deps_code) {
139 Equation eq = getEquation(vertex);
141 string var_name = var_dep.var().name();
142 DepData dep_data(eq.id(), var_dep);
144 list<DepData> deps =
_deps[var_name];
145 deps.push_back(dep_data);
146 _deps[var_name] = deps;
156 Equation v_eq = getEquation(v_vertex);
157 Equation g_eq = getEquation(g_vertex);
158 if (var_dep.isRecursive()) {
163 string var_name = var_dep.var().name();
166 list<DepData> deps =
_deps[var_name];
167 deps.push_back(dep_data);
174 SB::Deps::LMapExp use_map_exp,
Expression use_exp, SB::PWLMap def_map, SB::Deps::LMapExp def_map_exp,
175 SB::Set intersection)
177 Equation v_eq = getEquation(v_vertex);
178 Equation g_eq = getEquation(g_vertex);
179 DefAlgDepsUse new_dep(g_eq, def_map, use_exp, use_map_exp, def_map_exp, g_vertex.id());
193 QSSModelDepsBuilder qss_model_deps;
194 IndexShiftBuilder index_shifts(algebraics);
195 SDSBGraphBuilder SDSBGraph = SDSBGraphBuilder(eqs, algebraics);
196 SB::Deps::Graph graph = SDSBGraph.build();
199 config.
graph = graph;
200 qss_model_deps.setup(config);
201 qss_model_deps.compute(graph, index_shifts.build());