OILS / prebuilt / datalog / dataflow.cc View on Github | oilshell.org

1514 lines, 1189 significant
1#define SOUFFLE_GENERATOR_VERSION "39d42a366"
2#include "souffle/CompiledSouffle.h"
3#include "souffle/SignalHandler.h"
4#include "souffle/SouffleInterface.h"
5#include "souffle/datastructure/BTree.h"
6#include "souffle/io/IOSystem.h"
7#include <any>
8namespace functors {
9extern "C" {
10}
11} //namespace functors
12namespace souffle::t_btree_iii__0_1_2__111 {
13using namespace souffle;
14struct Type {
15static constexpr Relation::arity_type Arity = 3;
16using t_tuple = Tuple<RamDomain, 3>;
17struct t_comparator_0{
18 int operator()(const t_tuple& a, const t_tuple& b) const {
19 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :(0)));
20 }
21bool less(const t_tuple& a, const t_tuple& b) const {
22 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))))));
23 }
24bool equal(const t_tuple& a, const t_tuple& b) const {
25return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]));
26 }
27};
28using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
29t_ind_0 ind_0;
30using iterator = t_ind_0::iterator;
31struct context {
32t_ind_0::operation_hints hints_0_lower;
33t_ind_0::operation_hints hints_0_upper;
34};
35context createContext() { return context(); }
36bool insert(const t_tuple& t);
37bool insert(const t_tuple& t, context& h);
38bool insert(const RamDomain* ramDomain);
39bool insert(RamDomain a0,RamDomain a1,RamDomain a2);
40bool contains(const t_tuple& t, context& h) const;
41bool contains(const t_tuple& t) const;
42std::size_t size() const;
43iterator find(const t_tuple& t, context& h) const;
44iterator find(const t_tuple& t) const;
45range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
46range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
47range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
48range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
49bool empty() const;
50std::vector<range<iterator>> partition() const;
51void purge();
52iterator begin() const;
53iterator end() const;
54void printStatistics(std::ostream& o) const;
55};
56} // namespace souffle::t_btree_iii__0_1_2__111
57namespace souffle::t_btree_iii__0_1_2__111 {
58using namespace souffle;
59using t_ind_0 = Type::t_ind_0;
60using iterator = Type::iterator;
61using context = Type::context;
62bool Type::insert(const t_tuple& t) {
63context h;
64return insert(t, h);
65}
66bool Type::insert(const t_tuple& t, context& h) {
67if (ind_0.insert(t, h.hints_0_lower)) {
68return true;
69} else return false;
70}
71bool Type::insert(const RamDomain* ramDomain) {
72RamDomain data[3];
73std::copy(ramDomain, ramDomain + 3, data);
74const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
75context h;
76return insert(tuple, h);
77}
78bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
79RamDomain data[3] = {a0,a1,a2};
80return insert(data);
81}
82bool Type::contains(const t_tuple& t, context& h) const {
83return ind_0.contains(t, h.hints_0_lower);
84}
85bool Type::contains(const t_tuple& t) const {
86context h;
87return contains(t, h);
88}
89std::size_t Type::size() const {
90return ind_0.size();
91}
92iterator Type::find(const t_tuple& t, context& h) const {
93return ind_0.find(t, h.hints_0_lower);
94}
95iterator Type::find(const t_tuple& t) const {
96context h;
97return find(t, h);
98}
99range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
100return range<iterator>(ind_0.begin(),ind_0.end());
101}
102range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
103return range<iterator>(ind_0.begin(),ind_0.end());
104}
105range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const {
106t_comparator_0 comparator;
107int cmp = comparator(lower, upper);
108if (cmp == 0) {
109 auto pos = ind_0.find(lower, h.hints_0_lower);
110 auto fin = ind_0.end();
111 if (pos != fin) {fin = pos; ++fin;}
112 return make_range(pos, fin);
113}
114if (cmp > 0) {
115 return make_range(ind_0.end(), ind_0.end());
116}
117return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
118}
119range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const {
120context h;
121return lowerUpperRange_111(lower,upper,h);
122}
123bool Type::empty() const {
124return ind_0.empty();
125}
126std::vector<range<iterator>> Type::partition() const {
127return ind_0.getChunks(400);
128}
129void Type::purge() {
130ind_0.clear();
131}
132iterator Type::begin() const {
133return ind_0.begin();
134}
135iterator Type::end() const {
136return ind_0.end();
137}
138void Type::printStatistics(std::ostream& o) const {
139o << " arity 3 direct b-tree index 0 lex-order [0,1,2]\n";
140ind_0.printStats(o);
141}
142} // namespace souffle::t_btree_iii__0_1_2__111
143namespace souffle::t_btree_iiii__0_1_2_3__1110__1111 {
144using namespace souffle;
145struct Type {
146static constexpr Relation::arity_type Arity = 4;
147using t_tuple = Tuple<RamDomain, 4>;
148struct t_comparator_0{
149 int operator()(const t_tuple& a, const t_tuple& b) const {
150 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 1 :(0))));
151 }
152bool less(const t_tuple& a, const t_tuple& b) const {
153 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))))))));
154 }
155bool equal(const t_tuple& a, const t_tuple& b) const {
156return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]));
157 }
158};
159using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
160t_ind_0 ind_0;
161using iterator = t_ind_0::iterator;
162struct context {
163t_ind_0::operation_hints hints_0_lower;
164t_ind_0::operation_hints hints_0_upper;
165};
166context createContext() { return context(); }
167bool insert(const t_tuple& t);
168bool insert(const t_tuple& t, context& h);
169bool insert(const RamDomain* ramDomain);
170bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3);
171bool contains(const t_tuple& t, context& h) const;
172bool contains(const t_tuple& t) const;
173std::size_t size() const;
174iterator find(const t_tuple& t, context& h) const;
175iterator find(const t_tuple& t) const;
176range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
177range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
178range<t_ind_0::iterator> lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper, context& h) const;
179range<t_ind_0::iterator> lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper) const;
180range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const;
181range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const;
182bool empty() const;
183std::vector<range<iterator>> partition() const;
184void purge();
185iterator begin() const;
186iterator end() const;
187void printStatistics(std::ostream& o) const;
188};
189} // namespace souffle::t_btree_iiii__0_1_2_3__1110__1111
190namespace souffle::t_btree_iiii__0_1_2_3__1110__1111 {
191using namespace souffle;
192using t_ind_0 = Type::t_ind_0;
193using iterator = Type::iterator;
194using context = Type::context;
195bool Type::insert(const t_tuple& t) {
196context h;
197return insert(t, h);
198}
199bool Type::insert(const t_tuple& t, context& h) {
200if (ind_0.insert(t, h.hints_0_lower)) {
201return true;
202} else return false;
203}
204bool Type::insert(const RamDomain* ramDomain) {
205RamDomain data[4];
206std::copy(ramDomain, ramDomain + 4, data);
207const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
208context h;
209return insert(tuple, h);
210}
211bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3) {
212RamDomain data[4] = {a0,a1,a2,a3};
213return insert(data);
214}
215bool Type::contains(const t_tuple& t, context& h) const {
216return ind_0.contains(t, h.hints_0_lower);
217}
218bool Type::contains(const t_tuple& t) const {
219context h;
220return contains(t, h);
221}
222std::size_t Type::size() const {
223return ind_0.size();
224}
225iterator Type::find(const t_tuple& t, context& h) const {
226return ind_0.find(t, h.hints_0_lower);
227}
228iterator Type::find(const t_tuple& t) const {
229context h;
230return find(t, h);
231}
232range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
233return range<iterator>(ind_0.begin(),ind_0.end());
234}
235range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
236return range<iterator>(ind_0.begin(),ind_0.end());
237}
238range<t_ind_0::iterator> Type::lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper, context& h) const {
239t_comparator_0 comparator;
240int cmp = comparator(lower, upper);
241if (cmp > 0) {
242 return make_range(ind_0.end(), ind_0.end());
243}
244return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
245}
246range<t_ind_0::iterator> Type::lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper) const {
247context h;
248return lowerUpperRange_1110(lower,upper,h);
249}
250range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const {
251t_comparator_0 comparator;
252int cmp = comparator(lower, upper);
253if (cmp == 0) {
254 auto pos = ind_0.find(lower, h.hints_0_lower);
255 auto fin = ind_0.end();
256 if (pos != fin) {fin = pos; ++fin;}
257 return make_range(pos, fin);
258}
259if (cmp > 0) {
260 return make_range(ind_0.end(), ind_0.end());
261}
262return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
263}
264range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const {
265context h;
266return lowerUpperRange_1111(lower,upper,h);
267}
268bool Type::empty() const {
269return ind_0.empty();
270}
271std::vector<range<iterator>> Type::partition() const {
272return ind_0.getChunks(400);
273}
274void Type::purge() {
275ind_0.clear();
276}
277iterator Type::begin() const {
278return ind_0.begin();
279}
280iterator Type::end() const {
281return ind_0.end();
282}
283void Type::printStatistics(std::ostream& o) const {
284o << " arity 4 direct b-tree index 0 lex-order [0,1,2,3]\n";
285ind_0.printStats(o);
286}
287} // namespace souffle::t_btree_iiii__0_1_2_3__1110__1111
288namespace souffle::t_btree_iiii__0_1_2_3__1111 {
289using namespace souffle;
290struct Type {
291static constexpr Relation::arity_type Arity = 4;
292using t_tuple = Tuple<RamDomain, 4>;
293struct t_comparator_0{
294 int operator()(const t_tuple& a, const t_tuple& b) const {
295 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 1 :(0))));
296 }
297bool less(const t_tuple& a, const t_tuple& b) const {
298 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))))))));
299 }
300bool equal(const t_tuple& a, const t_tuple& b) const {
301return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]));
302 }
303};
304using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
305t_ind_0 ind_0;
306using iterator = t_ind_0::iterator;
307struct context {
308t_ind_0::operation_hints hints_0_lower;
309t_ind_0::operation_hints hints_0_upper;
310};
311context createContext() { return context(); }
312bool insert(const t_tuple& t);
313bool insert(const t_tuple& t, context& h);
314bool insert(const RamDomain* ramDomain);
315bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3);
316bool contains(const t_tuple& t, context& h) const;
317bool contains(const t_tuple& t) const;
318std::size_t size() const;
319iterator find(const t_tuple& t, context& h) const;
320iterator find(const t_tuple& t) const;
321range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
322range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
323range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const;
324range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const;
325bool empty() const;
326std::vector<range<iterator>> partition() const;
327void purge();
328iterator begin() const;
329iterator end() const;
330void printStatistics(std::ostream& o) const;
331};
332} // namespace souffle::t_btree_iiii__0_1_2_3__1111
333namespace souffle::t_btree_iiii__0_1_2_3__1111 {
334using namespace souffle;
335using t_ind_0 = Type::t_ind_0;
336using iterator = Type::iterator;
337using context = Type::context;
338bool Type::insert(const t_tuple& t) {
339context h;
340return insert(t, h);
341}
342bool Type::insert(const t_tuple& t, context& h) {
343if (ind_0.insert(t, h.hints_0_lower)) {
344return true;
345} else return false;
346}
347bool Type::insert(const RamDomain* ramDomain) {
348RamDomain data[4];
349std::copy(ramDomain, ramDomain + 4, data);
350const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
351context h;
352return insert(tuple, h);
353}
354bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3) {
355RamDomain data[4] = {a0,a1,a2,a3};
356return insert(data);
357}
358bool Type::contains(const t_tuple& t, context& h) const {
359return ind_0.contains(t, h.hints_0_lower);
360}
361bool Type::contains(const t_tuple& t) const {
362context h;
363return contains(t, h);
364}
365std::size_t Type::size() const {
366return ind_0.size();
367}
368iterator Type::find(const t_tuple& t, context& h) const {
369return ind_0.find(t, h.hints_0_lower);
370}
371iterator Type::find(const t_tuple& t) const {
372context h;
373return find(t, h);
374}
375range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
376return range<iterator>(ind_0.begin(),ind_0.end());
377}
378range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
379return range<iterator>(ind_0.begin(),ind_0.end());
380}
381range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const {
382t_comparator_0 comparator;
383int cmp = comparator(lower, upper);
384if (cmp == 0) {
385 auto pos = ind_0.find(lower, h.hints_0_lower);
386 auto fin = ind_0.end();
387 if (pos != fin) {fin = pos; ++fin;}
388 return make_range(pos, fin);
389}
390if (cmp > 0) {
391 return make_range(ind_0.end(), ind_0.end());
392}
393return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
394}
395range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const {
396context h;
397return lowerUpperRange_1111(lower,upper,h);
398}
399bool Type::empty() const {
400return ind_0.empty();
401}
402std::vector<range<iterator>> Type::partition() const {
403return ind_0.getChunks(400);
404}
405void Type::purge() {
406ind_0.clear();
407}
408iterator Type::begin() const {
409return ind_0.begin();
410}
411iterator Type::end() const {
412return ind_0.end();
413}
414void Type::printStatistics(std::ostream& o) const {
415o << " arity 4 direct b-tree index 0 lex-order [0,1,2,3]\n";
416ind_0.printStats(o);
417}
418} // namespace souffle::t_btree_iiii__0_1_2_3__1111
419namespace souffle::t_btree_iiii__0_1_2_3__1000__1111 {
420using namespace souffle;
421struct Type {
422static constexpr Relation::arity_type Arity = 4;
423using t_tuple = Tuple<RamDomain, 4>;
424struct t_comparator_0{
425 int operator()(const t_tuple& a, const t_tuple& b) const {
426 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 1 :(0))));
427 }
428bool less(const t_tuple& a, const t_tuple& b) const {
429 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))))))));
430 }
431bool equal(const t_tuple& a, const t_tuple& b) const {
432return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]));
433 }
434};
435using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
436t_ind_0 ind_0;
437using iterator = t_ind_0::iterator;
438struct context {
439t_ind_0::operation_hints hints_0_lower;
440t_ind_0::operation_hints hints_0_upper;
441};
442context createContext() { return context(); }
443bool insert(const t_tuple& t);
444bool insert(const t_tuple& t, context& h);
445bool insert(const RamDomain* ramDomain);
446bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3);
447bool contains(const t_tuple& t, context& h) const;
448bool contains(const t_tuple& t) const;
449std::size_t size() const;
450iterator find(const t_tuple& t, context& h) const;
451iterator find(const t_tuple& t) const;
452range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
453range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
454range<t_ind_0::iterator> lowerUpperRange_1000(const t_tuple& lower, const t_tuple& upper, context& h) const;
455range<t_ind_0::iterator> lowerUpperRange_1000(const t_tuple& lower, const t_tuple& upper) const;
456range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const;
457range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const;
458bool empty() const;
459std::vector<range<iterator>> partition() const;
460void purge();
461iterator begin() const;
462iterator end() const;
463void printStatistics(std::ostream& o) const;
464};
465} // namespace souffle::t_btree_iiii__0_1_2_3__1000__1111
466namespace souffle::t_btree_iiii__0_1_2_3__1000__1111 {
467using namespace souffle;
468using t_ind_0 = Type::t_ind_0;
469using iterator = Type::iterator;
470using context = Type::context;
471bool Type::insert(const t_tuple& t) {
472context h;
473return insert(t, h);
474}
475bool Type::insert(const t_tuple& t, context& h) {
476if (ind_0.insert(t, h.hints_0_lower)) {
477return true;
478} else return false;
479}
480bool Type::insert(const RamDomain* ramDomain) {
481RamDomain data[4];
482std::copy(ramDomain, ramDomain + 4, data);
483const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
484context h;
485return insert(tuple, h);
486}
487bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3) {
488RamDomain data[4] = {a0,a1,a2,a3};
489return insert(data);
490}
491bool Type::contains(const t_tuple& t, context& h) const {
492return ind_0.contains(t, h.hints_0_lower);
493}
494bool Type::contains(const t_tuple& t) const {
495context h;
496return contains(t, h);
497}
498std::size_t Type::size() const {
499return ind_0.size();
500}
501iterator Type::find(const t_tuple& t, context& h) const {
502return ind_0.find(t, h.hints_0_lower);
503}
504iterator Type::find(const t_tuple& t) const {
505context h;
506return find(t, h);
507}
508range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
509return range<iterator>(ind_0.begin(),ind_0.end());
510}
511range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
512return range<iterator>(ind_0.begin(),ind_0.end());
513}
514range<t_ind_0::iterator> Type::lowerUpperRange_1000(const t_tuple& lower, const t_tuple& upper, context& h) const {
515t_comparator_0 comparator;
516int cmp = comparator(lower, upper);
517if (cmp > 0) {
518 return make_range(ind_0.end(), ind_0.end());
519}
520return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
521}
522range<t_ind_0::iterator> Type::lowerUpperRange_1000(const t_tuple& lower, const t_tuple& upper) const {
523context h;
524return lowerUpperRange_1000(lower,upper,h);
525}
526range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const {
527t_comparator_0 comparator;
528int cmp = comparator(lower, upper);
529if (cmp == 0) {
530 auto pos = ind_0.find(lower, h.hints_0_lower);
531 auto fin = ind_0.end();
532 if (pos != fin) {fin = pos; ++fin;}
533 return make_range(pos, fin);
534}
535if (cmp > 0) {
536 return make_range(ind_0.end(), ind_0.end());
537}
538return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
539}
540range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const {
541context h;
542return lowerUpperRange_1111(lower,upper,h);
543}
544bool Type::empty() const {
545return ind_0.empty();
546}
547std::vector<range<iterator>> Type::partition() const {
548return ind_0.getChunks(400);
549}
550void Type::purge() {
551ind_0.clear();
552}
553iterator Type::begin() const {
554return ind_0.begin();
555}
556iterator Type::end() const {
557return ind_0.end();
558}
559void Type::printStatistics(std::ostream& o) const {
560o << " arity 4 direct b-tree index 0 lex-order [0,1,2,3]\n";
561ind_0.printStats(o);
562}
563} // namespace souffle::t_btree_iiii__0_1_2_3__1000__1111
564namespace souffle::t_btree_iiiiii__0_1_2_3_4_5__111111 {
565using namespace souffle;
566struct Type {
567static constexpr Relation::arity_type Arity = 6;
568using t_tuple = Tuple<RamDomain, 6>;
569struct t_comparator_0{
570 int operator()(const t_tuple& a, const t_tuple& b) const {
571 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 1 :((ramBitCast<RamSigned>(a[4]) < ramBitCast<RamSigned>(b[4])) ? -1 : (ramBitCast<RamSigned>(a[4]) > ramBitCast<RamSigned>(b[4])) ? 1 :((ramBitCast<RamSigned>(a[5]) < ramBitCast<RamSigned>(b[5])) ? -1 : (ramBitCast<RamSigned>(a[5]) > ramBitCast<RamSigned>(b[5])) ? 1 :(0))))));
572 }
573bool less(const t_tuple& a, const t_tuple& b) const {
574 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))|| ((ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3])) && ((ramBitCast<RamSigned>(a[4]) < ramBitCast<RamSigned>(b[4]))|| ((ramBitCast<RamSigned>(a[4]) == ramBitCast<RamSigned>(b[4])) && ((ramBitCast<RamSigned>(a[5]) < ramBitCast<RamSigned>(b[5]))))))))))));
575 }
576bool equal(const t_tuple& a, const t_tuple& b) const {
577return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]))&&(ramBitCast<RamSigned>(a[4]) == ramBitCast<RamSigned>(b[4]))&&(ramBitCast<RamSigned>(a[5]) == ramBitCast<RamSigned>(b[5]));
578 }
579};
580using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
581t_ind_0 ind_0;
582using iterator = t_ind_0::iterator;
583struct context {
584t_ind_0::operation_hints hints_0_lower;
585t_ind_0::operation_hints hints_0_upper;
586};
587context createContext() { return context(); }
588bool insert(const t_tuple& t);
589bool insert(const t_tuple& t, context& h);
590bool insert(const RamDomain* ramDomain);
591bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4,RamDomain a5);
592bool contains(const t_tuple& t, context& h) const;
593bool contains(const t_tuple& t) const;
594std::size_t size() const;
595iterator find(const t_tuple& t, context& h) const;
596iterator find(const t_tuple& t) const;
597range<iterator> lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
598range<iterator> lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
599range<t_ind_0::iterator> lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper, context& h) const;
600range<t_ind_0::iterator> lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper) const;
601bool empty() const;
602std::vector<range<iterator>> partition() const;
603void purge();
604iterator begin() const;
605iterator end() const;
606void printStatistics(std::ostream& o) const;
607};
608} // namespace souffle::t_btree_iiiiii__0_1_2_3_4_5__111111
609namespace souffle::t_btree_iiiiii__0_1_2_3_4_5__111111 {
610using namespace souffle;
611using t_ind_0 = Type::t_ind_0;
612using iterator = Type::iterator;
613using context = Type::context;
614bool Type::insert(const t_tuple& t) {
615context h;
616return insert(t, h);
617}
618bool Type::insert(const t_tuple& t, context& h) {
619if (ind_0.insert(t, h.hints_0_lower)) {
620return true;
621} else return false;
622}
623bool Type::insert(const RamDomain* ramDomain) {
624RamDomain data[6];
625std::copy(ramDomain, ramDomain + 6, data);
626const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
627context h;
628return insert(tuple, h);
629}
630bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4,RamDomain a5) {
631RamDomain data[6] = {a0,a1,a2,a3,a4,a5};
632return insert(data);
633}
634bool Type::contains(const t_tuple& t, context& h) const {
635return ind_0.contains(t, h.hints_0_lower);
636}
637bool Type::contains(const t_tuple& t) const {
638context h;
639return contains(t, h);
640}
641std::size_t Type::size() const {
642return ind_0.size();
643}
644iterator Type::find(const t_tuple& t, context& h) const {
645return ind_0.find(t, h.hints_0_lower);
646}
647iterator Type::find(const t_tuple& t) const {
648context h;
649return find(t, h);
650}
651range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
652return range<iterator>(ind_0.begin(),ind_0.end());
653}
654range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
655return range<iterator>(ind_0.begin(),ind_0.end());
656}
657range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper, context& h) const {
658t_comparator_0 comparator;
659int cmp = comparator(lower, upper);
660if (cmp == 0) {
661 auto pos = ind_0.find(lower, h.hints_0_lower);
662 auto fin = ind_0.end();
663 if (pos != fin) {fin = pos; ++fin;}
664 return make_range(pos, fin);
665}
666if (cmp > 0) {
667 return make_range(ind_0.end(), ind_0.end());
668}
669return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
670}
671range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper) const {
672context h;
673return lowerUpperRange_111111(lower,upper,h);
674}
675bool Type::empty() const {
676return ind_0.empty();
677}
678std::vector<range<iterator>> Type::partition() const {
679return ind_0.getChunks(400);
680}
681void Type::purge() {
682ind_0.clear();
683}
684iterator Type::begin() const {
685return ind_0.begin();
686}
687iterator Type::end() const {
688return ind_0.end();
689}
690void Type::printStatistics(std::ostream& o) const {
691o << " arity 6 direct b-tree index 0 lex-order [0,1,2,3,4,5]\n";
692ind_0.printStats(o);
693}
694} // namespace souffle::t_btree_iiiiii__0_1_2_3_4_5__111111
695namespace souffle {
696using namespace souffle;
697class Stratum_CFGraph_edge_4d26e319bb257c49 {
698public:
699 Stratum_CFGraph_edge_4d26e319bb257c49(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1110__1111::Type& rel_CFGraph_edge_db08b41d50d8a475,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72);
700void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
701private:
702SymbolTable& symTable;
703RecordTable& recordTable;
704ConcurrentCache<std::string,std::regex>& regexCache;
705bool& pruneImdtRels;
706bool& performIO;
707SignalHandler*& signalHandler;
708std::atomic<std::size_t>& iter;
709std::atomic<RamDomain>& ctr;
710std::string& inputDirectory;
711std::string& outputDirectory;
712t_btree_iiii__0_1_2_3__1110__1111::Type* rel_CFGraph_edge_db08b41d50d8a475;
713t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
714};
715} // namespace souffle
716namespace souffle {
717using namespace souffle;
718 Stratum_CFGraph_edge_4d26e319bb257c49::Stratum_CFGraph_edge_4d26e319bb257c49(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1110__1111::Type& rel_CFGraph_edge_db08b41d50d8a475,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72):
719symTable(symTable),
720recordTable(recordTable),
721regexCache(regexCache),
722pruneImdtRels(pruneImdtRels),
723performIO(performIO),
724signalHandler(signalHandler),
725iter(iter),
726ctr(ctr),
727inputDirectory(inputDirectory),
728outputDirectory(outputDirectory),
729rel_CFGraph_edge_db08b41d50d8a475(&rel_CFGraph_edge_db08b41d50d8a475),
730rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72){
731}
732
733void Stratum_CFGraph_edge_4d26e319bb257c49::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
734signalHandler->setMsg(R"_(CFGraph.edge(f,s1,f,s2) :-
735 cf_edge(f,s1,s2).
736in file control-flow.dl [34:1-34:50])_");
737if(!(rel_cf_edge_4931a04c8c74bb72->empty())) {
738[&](){
739CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
740CREATE_OP_CONTEXT(rel_cf_edge_4931a04c8c74bb72_op_ctxt,rel_cf_edge_4931a04c8c74bb72->createContext());
741for(const auto& env0 : *rel_cf_edge_4931a04c8c74bb72) {
742Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env0[2])}};
743rel_CFGraph_edge_db08b41d50d8a475->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt));
744}
745}
746();}
747if (pruneImdtRels) rel_cf_edge_4931a04c8c74bb72->purge();
748}
749
750} // namespace souffle
751
752namespace souffle {
753using namespace souffle;
754class Stratum_CFGraph_reachable_7410d937e4ac8127 {
755public:
756 Stratum_CFGraph_reachable_7410d937e4ac8127(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1111::Type& rel_delta_CFGraph_reachable_3f3bf343bbb37861,t_btree_iiii__0_1_2_3__1111::Type& rel_new_CFGraph_reachable_c98538911662603c,t_btree_iiii__0_1_2_3__1110__1111::Type& rel_CFGraph_edge_db08b41d50d8a475,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909);
757void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
758private:
759SymbolTable& symTable;
760RecordTable& recordTable;
761ConcurrentCache<std::string,std::regex>& regexCache;
762bool& pruneImdtRels;
763bool& performIO;
764SignalHandler*& signalHandler;
765std::atomic<std::size_t>& iter;
766std::atomic<RamDomain>& ctr;
767std::string& inputDirectory;
768std::string& outputDirectory;
769t_btree_iiii__0_1_2_3__1111::Type* rel_delta_CFGraph_reachable_3f3bf343bbb37861;
770t_btree_iiii__0_1_2_3__1111::Type* rel_new_CFGraph_reachable_c98538911662603c;
771t_btree_iiii__0_1_2_3__1110__1111::Type* rel_CFGraph_edge_db08b41d50d8a475;
772t_btree_iiii__0_1_2_3__1111::Type* rel_CFGraph_reachable_c344462befee4909;
773};
774} // namespace souffle
775namespace souffle {
776using namespace souffle;
777 Stratum_CFGraph_reachable_7410d937e4ac8127::Stratum_CFGraph_reachable_7410d937e4ac8127(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1111::Type& rel_delta_CFGraph_reachable_3f3bf343bbb37861,t_btree_iiii__0_1_2_3__1111::Type& rel_new_CFGraph_reachable_c98538911662603c,t_btree_iiii__0_1_2_3__1110__1111::Type& rel_CFGraph_edge_db08b41d50d8a475,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909):
778symTable(symTable),
779recordTable(recordTable),
780regexCache(regexCache),
781pruneImdtRels(pruneImdtRels),
782performIO(performIO),
783signalHandler(signalHandler),
784iter(iter),
785ctr(ctr),
786inputDirectory(inputDirectory),
787outputDirectory(outputDirectory),
788rel_delta_CFGraph_reachable_3f3bf343bbb37861(&rel_delta_CFGraph_reachable_3f3bf343bbb37861),
789rel_new_CFGraph_reachable_c98538911662603c(&rel_new_CFGraph_reachable_c98538911662603c),
790rel_CFGraph_edge_db08b41d50d8a475(&rel_CFGraph_edge_db08b41d50d8a475),
791rel_CFGraph_reachable_c344462befee4909(&rel_CFGraph_reachable_c344462befee4909){
792}
793
794void Stratum_CFGraph_reachable_7410d937e4ac8127::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
795signalHandler->setMsg(R"_(CFGraph.reachable(f,s1,g,s2) :-
796 CFGraph.edge(f,s1,g,s2).
797in file control-flow.dl [15:2-15:48])_");
798if(!(rel_CFGraph_edge_db08b41d50d8a475->empty())) {
799[&](){
800CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
801CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
802for(const auto& env0 : *rel_CFGraph_edge_db08b41d50d8a475) {
803Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
804rel_CFGraph_reachable_c344462befee4909->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt));
805}
806}
807();}
808[&](){
809CREATE_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt,rel_delta_CFGraph_reachable_3f3bf343bbb37861->createContext());
810CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
811for(const auto& env0 : *rel_CFGraph_reachable_c344462befee4909) {
812Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
813rel_delta_CFGraph_reachable_3f3bf343bbb37861->insert(tuple,READ_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt));
814}
815}
816();auto loop_counter = RamUnsigned(1);
817iter = 0;
818for(;;) {
819signalHandler->setMsg(R"_(CFGraph.reachable(f,s1,f,s3) :-
820 CFGraph.reachable(f,s1,f,s2),
821 CFGraph.edge(f,s2,f,s3).
822in file control-flow.dl [16:2-16:73])_");
823if(!(rel_delta_CFGraph_reachable_3f3bf343bbb37861->empty()) && !(rel_CFGraph_edge_db08b41d50d8a475->empty())) {
824[&](){
825CREATE_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt,rel_delta_CFGraph_reachable_3f3bf343bbb37861->createContext());
826CREATE_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt,rel_new_CFGraph_reachable_c98538911662603c->createContext());
827CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
828CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
829for(const auto& env0 : *rel_delta_CFGraph_reachable_3f3bf343bbb37861) {
830if( (ramBitCast<RamDomain>(env0[0]) == ramBitCast<RamDomain>(env0[2]))) {
831auto range = rel_CFGraph_edge_db08b41d50d8a475->lowerUpperRange_1110(Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(env0[3]), ramBitCast(env0[0]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(env0[3]), ramBitCast(env0[0]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt));
832for(const auto& env1 : range) {
833if( !(rel_CFGraph_reachable_c344462befee4909->contains(Tuple<RamDomain,4>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env1[3])}},READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt)))) {
834Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env1[3])}};
835rel_new_CFGraph_reachable_c98538911662603c->insert(tuple,READ_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt));
836}
837}
838}
839}
840}
841();}
842if(rel_new_CFGraph_reachable_c98538911662603c->empty()) break;
843[&](){
844CREATE_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt,rel_new_CFGraph_reachable_c98538911662603c->createContext());
845CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
846for(const auto& env0 : *rel_new_CFGraph_reachable_c98538911662603c) {
847Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
848rel_CFGraph_reachable_c344462befee4909->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt));
849}
850}
851();std::swap(rel_delta_CFGraph_reachable_3f3bf343bbb37861, rel_new_CFGraph_reachable_c98538911662603c);
852rel_new_CFGraph_reachable_c98538911662603c->purge();
853loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
854iter++;
855}
856iter = 0;
857rel_delta_CFGraph_reachable_3f3bf343bbb37861->purge();
858rel_new_CFGraph_reachable_c98538911662603c->purge();
859if (pruneImdtRels) rel_CFGraph_edge_db08b41d50d8a475->purge();
860}
861
862} // namespace souffle
863
864namespace souffle {
865using namespace souffle;
866class Stratum_alias_ba5aaebc28a379e5 {
867public:
868 Stratum_alias_ba5aaebc28a379e5(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909,t_btree_iiiiii__0_1_2_3_4_5__111111::Type& rel_alias_36893f0f24e80d93,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_define_04bf38853652ecf1);
869void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
870private:
871SymbolTable& symTable;
872RecordTable& recordTable;
873ConcurrentCache<std::string,std::regex>& regexCache;
874bool& pruneImdtRels;
875bool& performIO;
876SignalHandler*& signalHandler;
877std::atomic<std::size_t>& iter;
878std::atomic<RamDomain>& ctr;
879std::string& inputDirectory;
880std::string& outputDirectory;
881t_btree_iiii__0_1_2_3__1111::Type* rel_CFGraph_reachable_c344462befee4909;
882t_btree_iiiiii__0_1_2_3_4_5__111111::Type* rel_alias_36893f0f24e80d93;
883t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
884t_btree_iii__0_1_2__111::Type* rel_define_04bf38853652ecf1;
885};
886} // namespace souffle
887namespace souffle {
888using namespace souffle;
889 Stratum_alias_ba5aaebc28a379e5::Stratum_alias_ba5aaebc28a379e5(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909,t_btree_iiiiii__0_1_2_3_4_5__111111::Type& rel_alias_36893f0f24e80d93,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_define_04bf38853652ecf1):
890symTable(symTable),
891recordTable(recordTable),
892regexCache(regexCache),
893pruneImdtRels(pruneImdtRels),
894performIO(performIO),
895signalHandler(signalHandler),
896iter(iter),
897ctr(ctr),
898inputDirectory(inputDirectory),
899outputDirectory(outputDirectory),
900rel_CFGraph_reachable_c344462befee4909(&rel_CFGraph_reachable_c344462befee4909),
901rel_alias_36893f0f24e80d93(&rel_alias_36893f0f24e80d93),
902rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
903rel_define_04bf38853652ecf1(&rel_define_04bf38853652ecf1){
904}
905
906void Stratum_alias_ba5aaebc28a379e5::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
907signalHandler->setMsg(R"_(alias(f,s1,$Variable(v),f,s2,$Variable(v2)) :-
908 define(f,s1,$Variable(v)),
909 assign(f,s2,$Variable(v2),$Variable(v)),
910 CFGraph.reachable(f,s1,f,s2).
911in file dataflow.dl [35:1-38:34])_");
912if(!(rel_assign_e4bb6e0824a16a37->empty()) && !(rel_CFGraph_reachable_c344462befee4909->empty()) && !(rel_define_04bf38853652ecf1->empty())) {
913[&](){
914CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
915CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
916CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
917CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
918for(const auto& env0 : *rel_define_04bf38853652ecf1) {
919RamDomain const ref = env0[2];
920if (ref == 0) continue;
921const RamDomain *env1 = recordTable.unpack(ref,2);
922{
923if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
924auto range = rel_assign_e4bb6e0824a16a37->lowerUpperRange_1000(Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt));
925for(const auto& env2 : range) {
926if( rel_CFGraph_reachable_c344462befee4909->contains(Tuple<RamDomain,4>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env2[1])}},READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt))) {
927RamDomain const ref = env2[2];
928if (ref == 0) continue;
929const RamDomain *env3 = recordTable.unpack(ref,2);
930{
931if( (ramBitCast<RamDomain>(env3[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
932RamDomain const ref = env2[3];
933if (ref == 0) continue;
934const RamDomain *env4 = recordTable.unpack(ref,2);
935{
936if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(1))) && (ramBitCast<RamDomain>(env1[1]) == ramBitCast<RamDomain>(env4[1]))) {
937Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env1[1]))}}
938)),ramBitCast(env0[0]),ramBitCast(env2[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env3[1]))}}
939))}};
940rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
941}
942}
943}
944}
945}
946}
947}
948}
949}
950}
951();}
952signalHandler->setMsg(R"_(alias("heap",-1,$Member(c, m),f,s2,r) :-
953 assign(_,_,$Member(c, m),_),
954 assign(f,s2,r,$Member(c, m)).
955in file dataflow.dl [42:1-44:34])_");
956if(!(rel_assign_e4bb6e0824a16a37->empty())) {
957[&](){
958CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
959CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
960for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
961RamDomain const ref = env0[2];
962if (ref == 0) continue;
963const RamDomain *env1 = recordTable.unpack(ref,2);
964{
965if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
966RamDomain const ref = env1[1];
967if (ref == 0) continue;
968const RamDomain *env2 = recordTable.unpack(ref,2);
969{
970for(const auto& env3 : *rel_assign_e4bb6e0824a16a37) {
971RamDomain const ref = env3[3];
972if (ref == 0) continue;
973const RamDomain *env4 = recordTable.unpack(ref,2);
974{
975if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
976RamDomain const ref = env4[1];
977if (ref == 0) continue;
978const RamDomain *env5 = recordTable.unpack(ref,2);
979{
980if( (ramBitCast<RamDomain>(env2[1]) == ramBitCast<RamDomain>(env5[1])) && (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(env5[0]))) {
981Tuple<RamDomain,6> tuple{{ramBitCast(RamSigned(0)),ramBitCast(RamSigned(-1)),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(0))),ramBitCast(ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(env2[0])),ramBitCast(ramBitCast(env2[1]))}}
982)))}}
983)),ramBitCast(env3[0]),ramBitCast(env3[1]),ramBitCast(env3[2])}};
984rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
985}
986}
987}
988}
989}
990}
991}
992}
993}
994}
995();}
996signalHandler->setMsg(R"_(alias(f,s1,$Variable(v),"heap",-1,$Member(c, m)) :-
997 define(f,s1,$Variable(v)),
998 assign(f,s2,$Member(c, m),$Variable(v)),
999 CFGraph.reachable(f,s1,f,s2).
1000in file dataflow.dl [48:1-51:34])_");
1001if(!(rel_assign_e4bb6e0824a16a37->empty()) && !(rel_CFGraph_reachable_c344462befee4909->empty()) && !(rel_define_04bf38853652ecf1->empty())) {
1002[&](){
1003CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
1004CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1005CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1006CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
1007for(const auto& env0 : *rel_define_04bf38853652ecf1) {
1008RamDomain const ref = env0[2];
1009if (ref == 0) continue;
1010const RamDomain *env1 = recordTable.unpack(ref,2);
1011{
1012if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1013auto range = rel_assign_e4bb6e0824a16a37->lowerUpperRange_1000(Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt));
1014for(const auto& env2 : range) {
1015if( rel_CFGraph_reachable_c344462befee4909->contains(Tuple<RamDomain,4>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env2[1])}},READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt))) {
1016RamDomain const ref = env2[2];
1017if (ref == 0) continue;
1018const RamDomain *env3 = recordTable.unpack(ref,2);
1019{
1020if( (ramBitCast<RamDomain>(env3[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1021RamDomain const ref = env3[1];
1022if (ref == 0) continue;
1023const RamDomain *env4 = recordTable.unpack(ref,2);
1024{
1025RamDomain const ref = env2[3];
1026if (ref == 0) continue;
1027const RamDomain *env5 = recordTable.unpack(ref,2);
1028{
1029if( (ramBitCast<RamDomain>(env5[0]) == ramBitCast<RamDomain>(RamSigned(1))) && (ramBitCast<RamDomain>(env1[1]) == ramBitCast<RamDomain>(env5[1]))) {
1030Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env1[1]))}}
1031)),ramBitCast(RamSigned(0)),ramBitCast(RamSigned(-1)),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(0))),ramBitCast(ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(env4[0])),ramBitCast(ramBitCast(env4[1]))}}
1032)))}}
1033))}};
1034rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1035}
1036}
1037}
1038}
1039}
1040}
1041}
1042}
1043}
1044}
1045}
1046();}
1047if (performIO) {
1048try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\tsf\ta\tg\tsg\tb"},{"auxArity","0"},{"name","alias"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 6, \"params\": [\"f\", \"sf\", \"a\", \"g\", \"sg\", \"b\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 6, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1049if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1050else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1051IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1052} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1053}
1054if (pruneImdtRels) rel_CFGraph_reachable_c344462befee4909->purge();
1055if (pruneImdtRels) rel_assign_e4bb6e0824a16a37->purge();
1056if (pruneImdtRels) rel_define_04bf38853652ecf1->purge();
1057}
1058
1059} // namespace souffle
1060
1061namespace souffle {
1062using namespace souffle;
1063class Stratum_assign_e0d78e44f4df6411 {
1064public:
1065 Stratum_assign_e0d78e44f4df6411(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37);
1066void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1067private:
1068SymbolTable& symTable;
1069RecordTable& recordTable;
1070ConcurrentCache<std::string,std::regex>& regexCache;
1071bool& pruneImdtRels;
1072bool& performIO;
1073SignalHandler*& signalHandler;
1074std::atomic<std::size_t>& iter;
1075std::atomic<RamDomain>& ctr;
1076std::string& inputDirectory;
1077std::string& outputDirectory;
1078t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
1079};
1080} // namespace souffle
1081namespace souffle {
1082using namespace souffle;
1083 Stratum_assign_e0d78e44f4df6411::Stratum_assign_e0d78e44f4df6411(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37):
1084symTable(symTable),
1085recordTable(recordTable),
1086regexCache(regexCache),
1087pruneImdtRels(pruneImdtRels),
1088performIO(performIO),
1089signalHandler(signalHandler),
1090iter(iter),
1091ctr(ctr),
1092inputDirectory(inputDirectory),
1093outputDirectory(outputDirectory),
1094rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37){
1095}
1096
1097void Stratum_assign_e0d78e44f4df6411::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1098if (performIO) {
1099try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\ta\tb"},{"auxArity","0"},{"fact-dir","."},{"name","assign"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 4, \"params\": [\"f\", \"s\", \"a\", \"b\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 4, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Reference\"]}}"}});
1100if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1101IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1102} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1103exit(1);
1104}
1105}
1106}
1107
1108} // namespace souffle
1109
1110namespace souffle {
1111using namespace souffle;
1112class Stratum_cf_edge_c2ae152829fd6f1f {
1113public:
1114 Stratum_cf_edge_c2ae152829fd6f1f(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72);
1115void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1116private:
1117SymbolTable& symTable;
1118RecordTable& recordTable;
1119ConcurrentCache<std::string,std::regex>& regexCache;
1120bool& pruneImdtRels;
1121bool& performIO;
1122SignalHandler*& signalHandler;
1123std::atomic<std::size_t>& iter;
1124std::atomic<RamDomain>& ctr;
1125std::string& inputDirectory;
1126std::string& outputDirectory;
1127t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
1128};
1129} // namespace souffle
1130namespace souffle {
1131using namespace souffle;
1132 Stratum_cf_edge_c2ae152829fd6f1f::Stratum_cf_edge_c2ae152829fd6f1f(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72):
1133symTable(symTable),
1134recordTable(recordTable),
1135regexCache(regexCache),
1136pruneImdtRels(pruneImdtRels),
1137performIO(performIO),
1138signalHandler(signalHandler),
1139iter(iter),
1140ctr(ctr),
1141inputDirectory(inputDirectory),
1142outputDirectory(outputDirectory),
1143rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72){
1144}
1145
1146void Stratum_cf_edge_c2ae152829fd6f1f::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1147if (performIO) {
1148try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts1\ts2"},{"auxArity","0"},{"fact-dir","."},{"name","cf_edge"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s1\", \"s2\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}"}});
1149if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1150IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1151} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1152exit(1);
1153}
1154}
1155}
1156
1157} // namespace souffle
1158
1159namespace souffle {
1160using namespace souffle;
1161class Stratum_define_391884c8e77907db {
1162public:
1163 Stratum_define_391884c8e77907db(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_define_04bf38853652ecf1);
1164void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1165private:
1166SymbolTable& symTable;
1167RecordTable& recordTable;
1168ConcurrentCache<std::string,std::regex>& regexCache;
1169bool& pruneImdtRels;
1170bool& performIO;
1171SignalHandler*& signalHandler;
1172std::atomic<std::size_t>& iter;
1173std::atomic<RamDomain>& ctr;
1174std::string& inputDirectory;
1175std::string& outputDirectory;
1176t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
1177t_btree_iii__0_1_2__111::Type* rel_define_04bf38853652ecf1;
1178};
1179} // namespace souffle
1180namespace souffle {
1181using namespace souffle;
1182 Stratum_define_391884c8e77907db::Stratum_define_391884c8e77907db(SymbolTable& symTable,RecordTable& recordTable,ConcurrentCache<std::string,std::regex>& regexCache,bool& pruneImdtRels,bool& performIO,SignalHandler*& signalHandler,std::atomic<std::size_t>& iter,std::atomic<RamDomain>& ctr,std::string& inputDirectory,std::string& outputDirectory,t_btree_iiii__0_1_2_3__1000__1111::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_define_04bf38853652ecf1):
1183symTable(symTable),
1184recordTable(recordTable),
1185regexCache(regexCache),
1186pruneImdtRels(pruneImdtRels),
1187performIO(performIO),
1188signalHandler(signalHandler),
1189iter(iter),
1190ctr(ctr),
1191inputDirectory(inputDirectory),
1192outputDirectory(outputDirectory),
1193rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1194rel_define_04bf38853652ecf1(&rel_define_04bf38853652ecf1){
1195}
1196
1197void Stratum_define_391884c8e77907db::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1198if (performIO) {
1199try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr"},{"auxArity","0"},{"fact-dir","."},{"name","define"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1200if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1201IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_define_04bf38853652ecf1);
1202} catch (std::exception& e) {std::cerr << "Error loading define data: " << e.what() << '\n';
1203exit(1);
1204}
1205}
1206signalHandler->setMsg(R"_(define(f,s,r) :-
1207 assign(f,s,r,_).
1208in file dataflow.dl [31:1-31:39])_");
1209if(!(rel_assign_e4bb6e0824a16a37->empty())) {
1210[&](){
1211CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1212CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
1213for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
1214Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1215rel_define_04bf38853652ecf1->insert(tuple,READ_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt));
1216}
1217}
1218();}
1219}
1220
1221} // namespace souffle
1222
1223namespace souffle {
1224using namespace souffle;
1225class Sf__: public SouffleProgram {
1226public:
1227 Sf__();
1228 ~Sf__();
1229void run();
1230void runAll(std::string inputDirectoryArg = "",std::string outputDirectoryArg = "",bool performIOArg = true,bool pruneImdtRelsArg = true);
1231void printAll([[maybe_unused]] std::string outputDirectoryArg = "");
1232void loadAll([[maybe_unused]] std::string inputDirectoryArg = "");
1233void dumpInputs();
1234void dumpOutputs();
1235SymbolTable& getSymbolTable();
1236RecordTable& getRecordTable();
1237void setNumThreads(std::size_t numThreadsValue);
1238void executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret);
1239private:
1240void runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg);
1241SymbolTableImpl symTable;
1242SpecializedRecordTable<0,2> recordTable;
1243ConcurrentCache<std::string,std::regex> regexCache;
1244Own<t_btree_iii__0_1_2__111::Type> rel_cf_edge_4931a04c8c74bb72;
1245souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_cf_edge_4931a04c8c74bb72;
1246Own<t_btree_iiii__0_1_2_3__1110__1111::Type> rel_CFGraph_edge_db08b41d50d8a475;
1247souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1110__1111::Type> wrapper_rel_CFGraph_edge_db08b41d50d8a475;
1248Own<t_btree_iiii__0_1_2_3__1111::Type> rel_CFGraph_reachable_c344462befee4909;
1249souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1111::Type> wrapper_rel_CFGraph_reachable_c344462befee4909;
1250Own<t_btree_iiii__0_1_2_3__1111::Type> rel_delta_CFGraph_reachable_3f3bf343bbb37861;
1251Own<t_btree_iiii__0_1_2_3__1111::Type> rel_new_CFGraph_reachable_c98538911662603c;
1252Own<t_btree_iiii__0_1_2_3__1000__1111::Type> rel_assign_e4bb6e0824a16a37;
1253souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1000__1111::Type> wrapper_rel_assign_e4bb6e0824a16a37;
1254Own<t_btree_iii__0_1_2__111::Type> rel_define_04bf38853652ecf1;
1255souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_define_04bf38853652ecf1;
1256Own<t_btree_iiiiii__0_1_2_3_4_5__111111::Type> rel_alias_36893f0f24e80d93;
1257souffle::RelationWrapper<t_btree_iiiiii__0_1_2_3_4_5__111111::Type> wrapper_rel_alias_36893f0f24e80d93;
1258Stratum_CFGraph_edge_4d26e319bb257c49 stratum_CFGraph_edge_656704795f0096ba;
1259Stratum_CFGraph_reachable_7410d937e4ac8127 stratum_CFGraph_reachable_a1359c86b6f7bd73;
1260Stratum_alias_ba5aaebc28a379e5 stratum_alias_0179d0f4f86c77c2;
1261Stratum_assign_e0d78e44f4df6411 stratum_assign_f550d366a9215d2a;
1262Stratum_cf_edge_c2ae152829fd6f1f stratum_cf_edge_4017fef287699967;
1263Stratum_define_391884c8e77907db stratum_define_ab922eb7ee2d8992;
1264std::string inputDirectory;
1265std::string outputDirectory;
1266SignalHandler* signalHandler{SignalHandler::instance()};
1267std::atomic<RamDomain> ctr{};
1268std::atomic<std::size_t> iter{};
1269};
1270} // namespace souffle
1271namespace souffle {
1272using namespace souffle;
1273 Sf__::Sf__():
1274symTable({
1275 R"_(heap)_",
1276}),
1277recordTable(),
1278regexCache(),
1279rel_cf_edge_4931a04c8c74bb72(mk<t_btree_iii__0_1_2__111::Type>()),
1280wrapper_rel_cf_edge_4931a04c8c74bb72(0, *rel_cf_edge_4931a04c8c74bb72, *this, "cf_edge", std::array<const char *,3>{{"s:Function","i:Statement","i:Statement"}}, std::array<const char *,3>{{"f","s1","s2"}}, 0),
1281rel_CFGraph_edge_db08b41d50d8a475(mk<t_btree_iiii__0_1_2_3__1110__1111::Type>()),
1282wrapper_rel_CFGraph_edge_db08b41d50d8a475(1, *rel_CFGraph_edge_db08b41d50d8a475, *this, "CFGraph.edge", std::array<const char *,4>{{"s:Function","i:Statement","s:Function","i:Statement"}}, std::array<const char *,4>{{"f","u","g","v"}}, 0),
1283rel_CFGraph_reachable_c344462befee4909(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1284wrapper_rel_CFGraph_reachable_c344462befee4909(2, *rel_CFGraph_reachable_c344462befee4909, *this, "CFGraph.reachable", std::array<const char *,4>{{"s:Function","i:Statement","s:Function","i:Statement"}}, std::array<const char *,4>{{"f","u","g","v"}}, 0),
1285rel_delta_CFGraph_reachable_3f3bf343bbb37861(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1286rel_new_CFGraph_reachable_c98538911662603c(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1287rel_assign_e4bb6e0824a16a37(mk<t_btree_iiii__0_1_2_3__1000__1111::Type>()),
1288wrapper_rel_assign_e4bb6e0824a16a37(3, *rel_assign_e4bb6e0824a16a37, *this, "assign", std::array<const char *,4>{{"s:Function","i:Statement","+:Reference","+:Reference"}}, std::array<const char *,4>{{"f","s","a","b"}}, 0),
1289rel_define_04bf38853652ecf1(mk<t_btree_iii__0_1_2__111::Type>()),
1290wrapper_rel_define_04bf38853652ecf1(4, *rel_define_04bf38853652ecf1, *this, "define", std::array<const char *,3>{{"s:Function","i:Statement","+:Reference"}}, std::array<const char *,3>{{"f","s","r"}}, 0),
1291rel_alias_36893f0f24e80d93(mk<t_btree_iiiiii__0_1_2_3_4_5__111111::Type>()),
1292wrapper_rel_alias_36893f0f24e80d93(5, *rel_alias_36893f0f24e80d93, *this, "alias", std::array<const char *,6>{{"s:Function","i:Statement","+:Reference","s:Function","i:Statement","+:Reference"}}, std::array<const char *,6>{{"f","sf","a","g","sg","b"}}, 0),
1293stratum_CFGraph_edge_656704795f0096ba(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_CFGraph_edge_db08b41d50d8a475,*rel_cf_edge_4931a04c8c74bb72),
1294stratum_CFGraph_reachable_a1359c86b6f7bd73(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_delta_CFGraph_reachable_3f3bf343bbb37861,*rel_new_CFGraph_reachable_c98538911662603c,*rel_CFGraph_edge_db08b41d50d8a475,*rel_CFGraph_reachable_c344462befee4909),
1295stratum_alias_0179d0f4f86c77c2(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_CFGraph_reachable_c344462befee4909,*rel_alias_36893f0f24e80d93,*rel_assign_e4bb6e0824a16a37,*rel_define_04bf38853652ecf1),
1296stratum_assign_f550d366a9215d2a(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37),
1297stratum_cf_edge_4017fef287699967(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_cf_edge_4931a04c8c74bb72),
1298stratum_define_ab922eb7ee2d8992(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37,*rel_define_04bf38853652ecf1){
1299addRelation("cf_edge", wrapper_rel_cf_edge_4931a04c8c74bb72, true, false);
1300addRelation("CFGraph.edge", wrapper_rel_CFGraph_edge_db08b41d50d8a475, false, false);
1301addRelation("CFGraph.reachable", wrapper_rel_CFGraph_reachable_c344462befee4909, false, false);
1302addRelation("assign", wrapper_rel_assign_e4bb6e0824a16a37, true, false);
1303addRelation("define", wrapper_rel_define_04bf38853652ecf1, true, false);
1304addRelation("alias", wrapper_rel_alias_36893f0f24e80d93, false, true);
1305}
1306
1307 Sf__::~Sf__(){
1308}
1309
1310void Sf__::runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1311
1312 this->inputDirectory = std::move(inputDirectoryArg);
1313 this->outputDirectory = std::move(outputDirectoryArg);
1314 this->performIO = performIOArg;
1315 this->pruneImdtRels = pruneImdtRelsArg;
1316
1317 // set default threads (in embedded mode)
1318 // if this is not set, and omp is used, the default omp setting of number of cores is used.
1319#if defined(_OPENMP)
1320 if (0 < getNumThreads()) { omp_set_num_threads(static_cast<int>(getNumThreads())); }
1321#endif
1322
1323 signalHandler->set();
1324// -- query evaluation --
1325{
1326 std::vector<RamDomain> args, ret;
1327stratum_cf_edge_4017fef287699967.run(args, ret);
1328}
1329{
1330 std::vector<RamDomain> args, ret;
1331stratum_CFGraph_edge_656704795f0096ba.run(args, ret);
1332}
1333{
1334 std::vector<RamDomain> args, ret;
1335stratum_CFGraph_reachable_a1359c86b6f7bd73.run(args, ret);
1336}
1337{
1338 std::vector<RamDomain> args, ret;
1339stratum_assign_f550d366a9215d2a.run(args, ret);
1340}
1341{
1342 std::vector<RamDomain> args, ret;
1343stratum_define_ab922eb7ee2d8992.run(args, ret);
1344}
1345{
1346 std::vector<RamDomain> args, ret;
1347stratum_alias_0179d0f4f86c77c2.run(args, ret);
1348}
1349
1350// -- relation hint statistics --
1351signalHandler->reset();
1352}
1353
1354void Sf__::run(){
1355runFunction("", "", false, false);
1356}
1357
1358void Sf__::runAll(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1359runFunction(inputDirectoryArg, outputDirectoryArg, performIOArg, pruneImdtRelsArg);
1360}
1361
1362void Sf__::printAll([[maybe_unused]] std::string outputDirectoryArg){
1363try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\tsf\ta\tg\tsg\tb"},{"auxArity","0"},{"name","alias"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 6, \"params\": [\"f\", \"sf\", \"a\", \"g\", \"sg\", \"b\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 6, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1364if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1365IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1366} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1367}
1368
1369void Sf__::loadAll([[maybe_unused]] std::string inputDirectoryArg){
1370try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts1\ts2"},{"auxArity","0"},{"fact-dir","."},{"name","cf_edge"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s1\", \"s2\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}"}});
1371if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1372IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1373} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1374exit(1);
1375}
1376try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr"},{"auxArity","0"},{"fact-dir","."},{"name","define"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1377if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1378IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_define_04bf38853652ecf1);
1379} catch (std::exception& e) {std::cerr << "Error loading define data: " << e.what() << '\n';
1380exit(1);
1381}
1382try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\ta\tb"},{"auxArity","0"},{"fact-dir","."},{"name","assign"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 4, \"params\": [\"f\", \"s\", \"a\", \"b\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"Member\", \"types\": [\"s:symbol\", \"s:symbol\"]}, {\"name\": \"Variable\", \"types\": [\"s:symbol\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 4, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Reference\"]}}"}});
1383if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1384IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1385} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1386exit(1);
1387}
1388}
1389
1390void Sf__::dumpInputs(){
1391try {std::map<std::string, std::string> rwOperation;
1392rwOperation["IO"] = "stdout";
1393rwOperation["name"] = "cf_edge";
1394rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}";
1395IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_cf_edge_4931a04c8c74bb72);
1396} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1397try {std::map<std::string, std::string> rwOperation;
1398rwOperation["IO"] = "stdout";
1399rwOperation["name"] = "define";
1400rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1401IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_define_04bf38853652ecf1);
1402} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1403try {std::map<std::string, std::string> rwOperation;
1404rwOperation["IO"] = "stdout";
1405rwOperation["name"] = "assign";
1406rwOperation["types"] = "{\"relation\": {\"arity\": 4, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Reference\"]}}";
1407IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_assign_e4bb6e0824a16a37);
1408} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1409}
1410
1411void Sf__::dumpOutputs(){
1412try {std::map<std::string, std::string> rwOperation;
1413rwOperation["IO"] = "stdout";
1414rwOperation["name"] = "alias";
1415rwOperation["types"] = "{\"relation\": {\"arity\": 6, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1416IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1417} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1418}
1419
1420SymbolTable& Sf__::getSymbolTable(){
1421return symTable;
1422}
1423
1424RecordTable& Sf__::getRecordTable(){
1425return recordTable;
1426}
1427
1428void Sf__::setNumThreads(std::size_t numThreadsValue){
1429SouffleProgram::setNumThreads(numThreadsValue);
1430symTable.setNumLanes(getNumThreads());
1431recordTable.setNumLanes(getNumThreads());
1432regexCache.setNumLanes(getNumThreads());
1433}
1434
1435void Sf__::executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret){
1436if (name == "CFGraph.edge") {
1437stratum_CFGraph_edge_656704795f0096ba.run(args, ret);
1438return;}
1439if (name == "CFGraph.reachable") {
1440stratum_CFGraph_reachable_a1359c86b6f7bd73.run(args, ret);
1441return;}
1442if (name == "alias") {
1443stratum_alias_0179d0f4f86c77c2.run(args, ret);
1444return;}
1445if (name == "assign") {
1446stratum_assign_f550d366a9215d2a.run(args, ret);
1447return;}
1448if (name == "cf_edge") {
1449stratum_cf_edge_4017fef287699967.run(args, ret);
1450return;}
1451if (name == "define") {
1452stratum_define_ab922eb7ee2d8992.run(args, ret);
1453return;}
1454fatal(("unknown subroutine " + name).c_str());
1455}
1456
1457} // namespace souffle
1458namespace souffle {
1459SouffleProgram *newInstance__(){return new souffle::Sf__;}
1460SymbolTable *getST__(SouffleProgram *p){return &reinterpret_cast<souffle::Sf__*>(p)->getSymbolTable();}
1461} // namespace souffle
1462
1463#ifndef __EMBEDDED_SOUFFLE__
1464#include "souffle/CompiledOptions.h"
1465int main(int argc, char** argv)
1466{
1467try{
1468souffle::CmdOptions opt(R"(mycpp/datalog/dataflow.dl)",
1469R"()",
1470R"()",
1471false,
1472R"()",
14731);
1474if (!opt.parse(argc,argv)) return 1;
1475souffle::Sf__ obj;
1476#if defined(_OPENMP)
1477obj.setNumThreads(opt.getNumJobs());
1478
1479#endif
1480obj.runAll(opt.getInputFileDir(), opt.getOutputFileDir());
1481return 0;
1482} catch(std::exception &e) { souffle::SignalHandler::instance()->error(e.what());}
1483}
1484#endif
1485
1486namespace souffle {
1487using namespace souffle;
1488class factory_Sf__: souffle::ProgramFactory {
1489public:
1490souffle::SouffleProgram* newInstance();
1491 factory_Sf__();
1492private:
1493};
1494} // namespace souffle
1495namespace souffle {
1496using namespace souffle;
1497souffle::SouffleProgram* factory_Sf__::newInstance(){
1498return new souffle::Sf__();
1499}
1500
1501 factory_Sf__::factory_Sf__():
1502souffle::ProgramFactory("_"){
1503}
1504
1505} // namespace souffle
1506namespace souffle {
1507
1508#ifdef __EMBEDDED_SOUFFLE__
1509extern "C" {
1510souffle::factory_Sf__ __factory_Sf___instance;
1511}
1512#endif
1513} // namespace souffle
1514