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

1763 lines, 1386 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_2_1_3_4_5__111111__101000 {
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[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 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[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((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[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(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;
601range<t_ind_0::iterator> lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper, context& h) const;
602range<t_ind_0::iterator> lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper) const;
603bool empty() const;
604std::vector<range<iterator>> partition() const;
605void purge();
606iterator begin() const;
607iterator end() const;
608void printStatistics(std::ostream& o) const;
609};
610} // namespace souffle::t_btree_iiiiii__0_2_1_3_4_5__111111__101000
611namespace souffle::t_btree_iiiiii__0_2_1_3_4_5__111111__101000 {
612using namespace souffle;
613using t_ind_0 = Type::t_ind_0;
614using iterator = Type::iterator;
615using context = Type::context;
616bool Type::insert(const t_tuple& t) {
617context h;
618return insert(t, h);
619}
620bool Type::insert(const t_tuple& t, context& h) {
621if (ind_0.insert(t, h.hints_0_lower)) {
622return true;
623} else return false;
624}
625bool Type::insert(const RamDomain* ramDomain) {
626RamDomain data[6];
627std::copy(ramDomain, ramDomain + 6, data);
628const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
629context h;
630return insert(tuple, h);
631}
632bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4,RamDomain a5) {
633RamDomain data[6] = {a0,a1,a2,a3,a4,a5};
634return insert(data);
635}
636bool Type::contains(const t_tuple& t, context& h) const {
637return ind_0.contains(t, h.hints_0_lower);
638}
639bool Type::contains(const t_tuple& t) const {
640context h;
641return contains(t, h);
642}
643std::size_t Type::size() const {
644return ind_0.size();
645}
646iterator Type::find(const t_tuple& t, context& h) const {
647return ind_0.find(t, h.hints_0_lower);
648}
649iterator Type::find(const t_tuple& t) const {
650context h;
651return find(t, h);
652}
653range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
654return range<iterator>(ind_0.begin(),ind_0.end());
655}
656range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
657return range<iterator>(ind_0.begin(),ind_0.end());
658}
659range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper, context& h) const {
660t_comparator_0 comparator;
661int cmp = comparator(lower, upper);
662if (cmp == 0) {
663 auto pos = ind_0.find(lower, h.hints_0_lower);
664 auto fin = ind_0.end();
665 if (pos != fin) {fin = pos; ++fin;}
666 return make_range(pos, fin);
667}
668if (cmp > 0) {
669 return make_range(ind_0.end(), ind_0.end());
670}
671return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
672}
673range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper) const {
674context h;
675return lowerUpperRange_111111(lower,upper,h);
676}
677range<t_ind_0::iterator> Type::lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper, context& h) const {
678t_comparator_0 comparator;
679int cmp = comparator(lower, upper);
680if (cmp > 0) {
681 return make_range(ind_0.end(), ind_0.end());
682}
683return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
684}
685range<t_ind_0::iterator> Type::lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper) const {
686context h;
687return lowerUpperRange_101000(lower,upper,h);
688}
689bool Type::empty() const {
690return ind_0.empty();
691}
692std::vector<range<iterator>> Type::partition() const {
693return ind_0.getChunks(400);
694}
695void Type::purge() {
696ind_0.clear();
697}
698iterator Type::begin() const {
699return ind_0.begin();
700}
701iterator Type::end() const {
702return ind_0.end();
703}
704void Type::printStatistics(std::ostream& o) const {
705o << " arity 6 direct b-tree index 0 lex-order [0,2,1,3,4,5]\n";
706ind_0.printStats(o);
707}
708} // namespace souffle::t_btree_iiiiii__0_2_1_3_4_5__111111__101000
709namespace souffle::t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111 {
710using namespace souffle;
711struct Type {
712static constexpr Relation::arity_type Arity = 6;
713using t_tuple = Tuple<RamDomain, 6>;
714struct t_comparator_0{
715 int operator()(const t_tuple& a, const t_tuple& b) const {
716 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 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 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :(0))))));
717 }
718bool less(const t_tuple& a, const t_tuple& b) const {
719 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((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]))|| ((ramBitCast<RamSigned>(a[5]) == ramBitCast<RamSigned>(b[5])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))))))))))));
720 }
721bool equal(const t_tuple& a, const t_tuple& b) const {
722return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(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]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]));
723 }
724};
725using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
726t_ind_0 ind_0;
727using iterator = t_ind_0::iterator;
728struct context {
729t_ind_0::operation_hints hints_0_lower;
730t_ind_0::operation_hints hints_0_upper;
731};
732context createContext() { return context(); }
733bool insert(const t_tuple& t);
734bool insert(const t_tuple& t, context& h);
735bool insert(const RamDomain* ramDomain);
736bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4,RamDomain a5);
737bool contains(const t_tuple& t, context& h) const;
738bool contains(const t_tuple& t) const;
739std::size_t size() const;
740iterator find(const t_tuple& t, context& h) const;
741iterator find(const t_tuple& t) const;
742range<iterator> lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
743range<iterator> lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
744range<t_ind_0::iterator> lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper, context& h) const;
745range<t_ind_0::iterator> lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper) const;
746range<t_ind_0::iterator> lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper, context& h) const;
747range<t_ind_0::iterator> lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper) const;
748range<t_ind_0::iterator> lowerUpperRange_101111(const t_tuple& lower, const t_tuple& upper, context& h) const;
749range<t_ind_0::iterator> lowerUpperRange_101111(const t_tuple& lower, const t_tuple& upper) const;
750bool empty() const;
751std::vector<range<iterator>> partition() const;
752void purge();
753iterator begin() const;
754iterator end() const;
755void printStatistics(std::ostream& o) const;
756};
757} // namespace souffle::t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111
758namespace souffle::t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111 {
759using namespace souffle;
760using t_ind_0 = Type::t_ind_0;
761using iterator = Type::iterator;
762using context = Type::context;
763bool Type::insert(const t_tuple& t) {
764context h;
765return insert(t, h);
766}
767bool Type::insert(const t_tuple& t, context& h) {
768if (ind_0.insert(t, h.hints_0_lower)) {
769return true;
770} else return false;
771}
772bool Type::insert(const RamDomain* ramDomain) {
773RamDomain data[6];
774std::copy(ramDomain, ramDomain + 6, data);
775const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
776context h;
777return insert(tuple, h);
778}
779bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4,RamDomain a5) {
780RamDomain data[6] = {a0,a1,a2,a3,a4,a5};
781return insert(data);
782}
783bool Type::contains(const t_tuple& t, context& h) const {
784return ind_0.contains(t, h.hints_0_lower);
785}
786bool Type::contains(const t_tuple& t) const {
787context h;
788return contains(t, h);
789}
790std::size_t Type::size() const {
791return ind_0.size();
792}
793iterator Type::find(const t_tuple& t, context& h) const {
794return ind_0.find(t, h.hints_0_lower);
795}
796iterator Type::find(const t_tuple& t) const {
797context h;
798return find(t, h);
799}
800range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
801return range<iterator>(ind_0.begin(),ind_0.end());
802}
803range<iterator> Type::lowerUpperRange_000000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
804return range<iterator>(ind_0.begin(),ind_0.end());
805}
806range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper, context& h) const {
807t_comparator_0 comparator;
808int cmp = comparator(lower, upper);
809if (cmp == 0) {
810 auto pos = ind_0.find(lower, h.hints_0_lower);
811 auto fin = ind_0.end();
812 if (pos != fin) {fin = pos; ++fin;}
813 return make_range(pos, fin);
814}
815if (cmp > 0) {
816 return make_range(ind_0.end(), ind_0.end());
817}
818return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
819}
820range<t_ind_0::iterator> Type::lowerUpperRange_111111(const t_tuple& lower, const t_tuple& upper) const {
821context h;
822return lowerUpperRange_111111(lower,upper,h);
823}
824range<t_ind_0::iterator> Type::lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper, context& h) const {
825t_comparator_0 comparator;
826int cmp = comparator(lower, upper);
827if (cmp > 0) {
828 return make_range(ind_0.end(), ind_0.end());
829}
830return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
831}
832range<t_ind_0::iterator> Type::lowerUpperRange_101000(const t_tuple& lower, const t_tuple& upper) const {
833context h;
834return lowerUpperRange_101000(lower,upper,h);
835}
836range<t_ind_0::iterator> Type::lowerUpperRange_101111(const t_tuple& lower, const t_tuple& upper, context& h) const {
837t_comparator_0 comparator;
838int cmp = comparator(lower, upper);
839if (cmp > 0) {
840 return make_range(ind_0.end(), ind_0.end());
841}
842return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
843}
844range<t_ind_0::iterator> Type::lowerUpperRange_101111(const t_tuple& lower, const t_tuple& upper) const {
845context h;
846return lowerUpperRange_101111(lower,upper,h);
847}
848bool Type::empty() const {
849return ind_0.empty();
850}
851std::vector<range<iterator>> Type::partition() const {
852return ind_0.getChunks(400);
853}
854void Type::purge() {
855ind_0.clear();
856}
857iterator Type::begin() const {
858return ind_0.begin();
859}
860iterator Type::end() const {
861return ind_0.end();
862}
863void Type::printStatistics(std::ostream& o) const {
864o << " arity 6 direct b-tree index 0 lex-order [0,2,3,4,5,1]\n";
865ind_0.printStats(o);
866}
867} // namespace souffle::t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111
868namespace souffle {
869using namespace souffle;
870class Stratum_CFGraph_edge_4d26e319bb257c49 {
871public:
872 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);
873void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
874private:
875SymbolTable& symTable;
876RecordTable& recordTable;
877ConcurrentCache<std::string,std::regex>& regexCache;
878bool& pruneImdtRels;
879bool& performIO;
880SignalHandler*& signalHandler;
881std::atomic<std::size_t>& iter;
882std::atomic<RamDomain>& ctr;
883std::string& inputDirectory;
884std::string& outputDirectory;
885t_btree_iiii__0_1_2_3__1110__1111::Type* rel_CFGraph_edge_db08b41d50d8a475;
886t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
887};
888} // namespace souffle
889namespace souffle {
890using namespace souffle;
891 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):
892symTable(symTable),
893recordTable(recordTable),
894regexCache(regexCache),
895pruneImdtRels(pruneImdtRels),
896performIO(performIO),
897signalHandler(signalHandler),
898iter(iter),
899ctr(ctr),
900inputDirectory(inputDirectory),
901outputDirectory(outputDirectory),
902rel_CFGraph_edge_db08b41d50d8a475(&rel_CFGraph_edge_db08b41d50d8a475),
903rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72){
904}
905
906void Stratum_CFGraph_edge_4d26e319bb257c49::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
907signalHandler->setMsg(R"_(CFGraph.edge(f,s1,f,s2) :-
908 cf_edge(f,s1,s2).
909in file control-flow.dl [34:1-34:50])_");
910if(!(rel_cf_edge_4931a04c8c74bb72->empty())) {
911[&](){
912CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
913CREATE_OP_CONTEXT(rel_cf_edge_4931a04c8c74bb72_op_ctxt,rel_cf_edge_4931a04c8c74bb72->createContext());
914for(const auto& env0 : *rel_cf_edge_4931a04c8c74bb72) {
915Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env0[2])}};
916rel_CFGraph_edge_db08b41d50d8a475->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt));
917}
918}
919();}
920if (pruneImdtRels) rel_cf_edge_4931a04c8c74bb72->purge();
921}
922
923} // namespace souffle
924
925namespace souffle {
926using namespace souffle;
927class Stratum_CFGraph_reachable_7410d937e4ac8127 {
928public:
929 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);
930void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
931private:
932SymbolTable& symTable;
933RecordTable& recordTable;
934ConcurrentCache<std::string,std::regex>& regexCache;
935bool& pruneImdtRels;
936bool& performIO;
937SignalHandler*& signalHandler;
938std::atomic<std::size_t>& iter;
939std::atomic<RamDomain>& ctr;
940std::string& inputDirectory;
941std::string& outputDirectory;
942t_btree_iiii__0_1_2_3__1111::Type* rel_delta_CFGraph_reachable_3f3bf343bbb37861;
943t_btree_iiii__0_1_2_3__1111::Type* rel_new_CFGraph_reachable_c98538911662603c;
944t_btree_iiii__0_1_2_3__1110__1111::Type* rel_CFGraph_edge_db08b41d50d8a475;
945t_btree_iiii__0_1_2_3__1111::Type* rel_CFGraph_reachable_c344462befee4909;
946};
947} // namespace souffle
948namespace souffle {
949using namespace souffle;
950 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):
951symTable(symTable),
952recordTable(recordTable),
953regexCache(regexCache),
954pruneImdtRels(pruneImdtRels),
955performIO(performIO),
956signalHandler(signalHandler),
957iter(iter),
958ctr(ctr),
959inputDirectory(inputDirectory),
960outputDirectory(outputDirectory),
961rel_delta_CFGraph_reachable_3f3bf343bbb37861(&rel_delta_CFGraph_reachable_3f3bf343bbb37861),
962rel_new_CFGraph_reachable_c98538911662603c(&rel_new_CFGraph_reachable_c98538911662603c),
963rel_CFGraph_edge_db08b41d50d8a475(&rel_CFGraph_edge_db08b41d50d8a475),
964rel_CFGraph_reachable_c344462befee4909(&rel_CFGraph_reachable_c344462befee4909){
965}
966
967void Stratum_CFGraph_reachable_7410d937e4ac8127::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
968signalHandler->setMsg(R"_(CFGraph.reachable(f,s1,g,s2) :-
969 CFGraph.edge(f,s1,g,s2).
970in file control-flow.dl [15:2-15:48])_");
971if(!(rel_CFGraph_edge_db08b41d50d8a475->empty())) {
972[&](){
973CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
974CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
975for(const auto& env0 : *rel_CFGraph_edge_db08b41d50d8a475) {
976Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
977rel_CFGraph_reachable_c344462befee4909->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt));
978}
979}
980();}
981[&](){
982CREATE_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt,rel_delta_CFGraph_reachable_3f3bf343bbb37861->createContext());
983CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
984for(const auto& env0 : *rel_CFGraph_reachable_c344462befee4909) {
985Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
986rel_delta_CFGraph_reachable_3f3bf343bbb37861->insert(tuple,READ_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt));
987}
988}
989();auto loop_counter = RamUnsigned(1);
990iter = 0;
991for(;;) {
992signalHandler->setMsg(R"_(CFGraph.reachable(f,s1,f,s3) :-
993 CFGraph.reachable(f,s1,f,s2),
994 CFGraph.edge(f,s2,f,s3).
995in file control-flow.dl [16:2-16:73])_");
996if(!(rel_delta_CFGraph_reachable_3f3bf343bbb37861->empty()) && !(rel_CFGraph_edge_db08b41d50d8a475->empty())) {
997[&](){
998CREATE_OP_CONTEXT(rel_delta_CFGraph_reachable_3f3bf343bbb37861_op_ctxt,rel_delta_CFGraph_reachable_3f3bf343bbb37861->createContext());
999CREATE_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt,rel_new_CFGraph_reachable_c98538911662603c->createContext());
1000CREATE_OP_CONTEXT(rel_CFGraph_edge_db08b41d50d8a475_op_ctxt,rel_CFGraph_edge_db08b41d50d8a475->createContext());
1001CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
1002for(const auto& env0 : *rel_delta_CFGraph_reachable_3f3bf343bbb37861) {
1003if( (ramBitCast<RamDomain>(env0[0]) == ramBitCast<RamDomain>(env0[2]))) {
1004auto 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));
1005for(const auto& env1 : range) {
1006if( !(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)))) {
1007Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[0]),ramBitCast(env1[3])}};
1008rel_new_CFGraph_reachable_c98538911662603c->insert(tuple,READ_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt));
1009}
1010}
1011}
1012}
1013}
1014();}
1015if(rel_new_CFGraph_reachable_c98538911662603c->empty()) break;
1016[&](){
1017CREATE_OP_CONTEXT(rel_new_CFGraph_reachable_c98538911662603c_op_ctxt,rel_new_CFGraph_reachable_c98538911662603c->createContext());
1018CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
1019for(const auto& env0 : *rel_new_CFGraph_reachable_c98538911662603c) {
1020Tuple<RamDomain,4> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3])}};
1021rel_CFGraph_reachable_c344462befee4909->insert(tuple,READ_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt));
1022}
1023}
1024();std::swap(rel_delta_CFGraph_reachable_3f3bf343bbb37861, rel_new_CFGraph_reachable_c98538911662603c);
1025rel_new_CFGraph_reachable_c98538911662603c->purge();
1026loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
1027iter++;
1028}
1029iter = 0;
1030rel_delta_CFGraph_reachable_3f3bf343bbb37861->purge();
1031rel_new_CFGraph_reachable_c98538911662603c->purge();
1032if (pruneImdtRels) rel_CFGraph_edge_db08b41d50d8a475->purge();
1033}
1034
1035} // namespace souffle
1036
1037namespace souffle {
1038using namespace souffle;
1039class Stratum_alias_ba5aaebc28a379e5 {
1040public:
1041 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_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type& rel_delta_alias_1a64c49de7b5c1e9,t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type& rel_new_alias_025151f1f7ae88b8,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909,t_btree_iiiiii__0_2_1_3_4_5__111111__101000::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);
1042void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1043private:
1044SymbolTable& symTable;
1045RecordTable& recordTable;
1046ConcurrentCache<std::string,std::regex>& regexCache;
1047bool& pruneImdtRels;
1048bool& performIO;
1049SignalHandler*& signalHandler;
1050std::atomic<std::size_t>& iter;
1051std::atomic<RamDomain>& ctr;
1052std::string& inputDirectory;
1053std::string& outputDirectory;
1054t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type* rel_delta_alias_1a64c49de7b5c1e9;
1055t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type* rel_new_alias_025151f1f7ae88b8;
1056t_btree_iiii__0_1_2_3__1111::Type* rel_CFGraph_reachable_c344462befee4909;
1057t_btree_iiiiii__0_2_1_3_4_5__111111__101000::Type* rel_alias_36893f0f24e80d93;
1058t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
1059t_btree_iii__0_1_2__111::Type* rel_define_04bf38853652ecf1;
1060};
1061} // namespace souffle
1062namespace souffle {
1063using namespace souffle;
1064 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_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type& rel_delta_alias_1a64c49de7b5c1e9,t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type& rel_new_alias_025151f1f7ae88b8,t_btree_iiii__0_1_2_3__1111::Type& rel_CFGraph_reachable_c344462befee4909,t_btree_iiiiii__0_2_1_3_4_5__111111__101000::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):
1065symTable(symTable),
1066recordTable(recordTable),
1067regexCache(regexCache),
1068pruneImdtRels(pruneImdtRels),
1069performIO(performIO),
1070signalHandler(signalHandler),
1071iter(iter),
1072ctr(ctr),
1073inputDirectory(inputDirectory),
1074outputDirectory(outputDirectory),
1075rel_delta_alias_1a64c49de7b5c1e9(&rel_delta_alias_1a64c49de7b5c1e9),
1076rel_new_alias_025151f1f7ae88b8(&rel_new_alias_025151f1f7ae88b8),
1077rel_CFGraph_reachable_c344462befee4909(&rel_CFGraph_reachable_c344462befee4909),
1078rel_alias_36893f0f24e80d93(&rel_alias_36893f0f24e80d93),
1079rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1080rel_define_04bf38853652ecf1(&rel_define_04bf38853652ecf1){
1081}
1082
1083void Stratum_alias_ba5aaebc28a379e5::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1084signalHandler->setMsg(R"_(alias(f,s1,$Variable(v),f,s2,$Variable(v2)) :-
1085 define(f,s1,$Variable(v)),
1086 assign(f,s2,$Variable(v2),$Variable(v)),
1087 CFGraph.reachable(f,s1,f,s2).
1088in file dataflow.dl [36:1-39:34])_");
1089if(!(rel_assign_e4bb6e0824a16a37->empty()) && !(rel_CFGraph_reachable_c344462befee4909->empty()) && !(rel_define_04bf38853652ecf1->empty())) {
1090[&](){
1091CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
1092CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1093CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1094CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
1095for(const auto& env0 : *rel_define_04bf38853652ecf1) {
1096RamDomain const ref = env0[2];
1097if (ref == 0) continue;
1098const RamDomain *env1 = recordTable.unpack(ref,2);
1099{
1100if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1101auto 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));
1102for(const auto& env2 : range) {
1103if( 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))) {
1104RamDomain const ref = env2[2];
1105if (ref == 0) continue;
1106const RamDomain *env3 = recordTable.unpack(ref,2);
1107{
1108if( (ramBitCast<RamDomain>(env3[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1109RamDomain const ref = env2[3];
1110if (ref == 0) continue;
1111const RamDomain *env4 = recordTable.unpack(ref,2);
1112{
1113if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(1))) && (ramBitCast<RamDomain>(env1[1]) == ramBitCast<RamDomain>(env4[1]))) {
1114Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env1[1]))}}
1115)),ramBitCast(env0[0]),ramBitCast(env2[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env3[1]))}}
1116))}};
1117rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1118}
1119}
1120}
1121}
1122}
1123}
1124}
1125}
1126}
1127}
1128();}
1129signalHandler->setMsg(R"_(alias("<heap>",-1,$Member(c, m),f,s2,r) :-
1130 assign(_,_,$Member(c, m),_),
1131 assign(f,s2,r,$Member(c, m)).
1132in file dataflow.dl [45:1-47:34])_");
1133if(!(rel_assign_e4bb6e0824a16a37->empty())) {
1134[&](){
1135CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1136CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1137for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
1138RamDomain const ref = env0[2];
1139if (ref == 0) continue;
1140const RamDomain *env1 = recordTable.unpack(ref,2);
1141{
1142if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1143RamDomain const ref = env1[1];
1144if (ref == 0) continue;
1145const RamDomain *env2 = recordTable.unpack(ref,2);
1146{
1147for(const auto& env3 : *rel_assign_e4bb6e0824a16a37) {
1148RamDomain const ref = env3[3];
1149if (ref == 0) continue;
1150const RamDomain *env4 = recordTable.unpack(ref,2);
1151{
1152if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1153RamDomain const ref = env4[1];
1154if (ref == 0) continue;
1155const RamDomain *env5 = recordTable.unpack(ref,2);
1156{
1157if( (ramBitCast<RamDomain>(env2[1]) == ramBitCast<RamDomain>(env5[1])) && (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(env5[0]))) {
1158Tuple<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]))}}
1159)))}}
1160)),ramBitCast(env3[0]),ramBitCast(env3[1]),ramBitCast(env3[2])}};
1161rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1162}
1163}
1164}
1165}
1166}
1167}
1168}
1169}
1170}
1171}
1172();}
1173signalHandler->setMsg(R"_(alias(f,s1,$Variable(v),"<heap>",-1,$Member(c, m)) :-
1174 define(f,s1,$Variable(v)),
1175 assign(f,s2,$Member(c, m),$Variable(v)),
1176 CFGraph.reachable(f,s1,f,s2).
1177in file dataflow.dl [52:1-55:34])_");
1178if(!(rel_assign_e4bb6e0824a16a37->empty()) && !(rel_CFGraph_reachable_c344462befee4909->empty()) && !(rel_define_04bf38853652ecf1->empty())) {
1179[&](){
1180CREATE_OP_CONTEXT(rel_CFGraph_reachable_c344462befee4909_op_ctxt,rel_CFGraph_reachable_c344462befee4909->createContext());
1181CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1182CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1183CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
1184for(const auto& env0 : *rel_define_04bf38853652ecf1) {
1185RamDomain const ref = env0[2];
1186if (ref == 0) continue;
1187const RamDomain *env1 = recordTable.unpack(ref,2);
1188{
1189if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1190auto 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));
1191for(const auto& env2 : range) {
1192if( 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))) {
1193RamDomain const ref = env2[2];
1194if (ref == 0) continue;
1195const RamDomain *env3 = recordTable.unpack(ref,2);
1196{
1197if( (ramBitCast<RamDomain>(env3[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1198RamDomain const ref = env3[1];
1199if (ref == 0) continue;
1200const RamDomain *env4 = recordTable.unpack(ref,2);
1201{
1202RamDomain const ref = env2[3];
1203if (ref == 0) continue;
1204const RamDomain *env5 = recordTable.unpack(ref,2);
1205{
1206if( (ramBitCast<RamDomain>(env5[0]) == ramBitCast<RamDomain>(RamSigned(1))) && (ramBitCast<RamDomain>(env1[1]) == ramBitCast<RamDomain>(env5[1]))) {
1207Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env1[1]))}}
1208)),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]))}}
1209)))}}
1210))}};
1211rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1212}
1213}
1214}
1215}
1216}
1217}
1218}
1219}
1220}
1221}
1222}
1223();}
1224[&](){
1225CREATE_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt,rel_delta_alias_1a64c49de7b5c1e9->createContext());
1226CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1227for(const auto& env0 : *rel_alias_36893f0f24e80d93) {
1228Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3]),ramBitCast(env0[4]),ramBitCast(env0[5])}};
1229rel_delta_alias_1a64c49de7b5c1e9->insert(tuple,READ_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt));
1230}
1231}
1232();auto loop_counter = RamUnsigned(1);
1233iter = 0;
1234for(;;) {
1235signalHandler->setMsg(R"_(alias(f,s1,r,h,s2,r3) :-
1236 alias(f,s1,r,g,_,r2),
1237 alias(g,_,r2,h,s2,r3).
1238in file dataflow.dl [58:1-60:29])_");
1239if(!(rel_delta_alias_1a64c49de7b5c1e9->empty()) && !(rel_alias_36893f0f24e80d93->empty())) {
1240[&](){
1241CREATE_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt,rel_delta_alias_1a64c49de7b5c1e9->createContext());
1242CREATE_OP_CONTEXT(rel_new_alias_025151f1f7ae88b8_op_ctxt,rel_new_alias_025151f1f7ae88b8->createContext());
1243CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1244for(const auto& env0 : *rel_delta_alias_1a64c49de7b5c1e9) {
1245auto range = rel_alias_36893f0f24e80d93->lowerUpperRange_101000(Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1246for(const auto& env1 : range) {
1247if( !(rel_alias_36893f0f24e80d93->contains(Tuple<RamDomain,6>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env1[3]),ramBitCast(env1[4]),ramBitCast(env1[5])}},READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt))) && !(!rel_delta_alias_1a64c49de7b5c1e9->lowerUpperRange_101111(Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast(env1[3]), ramBitCast(env1[4]), ramBitCast(env1[5])}},Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast(env1[3]), ramBitCast(env1[4]), ramBitCast(env1[5])}},READ_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt)).empty())) {
1248Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env1[3]),ramBitCast(env1[4]),ramBitCast(env1[5])}};
1249rel_new_alias_025151f1f7ae88b8->insert(tuple,READ_OP_CONTEXT(rel_new_alias_025151f1f7ae88b8_op_ctxt));
1250}
1251}
1252}
1253}
1254();}
1255signalHandler->setMsg(R"_(alias(f,s1,r,h,s2,r3) :-
1256 alias(f,s1,r,g,_,r2),
1257 alias(g,_,r2,h,s2,r3).
1258in file dataflow.dl [58:1-60:29])_");
1259if(!(rel_alias_36893f0f24e80d93->empty()) && !(rel_delta_alias_1a64c49de7b5c1e9->empty())) {
1260[&](){
1261CREATE_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt,rel_delta_alias_1a64c49de7b5c1e9->createContext());
1262CREATE_OP_CONTEXT(rel_new_alias_025151f1f7ae88b8_op_ctxt,rel_new_alias_025151f1f7ae88b8->createContext());
1263CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1264for(const auto& env0 : *rel_alias_36893f0f24e80d93) {
1265auto range = rel_delta_alias_1a64c49de7b5c1e9->lowerUpperRange_101000(Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,6>{{ramBitCast(env0[3]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast(env0[5]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_delta_alias_1a64c49de7b5c1e9_op_ctxt));
1266for(const auto& env1 : range) {
1267if( !(rel_alias_36893f0f24e80d93->contains(Tuple<RamDomain,6>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env1[3]),ramBitCast(env1[4]),ramBitCast(env1[5])}},READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt)))) {
1268Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env1[3]),ramBitCast(env1[4]),ramBitCast(env1[5])}};
1269rel_new_alias_025151f1f7ae88b8->insert(tuple,READ_OP_CONTEXT(rel_new_alias_025151f1f7ae88b8_op_ctxt));
1270}
1271}
1272}
1273}
1274();}
1275if(rel_new_alias_025151f1f7ae88b8->empty()) break;
1276[&](){
1277CREATE_OP_CONTEXT(rel_new_alias_025151f1f7ae88b8_op_ctxt,rel_new_alias_025151f1f7ae88b8->createContext());
1278CREATE_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt,rel_alias_36893f0f24e80d93->createContext());
1279for(const auto& env0 : *rel_new_alias_025151f1f7ae88b8) {
1280Tuple<RamDomain,6> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2]),ramBitCast(env0[3]),ramBitCast(env0[4]),ramBitCast(env0[5])}};
1281rel_alias_36893f0f24e80d93->insert(tuple,READ_OP_CONTEXT(rel_alias_36893f0f24e80d93_op_ctxt));
1282}
1283}
1284();std::swap(rel_delta_alias_1a64c49de7b5c1e9, rel_new_alias_025151f1f7ae88b8);
1285rel_new_alias_025151f1f7ae88b8->purge();
1286loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
1287iter++;
1288}
1289iter = 0;
1290rel_delta_alias_1a64c49de7b5c1e9->purge();
1291rel_new_alias_025151f1f7ae88b8->purge();
1292if (performIO) {
1293try {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\"]}}"}});
1294if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1295else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1296IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1297} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1298}
1299if (pruneImdtRels) rel_CFGraph_reachable_c344462befee4909->purge();
1300if (pruneImdtRels) rel_assign_e4bb6e0824a16a37->purge();
1301if (pruneImdtRels) rel_define_04bf38853652ecf1->purge();
1302}
1303
1304} // namespace souffle
1305
1306namespace souffle {
1307using namespace souffle;
1308class Stratum_assign_e0d78e44f4df6411 {
1309public:
1310 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);
1311void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1312private:
1313SymbolTable& symTable;
1314RecordTable& recordTable;
1315ConcurrentCache<std::string,std::regex>& regexCache;
1316bool& pruneImdtRels;
1317bool& performIO;
1318SignalHandler*& signalHandler;
1319std::atomic<std::size_t>& iter;
1320std::atomic<RamDomain>& ctr;
1321std::string& inputDirectory;
1322std::string& outputDirectory;
1323t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
1324};
1325} // namespace souffle
1326namespace souffle {
1327using namespace souffle;
1328 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):
1329symTable(symTable),
1330recordTable(recordTable),
1331regexCache(regexCache),
1332pruneImdtRels(pruneImdtRels),
1333performIO(performIO),
1334signalHandler(signalHandler),
1335iter(iter),
1336ctr(ctr),
1337inputDirectory(inputDirectory),
1338outputDirectory(outputDirectory),
1339rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37){
1340}
1341
1342void Stratum_assign_e0d78e44f4df6411::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1343if (performIO) {
1344try {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\"]}}"}});
1345if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1346IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1347} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1348exit(1);
1349}
1350}
1351}
1352
1353} // namespace souffle
1354
1355namespace souffle {
1356using namespace souffle;
1357class Stratum_cf_edge_c2ae152829fd6f1f {
1358public:
1359 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);
1360void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1361private:
1362SymbolTable& symTable;
1363RecordTable& recordTable;
1364ConcurrentCache<std::string,std::regex>& regexCache;
1365bool& pruneImdtRels;
1366bool& performIO;
1367SignalHandler*& signalHandler;
1368std::atomic<std::size_t>& iter;
1369std::atomic<RamDomain>& ctr;
1370std::string& inputDirectory;
1371std::string& outputDirectory;
1372t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
1373};
1374} // namespace souffle
1375namespace souffle {
1376using namespace souffle;
1377 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):
1378symTable(symTable),
1379recordTable(recordTable),
1380regexCache(regexCache),
1381pruneImdtRels(pruneImdtRels),
1382performIO(performIO),
1383signalHandler(signalHandler),
1384iter(iter),
1385ctr(ctr),
1386inputDirectory(inputDirectory),
1387outputDirectory(outputDirectory),
1388rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72){
1389}
1390
1391void Stratum_cf_edge_c2ae152829fd6f1f::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1392if (performIO) {
1393try {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\"]}}"}});
1394if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1395IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1396} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1397exit(1);
1398}
1399}
1400}
1401
1402} // namespace souffle
1403
1404namespace souffle {
1405using namespace souffle;
1406class Stratum_define_391884c8e77907db {
1407public:
1408 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);
1409void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1410private:
1411SymbolTable& symTable;
1412RecordTable& recordTable;
1413ConcurrentCache<std::string,std::regex>& regexCache;
1414bool& pruneImdtRels;
1415bool& performIO;
1416SignalHandler*& signalHandler;
1417std::atomic<std::size_t>& iter;
1418std::atomic<RamDomain>& ctr;
1419std::string& inputDirectory;
1420std::string& outputDirectory;
1421t_btree_iiii__0_1_2_3__1000__1111::Type* rel_assign_e4bb6e0824a16a37;
1422t_btree_iii__0_1_2__111::Type* rel_define_04bf38853652ecf1;
1423};
1424} // namespace souffle
1425namespace souffle {
1426using namespace souffle;
1427 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):
1428symTable(symTable),
1429recordTable(recordTable),
1430regexCache(regexCache),
1431pruneImdtRels(pruneImdtRels),
1432performIO(performIO),
1433signalHandler(signalHandler),
1434iter(iter),
1435ctr(ctr),
1436inputDirectory(inputDirectory),
1437outputDirectory(outputDirectory),
1438rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1439rel_define_04bf38853652ecf1(&rel_define_04bf38853652ecf1){
1440}
1441
1442void Stratum_define_391884c8e77907db::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1443if (performIO) {
1444try {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\"]}}"}});
1445if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1446IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_define_04bf38853652ecf1);
1447} catch (std::exception& e) {std::cerr << "Error loading define data: " << e.what() << '\n';
1448exit(1);
1449}
1450}
1451signalHandler->setMsg(R"_(define(f,s,r) :-
1452 assign(f,s,r,_).
1453in file dataflow.dl [31:1-31:39])_");
1454if(!(rel_assign_e4bb6e0824a16a37->empty())) {
1455[&](){
1456CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1457CREATE_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt,rel_define_04bf38853652ecf1->createContext());
1458for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
1459Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1460rel_define_04bf38853652ecf1->insert(tuple,READ_OP_CONTEXT(rel_define_04bf38853652ecf1_op_ctxt));
1461}
1462}
1463();}
1464}
1465
1466} // namespace souffle
1467
1468namespace souffle {
1469using namespace souffle;
1470class Sf__: public SouffleProgram {
1471public:
1472 Sf__();
1473 ~Sf__();
1474void run();
1475void runAll(std::string inputDirectoryArg = "",std::string outputDirectoryArg = "",bool performIOArg = true,bool pruneImdtRelsArg = true);
1476void printAll([[maybe_unused]] std::string outputDirectoryArg = "");
1477void loadAll([[maybe_unused]] std::string inputDirectoryArg = "");
1478void dumpInputs();
1479void dumpOutputs();
1480SymbolTable& getSymbolTable();
1481RecordTable& getRecordTable();
1482void setNumThreads(std::size_t numThreadsValue);
1483void executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret);
1484private:
1485void runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg);
1486SymbolTableImpl symTable;
1487SpecializedRecordTable<0,2> recordTable;
1488ConcurrentCache<std::string,std::regex> regexCache;
1489Own<t_btree_iii__0_1_2__111::Type> rel_cf_edge_4931a04c8c74bb72;
1490souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_cf_edge_4931a04c8c74bb72;
1491Own<t_btree_iiii__0_1_2_3__1110__1111::Type> rel_CFGraph_edge_db08b41d50d8a475;
1492souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1110__1111::Type> wrapper_rel_CFGraph_edge_db08b41d50d8a475;
1493Own<t_btree_iiii__0_1_2_3__1111::Type> rel_CFGraph_reachable_c344462befee4909;
1494souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1111::Type> wrapper_rel_CFGraph_reachable_c344462befee4909;
1495Own<t_btree_iiii__0_1_2_3__1111::Type> rel_delta_CFGraph_reachable_3f3bf343bbb37861;
1496Own<t_btree_iiii__0_1_2_3__1111::Type> rel_new_CFGraph_reachable_c98538911662603c;
1497Own<t_btree_iiii__0_1_2_3__1000__1111::Type> rel_assign_e4bb6e0824a16a37;
1498souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1000__1111::Type> wrapper_rel_assign_e4bb6e0824a16a37;
1499Own<t_btree_iii__0_1_2__111::Type> rel_define_04bf38853652ecf1;
1500souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_define_04bf38853652ecf1;
1501Own<t_btree_iiiiii__0_2_1_3_4_5__111111__101000::Type> rel_alias_36893f0f24e80d93;
1502souffle::RelationWrapper<t_btree_iiiiii__0_2_1_3_4_5__111111__101000::Type> wrapper_rel_alias_36893f0f24e80d93;
1503Own<t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type> rel_delta_alias_1a64c49de7b5c1e9;
1504Own<t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type> rel_new_alias_025151f1f7ae88b8;
1505Stratum_CFGraph_edge_4d26e319bb257c49 stratum_CFGraph_edge_656704795f0096ba;
1506Stratum_CFGraph_reachable_7410d937e4ac8127 stratum_CFGraph_reachable_a1359c86b6f7bd73;
1507Stratum_alias_ba5aaebc28a379e5 stratum_alias_0179d0f4f86c77c2;
1508Stratum_assign_e0d78e44f4df6411 stratum_assign_f550d366a9215d2a;
1509Stratum_cf_edge_c2ae152829fd6f1f stratum_cf_edge_4017fef287699967;
1510Stratum_define_391884c8e77907db stratum_define_ab922eb7ee2d8992;
1511std::string inputDirectory;
1512std::string outputDirectory;
1513SignalHandler* signalHandler{SignalHandler::instance()};
1514std::atomic<RamDomain> ctr{};
1515std::atomic<std::size_t> iter{};
1516};
1517} // namespace souffle
1518namespace souffle {
1519using namespace souffle;
1520 Sf__::Sf__():
1521symTable({
1522 R"_(<heap>)_",
1523}),
1524recordTable(),
1525regexCache(),
1526rel_cf_edge_4931a04c8c74bb72(mk<t_btree_iii__0_1_2__111::Type>()),
1527wrapper_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),
1528rel_CFGraph_edge_db08b41d50d8a475(mk<t_btree_iiii__0_1_2_3__1110__1111::Type>()),
1529wrapper_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),
1530rel_CFGraph_reachable_c344462befee4909(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1531wrapper_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),
1532rel_delta_CFGraph_reachable_3f3bf343bbb37861(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1533rel_new_CFGraph_reachable_c98538911662603c(mk<t_btree_iiii__0_1_2_3__1111::Type>()),
1534rel_assign_e4bb6e0824a16a37(mk<t_btree_iiii__0_1_2_3__1000__1111::Type>()),
1535wrapper_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),
1536rel_define_04bf38853652ecf1(mk<t_btree_iii__0_1_2__111::Type>()),
1537wrapper_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),
1538rel_alias_36893f0f24e80d93(mk<t_btree_iiiiii__0_2_1_3_4_5__111111__101000::Type>()),
1539wrapper_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),
1540rel_delta_alias_1a64c49de7b5c1e9(mk<t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type>()),
1541rel_new_alias_025151f1f7ae88b8(mk<t_btree_iiiiii__0_2_3_4_5_1__111111__101000__101111::Type>()),
1542stratum_CFGraph_edge_656704795f0096ba(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_CFGraph_edge_db08b41d50d8a475,*rel_cf_edge_4931a04c8c74bb72),
1543stratum_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),
1544stratum_alias_0179d0f4f86c77c2(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_delta_alias_1a64c49de7b5c1e9,*rel_new_alias_025151f1f7ae88b8,*rel_CFGraph_reachable_c344462befee4909,*rel_alias_36893f0f24e80d93,*rel_assign_e4bb6e0824a16a37,*rel_define_04bf38853652ecf1),
1545stratum_assign_f550d366a9215d2a(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37),
1546stratum_cf_edge_4017fef287699967(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_cf_edge_4931a04c8c74bb72),
1547stratum_define_ab922eb7ee2d8992(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37,*rel_define_04bf38853652ecf1){
1548addRelation("cf_edge", wrapper_rel_cf_edge_4931a04c8c74bb72, true, false);
1549addRelation("CFGraph.edge", wrapper_rel_CFGraph_edge_db08b41d50d8a475, false, false);
1550addRelation("CFGraph.reachable", wrapper_rel_CFGraph_reachable_c344462befee4909, false, false);
1551addRelation("assign", wrapper_rel_assign_e4bb6e0824a16a37, true, false);
1552addRelation("define", wrapper_rel_define_04bf38853652ecf1, true, false);
1553addRelation("alias", wrapper_rel_alias_36893f0f24e80d93, false, true);
1554}
1555
1556 Sf__::~Sf__(){
1557}
1558
1559void Sf__::runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1560
1561 this->inputDirectory = std::move(inputDirectoryArg);
1562 this->outputDirectory = std::move(outputDirectoryArg);
1563 this->performIO = performIOArg;
1564 this->pruneImdtRels = pruneImdtRelsArg;
1565
1566 // set default threads (in embedded mode)
1567 // if this is not set, and omp is used, the default omp setting of number of cores is used.
1568#if defined(_OPENMP)
1569 if (0 < getNumThreads()) { omp_set_num_threads(static_cast<int>(getNumThreads())); }
1570#endif
1571
1572 signalHandler->set();
1573// -- query evaluation --
1574{
1575 std::vector<RamDomain> args, ret;
1576stratum_cf_edge_4017fef287699967.run(args, ret);
1577}
1578{
1579 std::vector<RamDomain> args, ret;
1580stratum_CFGraph_edge_656704795f0096ba.run(args, ret);
1581}
1582{
1583 std::vector<RamDomain> args, ret;
1584stratum_CFGraph_reachable_a1359c86b6f7bd73.run(args, ret);
1585}
1586{
1587 std::vector<RamDomain> args, ret;
1588stratum_assign_f550d366a9215d2a.run(args, ret);
1589}
1590{
1591 std::vector<RamDomain> args, ret;
1592stratum_define_ab922eb7ee2d8992.run(args, ret);
1593}
1594{
1595 std::vector<RamDomain> args, ret;
1596stratum_alias_0179d0f4f86c77c2.run(args, ret);
1597}
1598
1599// -- relation hint statistics --
1600signalHandler->reset();
1601}
1602
1603void Sf__::run(){
1604runFunction("", "", false, false);
1605}
1606
1607void Sf__::runAll(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1608runFunction(inputDirectoryArg, outputDirectoryArg, performIOArg, pruneImdtRelsArg);
1609}
1610
1611void Sf__::printAll([[maybe_unused]] std::string outputDirectoryArg){
1612try {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\"]}}"}});
1613if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1614IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1615} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1616}
1617
1618void Sf__::loadAll([[maybe_unused]] std::string inputDirectoryArg){
1619try {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\"]}}"}});
1620if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1621IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1622} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1623exit(1);
1624}
1625try {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\"]}}"}});
1626if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1627IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1628} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1629exit(1);
1630}
1631try {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\"]}}"}});
1632if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1633IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_define_04bf38853652ecf1);
1634} catch (std::exception& e) {std::cerr << "Error loading define data: " << e.what() << '\n';
1635exit(1);
1636}
1637}
1638
1639void Sf__::dumpInputs(){
1640try {std::map<std::string, std::string> rwOperation;
1641rwOperation["IO"] = "stdout";
1642rwOperation["name"] = "assign";
1643rwOperation["types"] = "{\"relation\": {\"arity\": 4, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Reference\"]}}";
1644IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_assign_e4bb6e0824a16a37);
1645} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1646try {std::map<std::string, std::string> rwOperation;
1647rwOperation["IO"] = "stdout";
1648rwOperation["name"] = "cf_edge";
1649rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}";
1650IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_cf_edge_4931a04c8c74bb72);
1651} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1652try {std::map<std::string, std::string> rwOperation;
1653rwOperation["IO"] = "stdout";
1654rwOperation["name"] = "define";
1655rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1656IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_define_04bf38853652ecf1);
1657} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1658}
1659
1660void Sf__::dumpOutputs(){
1661try {std::map<std::string, std::string> rwOperation;
1662rwOperation["IO"] = "stdout";
1663rwOperation["name"] = "alias";
1664rwOperation["types"] = "{\"relation\": {\"arity\": 6, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1665IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_alias_36893f0f24e80d93);
1666} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1667}
1668
1669SymbolTable& Sf__::getSymbolTable(){
1670return symTable;
1671}
1672
1673RecordTable& Sf__::getRecordTable(){
1674return recordTable;
1675}
1676
1677void Sf__::setNumThreads(std::size_t numThreadsValue){
1678SouffleProgram::setNumThreads(numThreadsValue);
1679symTable.setNumLanes(getNumThreads());
1680recordTable.setNumLanes(getNumThreads());
1681regexCache.setNumLanes(getNumThreads());
1682}
1683
1684void Sf__::executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret){
1685if (name == "CFGraph.edge") {
1686stratum_CFGraph_edge_656704795f0096ba.run(args, ret);
1687return;}
1688if (name == "CFGraph.reachable") {
1689stratum_CFGraph_reachable_a1359c86b6f7bd73.run(args, ret);
1690return;}
1691if (name == "alias") {
1692stratum_alias_0179d0f4f86c77c2.run(args, ret);
1693return;}
1694if (name == "assign") {
1695stratum_assign_f550d366a9215d2a.run(args, ret);
1696return;}
1697if (name == "cf_edge") {
1698stratum_cf_edge_4017fef287699967.run(args, ret);
1699return;}
1700if (name == "define") {
1701stratum_define_ab922eb7ee2d8992.run(args, ret);
1702return;}
1703fatal(("unknown subroutine " + name).c_str());
1704}
1705
1706} // namespace souffle
1707namespace souffle {
1708SouffleProgram *newInstance__(){return new souffle::Sf__;}
1709SymbolTable *getST__(SouffleProgram *p){return &reinterpret_cast<souffle::Sf__*>(p)->getSymbolTable();}
1710} // namespace souffle
1711
1712#ifndef __EMBEDDED_SOUFFLE__
1713#include "souffle/CompiledOptions.h"
1714int main(int argc, char** argv)
1715{
1716try{
1717souffle::CmdOptions opt(R"(mycpp/datalog/dataflow.dl)",
1718R"()",
1719R"()",
1720false,
1721R"()",
17221);
1723if (!opt.parse(argc,argv)) return 1;
1724souffle::Sf__ obj;
1725#if defined(_OPENMP)
1726obj.setNumThreads(opt.getNumJobs());
1727
1728#endif
1729obj.runAll(opt.getInputFileDir(), opt.getOutputFileDir());
1730return 0;
1731} catch(std::exception &e) { souffle::SignalHandler::instance()->error(e.what());}
1732}
1733#endif
1734
1735namespace souffle {
1736using namespace souffle;
1737class factory_Sf__: souffle::ProgramFactory {
1738public:
1739souffle::SouffleProgram* newInstance();
1740 factory_Sf__();
1741private:
1742};
1743} // namespace souffle
1744namespace souffle {
1745using namespace souffle;
1746souffle::SouffleProgram* factory_Sf__::newInstance(){
1747return new souffle::Sf__();
1748}
1749
1750 factory_Sf__::factory_Sf__():
1751souffle::ProgramFactory("_"){
1752}
1753
1754} // namespace souffle
1755namespace souffle {
1756
1757#ifdef __EMBEDDED_SOUFFLE__
1758extern "C" {
1759souffle::factory_Sf__ __factory_Sf___instance;
1760}
1761#endif
1762} // namespace souffle
1763