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

2072 lines, 1658 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_iiii__0_1_2_3__1110__1111__1100 {
13using namespace souffle;
14struct Type {
15static constexpr Relation::arity_type Arity = 4;
16using t_tuple = Tuple<RamDomain, 4>;
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 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 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]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))))))));
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]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]));
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,RamDomain a3);
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_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
46range<iterator> lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
47range<t_ind_0::iterator> lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper, context& h) const;
48range<t_ind_0::iterator> lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper) const;
49range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const;
50range<t_ind_0::iterator> lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const;
51range<t_ind_0::iterator> lowerUpperRange_1100(const t_tuple& lower, const t_tuple& upper, context& h) const;
52range<t_ind_0::iterator> lowerUpperRange_1100(const t_tuple& lower, const t_tuple& upper) const;
53bool empty() const;
54std::vector<range<iterator>> partition() const;
55void purge();
56iterator begin() const;
57iterator end() const;
58void printStatistics(std::ostream& o) const;
59};
60} // namespace souffle::t_btree_iiii__0_1_2_3__1110__1111__1100
61namespace souffle::t_btree_iiii__0_1_2_3__1110__1111__1100 {
62using namespace souffle;
63using t_ind_0 = Type::t_ind_0;
64using iterator = Type::iterator;
65using context = Type::context;
66bool Type::insert(const t_tuple& t) {
67context h;
68return insert(t, h);
69}
70bool Type::insert(const t_tuple& t, context& h) {
71if (ind_0.insert(t, h.hints_0_lower)) {
72return true;
73} else return false;
74}
75bool Type::insert(const RamDomain* ramDomain) {
76RamDomain data[4];
77std::copy(ramDomain, ramDomain + 4, data);
78const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
79context h;
80return insert(tuple, h);
81}
82bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3) {
83RamDomain data[4] = {a0,a1,a2,a3};
84return insert(data);
85}
86bool Type::contains(const t_tuple& t, context& h) const {
87return ind_0.contains(t, h.hints_0_lower);
88}
89bool Type::contains(const t_tuple& t) const {
90context h;
91return contains(t, h);
92}
93std::size_t Type::size() const {
94return ind_0.size();
95}
96iterator Type::find(const t_tuple& t, context& h) const {
97return ind_0.find(t, h.hints_0_lower);
98}
99iterator Type::find(const t_tuple& t) const {
100context h;
101return find(t, h);
102}
103range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
104return range<iterator>(ind_0.begin(),ind_0.end());
105}
106range<iterator> Type::lowerUpperRange_0000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
107return range<iterator>(ind_0.begin(),ind_0.end());
108}
109range<t_ind_0::iterator> Type::lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper, context& h) const {
110t_comparator_0 comparator;
111int cmp = comparator(lower, upper);
112if (cmp > 0) {
113 return make_range(ind_0.end(), ind_0.end());
114}
115return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
116}
117range<t_ind_0::iterator> Type::lowerUpperRange_1110(const t_tuple& lower, const t_tuple& upper) const {
118context h;
119return lowerUpperRange_1110(lower,upper,h);
120}
121range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper, context& h) const {
122t_comparator_0 comparator;
123int cmp = comparator(lower, upper);
124if (cmp == 0) {
125 auto pos = ind_0.find(lower, h.hints_0_lower);
126 auto fin = ind_0.end();
127 if (pos != fin) {fin = pos; ++fin;}
128 return make_range(pos, fin);
129}
130if (cmp > 0) {
131 return make_range(ind_0.end(), ind_0.end());
132}
133return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
134}
135range<t_ind_0::iterator> Type::lowerUpperRange_1111(const t_tuple& lower, const t_tuple& upper) const {
136context h;
137return lowerUpperRange_1111(lower,upper,h);
138}
139range<t_ind_0::iterator> Type::lowerUpperRange_1100(const t_tuple& lower, const t_tuple& upper, context& h) const {
140t_comparator_0 comparator;
141int cmp = comparator(lower, upper);
142if (cmp > 0) {
143 return make_range(ind_0.end(), ind_0.end());
144}
145return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
146}
147range<t_ind_0::iterator> Type::lowerUpperRange_1100(const t_tuple& lower, const t_tuple& upper) const {
148context h;
149return lowerUpperRange_1100(lower,upper,h);
150}
151bool Type::empty() const {
152return ind_0.empty();
153}
154std::vector<range<iterator>> Type::partition() const {
155return ind_0.getChunks(400);
156}
157void Type::purge() {
158ind_0.clear();
159}
160iterator Type::begin() const {
161return ind_0.begin();
162}
163iterator Type::end() const {
164return ind_0.end();
165}
166void Type::printStatistics(std::ostream& o) const {
167o << " arity 4 direct b-tree index 0 lex-order [0,1,2,3]\n";
168ind_0.printStats(o);
169}
170} // namespace souffle::t_btree_iiii__0_1_2_3__1110__1111__1100
171namespace souffle::t_btree_iiiii__0_1_2_3_4__11111__11110 {
172using namespace souffle;
173struct Type {
174static constexpr Relation::arity_type Arity = 5;
175using t_tuple = Tuple<RamDomain, 5>;
176struct t_comparator_0{
177 int operator()(const t_tuple& a, const t_tuple& b) const {
178 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0])) ? -1 : (ramBitCast<RamSigned>(a[0]) > ramBitCast<RamSigned>(b[0])) ? 1 :((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1])) ? -1 : (ramBitCast<RamSigned>(a[1]) > ramBitCast<RamSigned>(b[1])) ? 1 :((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3])) ? -1 : (ramBitCast<RamSigned>(a[3]) > ramBitCast<RamSigned>(b[3])) ? 1 :((ramBitCast<RamSigned>(a[4]) < ramBitCast<RamSigned>(b[4])) ? -1 : (ramBitCast<RamSigned>(a[4]) > ramBitCast<RamSigned>(b[4])) ? 1 :(0)))));
179 }
180bool less(const t_tuple& a, const t_tuple& b) const {
181 return (ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))|| ((ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1])) && ((ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[3]) < ramBitCast<RamSigned>(b[3]))|| ((ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3])) && ((ramBitCast<RamSigned>(a[4]) < ramBitCast<RamSigned>(b[4]))))))))));
182 }
183bool equal(const t_tuple& a, const t_tuple& b) const {
184return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[3]) == ramBitCast<RamSigned>(b[3]))&&(ramBitCast<RamSigned>(a[4]) == ramBitCast<RamSigned>(b[4]));
185 }
186};
187using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
188t_ind_0 ind_0;
189using iterator = t_ind_0::iterator;
190struct context {
191t_ind_0::operation_hints hints_0_lower;
192t_ind_0::operation_hints hints_0_upper;
193};
194context createContext() { return context(); }
195bool insert(const t_tuple& t);
196bool insert(const t_tuple& t, context& h);
197bool insert(const RamDomain* ramDomain);
198bool insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4);
199bool contains(const t_tuple& t, context& h) const;
200bool contains(const t_tuple& t) const;
201std::size_t size() const;
202iterator find(const t_tuple& t, context& h) const;
203iterator find(const t_tuple& t) const;
204range<iterator> lowerUpperRange_00000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
205range<iterator> lowerUpperRange_00000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
206range<t_ind_0::iterator> lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper, context& h) const;
207range<t_ind_0::iterator> lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper) const;
208range<t_ind_0::iterator> lowerUpperRange_11110(const t_tuple& lower, const t_tuple& upper, context& h) const;
209range<t_ind_0::iterator> lowerUpperRange_11110(const t_tuple& lower, const t_tuple& upper) const;
210bool empty() const;
211std::vector<range<iterator>> partition() const;
212void purge();
213iterator begin() const;
214iterator end() const;
215void printStatistics(std::ostream& o) const;
216};
217} // namespace souffle::t_btree_iiiii__0_1_2_3_4__11111__11110
218namespace souffle::t_btree_iiiii__0_1_2_3_4__11111__11110 {
219using namespace souffle;
220using t_ind_0 = Type::t_ind_0;
221using iterator = Type::iterator;
222using context = Type::context;
223bool Type::insert(const t_tuple& t) {
224context h;
225return insert(t, h);
226}
227bool Type::insert(const t_tuple& t, context& h) {
228if (ind_0.insert(t, h.hints_0_lower)) {
229return true;
230} else return false;
231}
232bool Type::insert(const RamDomain* ramDomain) {
233RamDomain data[5];
234std::copy(ramDomain, ramDomain + 5, data);
235const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
236context h;
237return insert(tuple, h);
238}
239bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2,RamDomain a3,RamDomain a4) {
240RamDomain data[5] = {a0,a1,a2,a3,a4};
241return insert(data);
242}
243bool Type::contains(const t_tuple& t, context& h) const {
244return ind_0.contains(t, h.hints_0_lower);
245}
246bool Type::contains(const t_tuple& t) const {
247context h;
248return contains(t, h);
249}
250std::size_t Type::size() const {
251return ind_0.size();
252}
253iterator Type::find(const t_tuple& t, context& h) const {
254return ind_0.find(t, h.hints_0_lower);
255}
256iterator Type::find(const t_tuple& t) const {
257context h;
258return find(t, h);
259}
260range<iterator> Type::lowerUpperRange_00000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
261return range<iterator>(ind_0.begin(),ind_0.end());
262}
263range<iterator> Type::lowerUpperRange_00000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
264return range<iterator>(ind_0.begin(),ind_0.end());
265}
266range<t_ind_0::iterator> Type::lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper, context& h) const {
267t_comparator_0 comparator;
268int cmp = comparator(lower, upper);
269if (cmp == 0) {
270 auto pos = ind_0.find(lower, h.hints_0_lower);
271 auto fin = ind_0.end();
272 if (pos != fin) {fin = pos; ++fin;}
273 return make_range(pos, fin);
274}
275if (cmp > 0) {
276 return make_range(ind_0.end(), ind_0.end());
277}
278return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
279}
280range<t_ind_0::iterator> Type::lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper) const {
281context h;
282return lowerUpperRange_11111(lower,upper,h);
283}
284range<t_ind_0::iterator> Type::lowerUpperRange_11110(const t_tuple& lower, const t_tuple& upper, context& h) const {
285t_comparator_0 comparator;
286int cmp = comparator(lower, upper);
287if (cmp > 0) {
288 return make_range(ind_0.end(), ind_0.end());
289}
290return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
291}
292range<t_ind_0::iterator> Type::lowerUpperRange_11110(const t_tuple& lower, const t_tuple& upper) const {
293context h;
294return lowerUpperRange_11110(lower,upper,h);
295}
296bool Type::empty() const {
297return ind_0.empty();
298}
299std::vector<range<iterator>> Type::partition() const {
300return ind_0.getChunks(400);
301}
302void Type::purge() {
303ind_0.clear();
304}
305iterator Type::begin() const {
306return ind_0.begin();
307}
308iterator Type::end() const {
309return ind_0.end();
310}
311void Type::printStatistics(std::ostream& o) const {
312o << " arity 5 direct b-tree index 0 lex-order [0,1,2,3,4]\n";
313ind_0.printStats(o);
314}
315} // namespace souffle::t_btree_iiiii__0_1_2_3_4__11111__11110
316namespace souffle::t_btree_iii__2_0_1__001__111 {
317using namespace souffle;
318struct Type {
319static constexpr Relation::arity_type Arity = 3;
320using t_tuple = Tuple<RamDomain, 3>;
321struct t_comparator_0{
322 int operator()(const t_tuple& a, const t_tuple& b) const {
323 return (ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2])) ? -1 : (ramBitCast<RamSigned>(a[2]) > ramBitCast<RamSigned>(b[2])) ? 1 :((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 :(0)));
324 }
325bool less(const t_tuple& a, const t_tuple& b) const {
326 return (ramBitCast<RamSigned>(a[2]) < ramBitCast<RamSigned>(b[2]))|| ((ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2])) && ((ramBitCast<RamSigned>(a[0]) < ramBitCast<RamSigned>(b[0]))|| ((ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0])) && ((ramBitCast<RamSigned>(a[1]) < ramBitCast<RamSigned>(b[1]))))));
327 }
328bool equal(const t_tuple& a, const t_tuple& b) const {
329return (ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]))&&(ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]));
330 }
331};
332using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
333t_ind_0 ind_0;
334using iterator = t_ind_0::iterator;
335struct context {
336t_ind_0::operation_hints hints_0_lower;
337t_ind_0::operation_hints hints_0_upper;
338};
339context createContext() { return context(); }
340bool insert(const t_tuple& t);
341bool insert(const t_tuple& t, context& h);
342bool insert(const RamDomain* ramDomain);
343bool insert(RamDomain a0,RamDomain a1,RamDomain a2);
344bool contains(const t_tuple& t, context& h) const;
345bool contains(const t_tuple& t) const;
346std::size_t size() const;
347iterator find(const t_tuple& t, context& h) const;
348iterator find(const t_tuple& t) const;
349range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
350range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
351range<t_ind_0::iterator> lowerUpperRange_001(const t_tuple& lower, const t_tuple& upper, context& h) const;
352range<t_ind_0::iterator> lowerUpperRange_001(const t_tuple& lower, const t_tuple& upper) const;
353range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
354range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
355bool empty() const;
356std::vector<range<iterator>> partition() const;
357void purge();
358iterator begin() const;
359iterator end() const;
360void printStatistics(std::ostream& o) const;
361};
362} // namespace souffle::t_btree_iii__2_0_1__001__111
363namespace souffle::t_btree_iii__2_0_1__001__111 {
364using namespace souffle;
365using t_ind_0 = Type::t_ind_0;
366using iterator = Type::iterator;
367using context = Type::context;
368bool Type::insert(const t_tuple& t) {
369context h;
370return insert(t, h);
371}
372bool Type::insert(const t_tuple& t, context& h) {
373if (ind_0.insert(t, h.hints_0_lower)) {
374return true;
375} else return false;
376}
377bool Type::insert(const RamDomain* ramDomain) {
378RamDomain data[3];
379std::copy(ramDomain, ramDomain + 3, data);
380const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
381context h;
382return insert(tuple, h);
383}
384bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
385RamDomain data[3] = {a0,a1,a2};
386return insert(data);
387}
388bool Type::contains(const t_tuple& t, context& h) const {
389return ind_0.contains(t, h.hints_0_lower);
390}
391bool Type::contains(const t_tuple& t) const {
392context h;
393return contains(t, h);
394}
395std::size_t Type::size() const {
396return ind_0.size();
397}
398iterator Type::find(const t_tuple& t, context& h) const {
399return ind_0.find(t, h.hints_0_lower);
400}
401iterator Type::find(const t_tuple& t) const {
402context h;
403return find(t, h);
404}
405range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
406return range<iterator>(ind_0.begin(),ind_0.end());
407}
408range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
409return range<iterator>(ind_0.begin(),ind_0.end());
410}
411range<t_ind_0::iterator> Type::lowerUpperRange_001(const t_tuple& lower, const t_tuple& upper, context& h) const {
412t_comparator_0 comparator;
413int cmp = comparator(lower, upper);
414if (cmp > 0) {
415 return make_range(ind_0.end(), ind_0.end());
416}
417return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
418}
419range<t_ind_0::iterator> Type::lowerUpperRange_001(const t_tuple& lower, const t_tuple& upper) const {
420context h;
421return lowerUpperRange_001(lower,upper,h);
422}
423range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const {
424t_comparator_0 comparator;
425int cmp = comparator(lower, upper);
426if (cmp == 0) {
427 auto pos = ind_0.find(lower, h.hints_0_lower);
428 auto fin = ind_0.end();
429 if (pos != fin) {fin = pos; ++fin;}
430 return make_range(pos, fin);
431}
432if (cmp > 0) {
433 return make_range(ind_0.end(), ind_0.end());
434}
435return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
436}
437range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const {
438context h;
439return lowerUpperRange_111(lower,upper,h);
440}
441bool Type::empty() const {
442return ind_0.empty();
443}
444std::vector<range<iterator>> Type::partition() const {
445return ind_0.getChunks(400);
446}
447void Type::purge() {
448ind_0.clear();
449}
450iterator Type::begin() const {
451return ind_0.begin();
452}
453iterator Type::end() const {
454return ind_0.end();
455}
456void Type::printStatistics(std::ostream& o) const {
457o << " arity 3 direct b-tree index 0 lex-order [2,0,1]\n";
458ind_0.printStats(o);
459}
460} // namespace souffle::t_btree_iii__2_0_1__001__111
461namespace souffle::t_btree_ii__0_1__11__10 {
462using namespace souffle;
463struct Type {
464static constexpr Relation::arity_type Arity = 2;
465using t_tuple = Tuple<RamDomain, 2>;
466struct t_comparator_0{
467 int operator()(const t_tuple& a, const t_tuple& b) const {
468 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 :(0));
469 }
470bool less(const t_tuple& a, const t_tuple& b) const {
471 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]))));
472 }
473bool equal(const t_tuple& a, const t_tuple& b) const {
474return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]));
475 }
476};
477using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
478t_ind_0 ind_0;
479using iterator = t_ind_0::iterator;
480struct context {
481t_ind_0::operation_hints hints_0_lower;
482t_ind_0::operation_hints hints_0_upper;
483};
484context createContext() { return context(); }
485bool insert(const t_tuple& t);
486bool insert(const t_tuple& t, context& h);
487bool insert(const RamDomain* ramDomain);
488bool insert(RamDomain a0,RamDomain a1);
489bool contains(const t_tuple& t, context& h) const;
490bool contains(const t_tuple& t) const;
491std::size_t size() const;
492iterator find(const t_tuple& t, context& h) const;
493iterator find(const t_tuple& t) const;
494range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
495range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
496range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const;
497range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const;
498range<t_ind_0::iterator> lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper, context& h) const;
499range<t_ind_0::iterator> lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper) const;
500bool empty() const;
501std::vector<range<iterator>> partition() const;
502void purge();
503iterator begin() const;
504iterator end() const;
505void printStatistics(std::ostream& o) const;
506};
507} // namespace souffle::t_btree_ii__0_1__11__10
508namespace souffle::t_btree_ii__0_1__11__10 {
509using namespace souffle;
510using t_ind_0 = Type::t_ind_0;
511using iterator = Type::iterator;
512using context = Type::context;
513bool Type::insert(const t_tuple& t) {
514context h;
515return insert(t, h);
516}
517bool Type::insert(const t_tuple& t, context& h) {
518if (ind_0.insert(t, h.hints_0_lower)) {
519return true;
520} else return false;
521}
522bool Type::insert(const RamDomain* ramDomain) {
523RamDomain data[2];
524std::copy(ramDomain, ramDomain + 2, data);
525const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
526context h;
527return insert(tuple, h);
528}
529bool Type::insert(RamDomain a0,RamDomain a1) {
530RamDomain data[2] = {a0,a1};
531return insert(data);
532}
533bool Type::contains(const t_tuple& t, context& h) const {
534return ind_0.contains(t, h.hints_0_lower);
535}
536bool Type::contains(const t_tuple& t) const {
537context h;
538return contains(t, h);
539}
540std::size_t Type::size() const {
541return ind_0.size();
542}
543iterator Type::find(const t_tuple& t, context& h) const {
544return ind_0.find(t, h.hints_0_lower);
545}
546iterator Type::find(const t_tuple& t) const {
547context h;
548return find(t, h);
549}
550range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
551return range<iterator>(ind_0.begin(),ind_0.end());
552}
553range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
554return range<iterator>(ind_0.begin(),ind_0.end());
555}
556range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const {
557t_comparator_0 comparator;
558int cmp = comparator(lower, upper);
559if (cmp == 0) {
560 auto pos = ind_0.find(lower, h.hints_0_lower);
561 auto fin = ind_0.end();
562 if (pos != fin) {fin = pos; ++fin;}
563 return make_range(pos, fin);
564}
565if (cmp > 0) {
566 return make_range(ind_0.end(), ind_0.end());
567}
568return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
569}
570range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const {
571context h;
572return lowerUpperRange_11(lower,upper,h);
573}
574range<t_ind_0::iterator> Type::lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper, context& h) const {
575t_comparator_0 comparator;
576int cmp = comparator(lower, upper);
577if (cmp > 0) {
578 return make_range(ind_0.end(), ind_0.end());
579}
580return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
581}
582range<t_ind_0::iterator> Type::lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper) const {
583context h;
584return lowerUpperRange_10(lower,upper,h);
585}
586bool Type::empty() const {
587return ind_0.empty();
588}
589std::vector<range<iterator>> Type::partition() const {
590return ind_0.getChunks(400);
591}
592void Type::purge() {
593ind_0.clear();
594}
595iterator Type::begin() const {
596return ind_0.begin();
597}
598iterator Type::end() const {
599return ind_0.end();
600}
601void Type::printStatistics(std::ostream& o) const {
602o << " arity 2 direct b-tree index 0 lex-order [0,1]\n";
603ind_0.printStats(o);
604}
605} // namespace souffle::t_btree_ii__0_1__11__10
606namespace souffle::t_btree_iii__0_1_2__111 {
607using namespace souffle;
608struct Type {
609static constexpr Relation::arity_type Arity = 3;
610using t_tuple = Tuple<RamDomain, 3>;
611struct t_comparator_0{
612 int operator()(const t_tuple& a, const t_tuple& b) const {
613 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)));
614 }
615bool less(const t_tuple& a, const t_tuple& b) const {
616 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]))))));
617 }
618bool equal(const t_tuple& a, const t_tuple& b) const {
619return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]));
620 }
621};
622using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
623t_ind_0 ind_0;
624using iterator = t_ind_0::iterator;
625struct context {
626t_ind_0::operation_hints hints_0_lower;
627t_ind_0::operation_hints hints_0_upper;
628};
629context createContext() { return context(); }
630bool insert(const t_tuple& t);
631bool insert(const t_tuple& t, context& h);
632bool insert(const RamDomain* ramDomain);
633bool insert(RamDomain a0,RamDomain a1,RamDomain a2);
634bool contains(const t_tuple& t, context& h) const;
635bool contains(const t_tuple& t) const;
636std::size_t size() const;
637iterator find(const t_tuple& t, context& h) const;
638iterator find(const t_tuple& t) const;
639range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
640range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
641range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
642range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
643bool empty() const;
644std::vector<range<iterator>> partition() const;
645void purge();
646iterator begin() const;
647iterator end() const;
648void printStatistics(std::ostream& o) const;
649};
650} // namespace souffle::t_btree_iii__0_1_2__111
651namespace souffle::t_btree_iii__0_1_2__111 {
652using namespace souffle;
653using t_ind_0 = Type::t_ind_0;
654using iterator = Type::iterator;
655using context = Type::context;
656bool Type::insert(const t_tuple& t) {
657context h;
658return insert(t, h);
659}
660bool Type::insert(const t_tuple& t, context& h) {
661if (ind_0.insert(t, h.hints_0_lower)) {
662return true;
663} else return false;
664}
665bool Type::insert(const RamDomain* ramDomain) {
666RamDomain data[3];
667std::copy(ramDomain, ramDomain + 3, data);
668const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
669context h;
670return insert(tuple, h);
671}
672bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
673RamDomain data[3] = {a0,a1,a2};
674return insert(data);
675}
676bool Type::contains(const t_tuple& t, context& h) const {
677return ind_0.contains(t, h.hints_0_lower);
678}
679bool Type::contains(const t_tuple& t) const {
680context h;
681return contains(t, h);
682}
683std::size_t Type::size() const {
684return ind_0.size();
685}
686iterator Type::find(const t_tuple& t, context& h) const {
687return ind_0.find(t, h.hints_0_lower);
688}
689iterator Type::find(const t_tuple& t) const {
690context h;
691return find(t, h);
692}
693range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
694return range<iterator>(ind_0.begin(),ind_0.end());
695}
696range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
697return range<iterator>(ind_0.begin(),ind_0.end());
698}
699range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const {
700t_comparator_0 comparator;
701int cmp = comparator(lower, upper);
702if (cmp == 0) {
703 auto pos = ind_0.find(lower, h.hints_0_lower);
704 auto fin = ind_0.end();
705 if (pos != fin) {fin = pos; ++fin;}
706 return make_range(pos, fin);
707}
708if (cmp > 0) {
709 return make_range(ind_0.end(), ind_0.end());
710}
711return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
712}
713range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const {
714context h;
715return lowerUpperRange_111(lower,upper,h);
716}
717bool Type::empty() const {
718return ind_0.empty();
719}
720std::vector<range<iterator>> Type::partition() const {
721return ind_0.getChunks(400);
722}
723void Type::purge() {
724ind_0.clear();
725}
726iterator Type::begin() const {
727return ind_0.begin();
728}
729iterator Type::end() const {
730return ind_0.end();
731}
732void Type::printStatistics(std::ostream& o) const {
733o << " arity 3 direct b-tree index 0 lex-order [0,1,2]\n";
734ind_0.printStats(o);
735}
736} // namespace souffle::t_btree_iii__0_1_2__111
737namespace souffle::t_btree_iii__0_1_2__110__111 {
738using namespace souffle;
739struct Type {
740static constexpr Relation::arity_type Arity = 3;
741using t_tuple = Tuple<RamDomain, 3>;
742struct t_comparator_0{
743 int operator()(const t_tuple& a, const t_tuple& b) const {
744 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)));
745 }
746bool less(const t_tuple& a, const t_tuple& b) const {
747 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]))))));
748 }
749bool equal(const t_tuple& a, const t_tuple& b) const {
750return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]));
751 }
752};
753using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
754t_ind_0 ind_0;
755using iterator = t_ind_0::iterator;
756struct context {
757t_ind_0::operation_hints hints_0_lower;
758t_ind_0::operation_hints hints_0_upper;
759};
760context createContext() { return context(); }
761bool insert(const t_tuple& t);
762bool insert(const t_tuple& t, context& h);
763bool insert(const RamDomain* ramDomain);
764bool insert(RamDomain a0,RamDomain a1,RamDomain a2);
765bool contains(const t_tuple& t, context& h) const;
766bool contains(const t_tuple& t) const;
767std::size_t size() const;
768iterator find(const t_tuple& t, context& h) const;
769iterator find(const t_tuple& t) const;
770range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
771range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
772range<t_ind_0::iterator> lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper, context& h) const;
773range<t_ind_0::iterator> lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper) const;
774range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
775range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
776bool empty() const;
777std::vector<range<iterator>> partition() const;
778void purge();
779iterator begin() const;
780iterator end() const;
781void printStatistics(std::ostream& o) const;
782};
783} // namespace souffle::t_btree_iii__0_1_2__110__111
784namespace souffle::t_btree_iii__0_1_2__110__111 {
785using namespace souffle;
786using t_ind_0 = Type::t_ind_0;
787using iterator = Type::iterator;
788using context = Type::context;
789bool Type::insert(const t_tuple& t) {
790context h;
791return insert(t, h);
792}
793bool Type::insert(const t_tuple& t, context& h) {
794if (ind_0.insert(t, h.hints_0_lower)) {
795return true;
796} else return false;
797}
798bool Type::insert(const RamDomain* ramDomain) {
799RamDomain data[3];
800std::copy(ramDomain, ramDomain + 3, data);
801const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
802context h;
803return insert(tuple, h);
804}
805bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
806RamDomain data[3] = {a0,a1,a2};
807return insert(data);
808}
809bool Type::contains(const t_tuple& t, context& h) const {
810return ind_0.contains(t, h.hints_0_lower);
811}
812bool Type::contains(const t_tuple& t) const {
813context h;
814return contains(t, h);
815}
816std::size_t Type::size() const {
817return ind_0.size();
818}
819iterator Type::find(const t_tuple& t, context& h) const {
820return ind_0.find(t, h.hints_0_lower);
821}
822iterator Type::find(const t_tuple& t) const {
823context h;
824return find(t, h);
825}
826range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
827return range<iterator>(ind_0.begin(),ind_0.end());
828}
829range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
830return range<iterator>(ind_0.begin(),ind_0.end());
831}
832range<t_ind_0::iterator> Type::lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper, context& h) const {
833t_comparator_0 comparator;
834int cmp = comparator(lower, upper);
835if (cmp > 0) {
836 return make_range(ind_0.end(), ind_0.end());
837}
838return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
839}
840range<t_ind_0::iterator> Type::lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper) const {
841context h;
842return lowerUpperRange_110(lower,upper,h);
843}
844range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const {
845t_comparator_0 comparator;
846int cmp = comparator(lower, upper);
847if (cmp == 0) {
848 auto pos = ind_0.find(lower, h.hints_0_lower);
849 auto fin = ind_0.end();
850 if (pos != fin) {fin = pos; ++fin;}
851 return make_range(pos, fin);
852}
853if (cmp > 0) {
854 return make_range(ind_0.end(), ind_0.end());
855}
856return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
857}
858range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const {
859context h;
860return lowerUpperRange_111(lower,upper,h);
861}
862bool Type::empty() const {
863return ind_0.empty();
864}
865std::vector<range<iterator>> Type::partition() const {
866return ind_0.getChunks(400);
867}
868void Type::purge() {
869ind_0.clear();
870}
871iterator Type::begin() const {
872return ind_0.begin();
873}
874iterator Type::end() const {
875return ind_0.end();
876}
877void Type::printStatistics(std::ostream& o) const {
878o << " arity 3 direct b-tree index 0 lex-order [0,1,2]\n";
879ind_0.printStats(o);
880}
881} // namespace souffle::t_btree_iii__0_1_2__110__111
882namespace souffle::t_btree_ii__0_1__11 {
883using namespace souffle;
884struct Type {
885static constexpr Relation::arity_type Arity = 2;
886using t_tuple = Tuple<RamDomain, 2>;
887struct t_comparator_0{
888 int operator()(const t_tuple& a, const t_tuple& b) const {
889 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 :(0));
890 }
891bool less(const t_tuple& a, const t_tuple& b) const {
892 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]))));
893 }
894bool equal(const t_tuple& a, const t_tuple& b) const {
895return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]));
896 }
897};
898using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
899t_ind_0 ind_0;
900using iterator = t_ind_0::iterator;
901struct context {
902t_ind_0::operation_hints hints_0_lower;
903t_ind_0::operation_hints hints_0_upper;
904};
905context createContext() { return context(); }
906bool insert(const t_tuple& t);
907bool insert(const t_tuple& t, context& h);
908bool insert(const RamDomain* ramDomain);
909bool insert(RamDomain a0,RamDomain a1);
910bool contains(const t_tuple& t, context& h) const;
911bool contains(const t_tuple& t) const;
912std::size_t size() const;
913iterator find(const t_tuple& t, context& h) const;
914iterator find(const t_tuple& t) const;
915range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
916range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
917range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const;
918range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const;
919bool empty() const;
920std::vector<range<iterator>> partition() const;
921void purge();
922iterator begin() const;
923iterator end() const;
924void printStatistics(std::ostream& o) const;
925};
926} // namespace souffle::t_btree_ii__0_1__11
927namespace souffle::t_btree_ii__0_1__11 {
928using namespace souffle;
929using t_ind_0 = Type::t_ind_0;
930using iterator = Type::iterator;
931using context = Type::context;
932bool Type::insert(const t_tuple& t) {
933context h;
934return insert(t, h);
935}
936bool Type::insert(const t_tuple& t, context& h) {
937if (ind_0.insert(t, h.hints_0_lower)) {
938return true;
939} else return false;
940}
941bool Type::insert(const RamDomain* ramDomain) {
942RamDomain data[2];
943std::copy(ramDomain, ramDomain + 2, data);
944const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
945context h;
946return insert(tuple, h);
947}
948bool Type::insert(RamDomain a0,RamDomain a1) {
949RamDomain data[2] = {a0,a1};
950return insert(data);
951}
952bool Type::contains(const t_tuple& t, context& h) const {
953return ind_0.contains(t, h.hints_0_lower);
954}
955bool Type::contains(const t_tuple& t) const {
956context h;
957return contains(t, h);
958}
959std::size_t Type::size() const {
960return ind_0.size();
961}
962iterator Type::find(const t_tuple& t, context& h) const {
963return ind_0.find(t, h.hints_0_lower);
964}
965iterator Type::find(const t_tuple& t) const {
966context h;
967return find(t, h);
968}
969range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
970return range<iterator>(ind_0.begin(),ind_0.end());
971}
972range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
973return range<iterator>(ind_0.begin(),ind_0.end());
974}
975range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const {
976t_comparator_0 comparator;
977int cmp = comparator(lower, upper);
978if (cmp == 0) {
979 auto pos = ind_0.find(lower, h.hints_0_lower);
980 auto fin = ind_0.end();
981 if (pos != fin) {fin = pos; ++fin;}
982 return make_range(pos, fin);
983}
984if (cmp > 0) {
985 return make_range(ind_0.end(), ind_0.end());
986}
987return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
988}
989range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const {
990context h;
991return lowerUpperRange_11(lower,upper,h);
992}
993bool Type::empty() const {
994return ind_0.empty();
995}
996std::vector<range<iterator>> Type::partition() const {
997return ind_0.getChunks(400);
998}
999void Type::purge() {
1000ind_0.clear();
1001}
1002iterator Type::begin() const {
1003return ind_0.begin();
1004}
1005iterator Type::end() const {
1006return ind_0.end();
1007}
1008void Type::printStatistics(std::ostream& o) const {
1009o << " arity 2 direct b-tree index 0 lex-order [0,1]\n";
1010ind_0.printStats(o);
1011}
1012} // namespace souffle::t_btree_ii__0_1__11
1013namespace souffle {
1014using namespace souffle;
1015class Stratum_assign_e0d78e44f4df6411 {
1016public:
1017 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__1110__1111__1100::Type& rel_assign_e4bb6e0824a16a37);
1018void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1019private:
1020SymbolTable& symTable;
1021RecordTable& recordTable;
1022ConcurrentCache<std::string,std::regex>& regexCache;
1023bool& pruneImdtRels;
1024bool& performIO;
1025SignalHandler*& signalHandler;
1026std::atomic<std::size_t>& iter;
1027std::atomic<RamDomain>& ctr;
1028std::string& inputDirectory;
1029std::string& outputDirectory;
1030t_btree_iiii__0_1_2_3__1110__1111__1100::Type* rel_assign_e4bb6e0824a16a37;
1031};
1032} // namespace souffle
1033namespace souffle {
1034using namespace souffle;
1035 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__1110__1111__1100::Type& rel_assign_e4bb6e0824a16a37):
1036symTable(symTable),
1037recordTable(recordTable),
1038regexCache(regexCache),
1039pruneImdtRels(pruneImdtRels),
1040performIO(performIO),
1041signalHandler(signalHandler),
1042iter(iter),
1043ctr(ctr),
1044inputDirectory(inputDirectory),
1045outputDirectory(outputDirectory),
1046rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37){
1047}
1048
1049void Stratum_assign_e0d78e44f4df6411::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1050if (performIO) {
1051try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr\tv"},{"auxArity","0"},{"fact-dir","."},{"name","assign"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 4, \"params\": [\"f\", \"s\", \"r\", \"v\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 4, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Value\"]}}"}});
1052if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1053IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1054} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1055exit(1);
1056}
1057}
1058}
1059
1060} // namespace souffle
1061
1062namespace souffle {
1063using namespace souffle;
1064class Stratum_bind_8b0da46e2379b6cd {
1065public:
1066 Stratum_bind_8b0da46e2379b6cd(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_iiiii__0_1_2_3_4__11111__11110::Type& rel_bind_c9210fdc63280a40);
1067void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1068private:
1069SymbolTable& symTable;
1070RecordTable& recordTable;
1071ConcurrentCache<std::string,std::regex>& regexCache;
1072bool& pruneImdtRels;
1073bool& performIO;
1074SignalHandler*& signalHandler;
1075std::atomic<std::size_t>& iter;
1076std::atomic<RamDomain>& ctr;
1077std::string& inputDirectory;
1078std::string& outputDirectory;
1079t_btree_iiiii__0_1_2_3_4__11111__11110::Type* rel_bind_c9210fdc63280a40;
1080};
1081} // namespace souffle
1082namespace souffle {
1083using namespace souffle;
1084 Stratum_bind_8b0da46e2379b6cd::Stratum_bind_8b0da46e2379b6cd(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_iiiii__0_1_2_3_4__11111__11110::Type& rel_bind_c9210fdc63280a40):
1085symTable(symTable),
1086recordTable(recordTable),
1087regexCache(regexCache),
1088pruneImdtRels(pruneImdtRels),
1089performIO(performIO),
1090signalHandler(signalHandler),
1091iter(iter),
1092ctr(ctr),
1093inputDirectory(inputDirectory),
1094outputDirectory(outputDirectory),
1095rel_bind_c9210fdc63280a40(&rel_bind_c9210fdc63280a40){
1096}
1097
1098void Stratum_bind_8b0da46e2379b6cd::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1099if (performIO) {
1100try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","caller\ts\tr\tcallee\tparam"},{"auxArity","0"},{"fact-dir","."},{"name","bind"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 5, \"params\": [\"caller\", \"s\", \"r\", \"callee\", \"param\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 5, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"s:symbol\"]}}"}});
1101if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1102IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_bind_c9210fdc63280a40);
1103} catch (std::exception& e) {std::cerr << "Error loading bind data: " << e.what() << '\n';
1104exit(1);
1105}
1106}
1107}
1108
1109} // namespace souffle
1110
1111namespace souffle {
1112using namespace souffle;
1113class Stratum_call_104fac07831e2229 {
1114public:
1115 Stratum_call_104fac07831e2229(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__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f);
1116void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1117private:
1118SymbolTable& symTable;
1119RecordTable& recordTable;
1120ConcurrentCache<std::string,std::regex>& regexCache;
1121bool& pruneImdtRels;
1122bool& performIO;
1123SignalHandler*& signalHandler;
1124std::atomic<std::size_t>& iter;
1125std::atomic<RamDomain>& ctr;
1126std::string& inputDirectory;
1127std::string& outputDirectory;
1128t_btree_iii__2_0_1__001__111::Type* rel_call_ee1d8972d66cc25f;
1129};
1130} // namespace souffle
1131namespace souffle {
1132using namespace souffle;
1133 Stratum_call_104fac07831e2229::Stratum_call_104fac07831e2229(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__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f):
1134symTable(symTable),
1135recordTable(recordTable),
1136regexCache(regexCache),
1137pruneImdtRels(pruneImdtRels),
1138performIO(performIO),
1139signalHandler(signalHandler),
1140iter(iter),
1141ctr(ctr),
1142inputDirectory(inputDirectory),
1143outputDirectory(outputDirectory),
1144rel_call_ee1d8972d66cc25f(&rel_call_ee1d8972d66cc25f){
1145}
1146
1147void Stratum_call_104fac07831e2229::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1148if (performIO) {
1149try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","caller\ts\tcallee"},{"auxArity","0"},{"fact-dir","."},{"name","call"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"caller\", \"s\", \"callee\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"s:Function\"]}}"}});
1150if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1151IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_call_ee1d8972d66cc25f);
1152} catch (std::exception& e) {std::cerr << "Error loading call data: " << e.what() << '\n';
1153exit(1);
1154}
1155}
1156}
1157
1158} // namespace souffle
1159
1160namespace souffle {
1161using namespace souffle;
1162class Stratum_cf_edge_c2ae152829fd6f1f {
1163public:
1164 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);
1165void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1166private:
1167SymbolTable& symTable;
1168RecordTable& recordTable;
1169ConcurrentCache<std::string,std::regex>& regexCache;
1170bool& pruneImdtRels;
1171bool& performIO;
1172SignalHandler*& signalHandler;
1173std::atomic<std::size_t>& iter;
1174std::atomic<RamDomain>& ctr;
1175std::string& inputDirectory;
1176std::string& outputDirectory;
1177t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
1178};
1179} // namespace souffle
1180namespace souffle {
1181using namespace souffle;
1182 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):
1183symTable(symTable),
1184recordTable(recordTable),
1185regexCache(regexCache),
1186pruneImdtRels(pruneImdtRels),
1187performIO(performIO),
1188signalHandler(signalHandler),
1189iter(iter),
1190ctr(ctr),
1191inputDirectory(inputDirectory),
1192outputDirectory(outputDirectory),
1193rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72){
1194}
1195
1196void Stratum_cf_edge_c2ae152829fd6f1f::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1197if (performIO) {
1198try {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\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}"}});
1199if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1200IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1201} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1202exit(1);
1203}
1204}
1205}
1206
1207} // namespace souffle
1208
1209namespace souffle {
1210using namespace souffle;
1211class Stratum_live_vars_in_a363f2025538826a {
1212public:
1213 Stratum_live_vars_in_a363f2025538826a(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__110__111::Type& rel_delta_live_vars_in_fccc4ee6df066f63,t_btree_iii__0_1_2__111::Type& rel_delta_live_vars_out_acc66913cea62d16,t_btree_iii__0_1_2__110__111::Type& rel_new_live_vars_in_0b01be53183b2351,t_btree_iii__0_1_2__111::Type& rel_new_live_vars_out_2d78073638bb3740,t_btree_iiii__0_1_2_3__1110__1111__1100::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72,t_btree_iii__0_1_2__111::Type& rel_live_vars_in_0b002b95687eda95,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_iii__0_1_2__111::Type& rel_use_e955e932f22dad4d);
1214void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1215private:
1216SymbolTable& symTable;
1217RecordTable& recordTable;
1218ConcurrentCache<std::string,std::regex>& regexCache;
1219bool& pruneImdtRels;
1220bool& performIO;
1221SignalHandler*& signalHandler;
1222std::atomic<std::size_t>& iter;
1223std::atomic<RamDomain>& ctr;
1224std::string& inputDirectory;
1225std::string& outputDirectory;
1226t_btree_iii__0_1_2__110__111::Type* rel_delta_live_vars_in_fccc4ee6df066f63;
1227t_btree_iii__0_1_2__111::Type* rel_delta_live_vars_out_acc66913cea62d16;
1228t_btree_iii__0_1_2__110__111::Type* rel_new_live_vars_in_0b01be53183b2351;
1229t_btree_iii__0_1_2__111::Type* rel_new_live_vars_out_2d78073638bb3740;
1230t_btree_iiii__0_1_2_3__1110__1111__1100::Type* rel_assign_e4bb6e0824a16a37;
1231t_btree_iii__0_1_2__111::Type* rel_cf_edge_4931a04c8c74bb72;
1232t_btree_iii__0_1_2__111::Type* rel_live_vars_in_0b002b95687eda95;
1233t_btree_iii__0_1_2__110__111::Type* rel_live_vars_out_f94306e028b67aa4;
1234t_btree_iii__0_1_2__111::Type* rel_use_e955e932f22dad4d;
1235};
1236} // namespace souffle
1237namespace souffle {
1238using namespace souffle;
1239 Stratum_live_vars_in_a363f2025538826a::Stratum_live_vars_in_a363f2025538826a(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__110__111::Type& rel_delta_live_vars_in_fccc4ee6df066f63,t_btree_iii__0_1_2__111::Type& rel_delta_live_vars_out_acc66913cea62d16,t_btree_iii__0_1_2__110__111::Type& rel_new_live_vars_in_0b01be53183b2351,t_btree_iii__0_1_2__111::Type& rel_new_live_vars_out_2d78073638bb3740,t_btree_iiii__0_1_2_3__1110__1111__1100::Type& rel_assign_e4bb6e0824a16a37,t_btree_iii__0_1_2__111::Type& rel_cf_edge_4931a04c8c74bb72,t_btree_iii__0_1_2__111::Type& rel_live_vars_in_0b002b95687eda95,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_iii__0_1_2__111::Type& rel_use_e955e932f22dad4d):
1240symTable(symTable),
1241recordTable(recordTable),
1242regexCache(regexCache),
1243pruneImdtRels(pruneImdtRels),
1244performIO(performIO),
1245signalHandler(signalHandler),
1246iter(iter),
1247ctr(ctr),
1248inputDirectory(inputDirectory),
1249outputDirectory(outputDirectory),
1250rel_delta_live_vars_in_fccc4ee6df066f63(&rel_delta_live_vars_in_fccc4ee6df066f63),
1251rel_delta_live_vars_out_acc66913cea62d16(&rel_delta_live_vars_out_acc66913cea62d16),
1252rel_new_live_vars_in_0b01be53183b2351(&rel_new_live_vars_in_0b01be53183b2351),
1253rel_new_live_vars_out_2d78073638bb3740(&rel_new_live_vars_out_2d78073638bb3740),
1254rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1255rel_cf_edge_4931a04c8c74bb72(&rel_cf_edge_4931a04c8c74bb72),
1256rel_live_vars_in_0b002b95687eda95(&rel_live_vars_in_0b002b95687eda95),
1257rel_live_vars_out_f94306e028b67aa4(&rel_live_vars_out_f94306e028b67aa4),
1258rel_use_e955e932f22dad4d(&rel_use_e955e932f22dad4d){
1259}
1260
1261void Stratum_live_vars_in_a363f2025538826a::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1262signalHandler->setMsg(R"_(live_vars_in(f,s,r) :-
1263 use(f,s,r).
1264in file dataflow.dl [50:1-50:39])_");
1265if(!(rel_use_e955e932f22dad4d->empty())) {
1266[&](){
1267CREATE_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt,rel_live_vars_in_0b002b95687eda95->createContext());
1268CREATE_OP_CONTEXT(rel_use_e955e932f22dad4d_op_ctxt,rel_use_e955e932f22dad4d->createContext());
1269for(const auto& env0 : *rel_use_e955e932f22dad4d) {
1270Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1271rel_live_vars_in_0b002b95687eda95->insert(tuple,READ_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt));
1272}
1273}
1274();}
1275[&](){
1276CREATE_OP_CONTEXT(rel_delta_live_vars_in_fccc4ee6df066f63_op_ctxt,rel_delta_live_vars_in_fccc4ee6df066f63->createContext());
1277CREATE_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt,rel_live_vars_in_0b002b95687eda95->createContext());
1278for(const auto& env0 : *rel_live_vars_in_0b002b95687eda95) {
1279Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1280rel_delta_live_vars_in_fccc4ee6df066f63->insert(tuple,READ_OP_CONTEXT(rel_delta_live_vars_in_fccc4ee6df066f63_op_ctxt));
1281}
1282}
1283();[&](){
1284CREATE_OP_CONTEXT(rel_delta_live_vars_out_acc66913cea62d16_op_ctxt,rel_delta_live_vars_out_acc66913cea62d16->createContext());
1285CREATE_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt,rel_live_vars_out_f94306e028b67aa4->createContext());
1286for(const auto& env0 : *rel_live_vars_out_f94306e028b67aa4) {
1287Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1288rel_delta_live_vars_out_acc66913cea62d16->insert(tuple,READ_OP_CONTEXT(rel_delta_live_vars_out_acc66913cea62d16_op_ctxt));
1289}
1290}
1291();auto loop_counter = RamUnsigned(1);
1292iter = 0;
1293for(;;) {
1294signalHandler->setMsg(R"_(live_vars_in(f,s,r) :-
1295 !assign(f,s,r,_),
1296 live_vars_out(f,s,r).
1297in file dataflow.dl [52:1-52:70])_");
1298if(!(rel_delta_live_vars_out_acc66913cea62d16->empty())) {
1299[&](){
1300CREATE_OP_CONTEXT(rel_delta_live_vars_out_acc66913cea62d16_op_ctxt,rel_delta_live_vars_out_acc66913cea62d16->createContext());
1301CREATE_OP_CONTEXT(rel_new_live_vars_in_0b01be53183b2351_op_ctxt,rel_new_live_vars_in_0b01be53183b2351->createContext());
1302CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1303CREATE_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt,rel_live_vars_in_0b002b95687eda95->createContext());
1304for(const auto& env0 : *rel_delta_live_vars_out_acc66913cea62d16) {
1305if( !(rel_live_vars_in_0b002b95687eda95->contains(Tuple<RamDomain,3>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}},READ_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt))) && !(!rel_assign_e4bb6e0824a16a37->lowerUpperRange_1110(Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt)).empty())) {
1306Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1307rel_new_live_vars_in_0b01be53183b2351->insert(tuple,READ_OP_CONTEXT(rel_new_live_vars_in_0b01be53183b2351_op_ctxt));
1308}
1309}
1310}
1311();}
1312signalHandler->setMsg(R"_(live_vars_out(f,s1,r) :-
1313 cf_edge(f,s1,s2),
1314 live_vars_in(f,s2,r).
1315in file dataflow.dl [56:1-56:71])_");
1316if(!(rel_cf_edge_4931a04c8c74bb72->empty()) && !(rel_delta_live_vars_in_fccc4ee6df066f63->empty())) {
1317[&](){
1318CREATE_OP_CONTEXT(rel_delta_live_vars_in_fccc4ee6df066f63_op_ctxt,rel_delta_live_vars_in_fccc4ee6df066f63->createContext());
1319CREATE_OP_CONTEXT(rel_new_live_vars_out_2d78073638bb3740_op_ctxt,rel_new_live_vars_out_2d78073638bb3740->createContext());
1320CREATE_OP_CONTEXT(rel_cf_edge_4931a04c8c74bb72_op_ctxt,rel_cf_edge_4931a04c8c74bb72->createContext());
1321CREATE_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt,rel_live_vars_out_f94306e028b67aa4->createContext());
1322for(const auto& env0 : *rel_cf_edge_4931a04c8c74bb72) {
1323auto range = rel_delta_live_vars_in_fccc4ee6df066f63->lowerUpperRange_110(Tuple<RamDomain,3>{{ramBitCast(env0[0]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,3>{{ramBitCast(env0[0]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_delta_live_vars_in_fccc4ee6df066f63_op_ctxt));
1324for(const auto& env1 : range) {
1325if( !(rel_live_vars_out_f94306e028b67aa4->contains(Tuple<RamDomain,3>{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env1[2])}},READ_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt)))) {
1326Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env1[2])}};
1327rel_new_live_vars_out_2d78073638bb3740->insert(tuple,READ_OP_CONTEXT(rel_new_live_vars_out_2d78073638bb3740_op_ctxt));
1328}
1329}
1330}
1331}
1332();}
1333if(rel_new_live_vars_in_0b01be53183b2351->empty() && rel_new_live_vars_out_2d78073638bb3740->empty()) break;
1334[&](){
1335CREATE_OP_CONTEXT(rel_new_live_vars_in_0b01be53183b2351_op_ctxt,rel_new_live_vars_in_0b01be53183b2351->createContext());
1336CREATE_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt,rel_live_vars_in_0b002b95687eda95->createContext());
1337for(const auto& env0 : *rel_new_live_vars_in_0b01be53183b2351) {
1338Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1339rel_live_vars_in_0b002b95687eda95->insert(tuple,READ_OP_CONTEXT(rel_live_vars_in_0b002b95687eda95_op_ctxt));
1340}
1341}
1342();std::swap(rel_delta_live_vars_in_fccc4ee6df066f63, rel_new_live_vars_in_0b01be53183b2351);
1343rel_new_live_vars_in_0b01be53183b2351->purge();
1344[&](){
1345CREATE_OP_CONTEXT(rel_new_live_vars_out_2d78073638bb3740_op_ctxt,rel_new_live_vars_out_2d78073638bb3740->createContext());
1346CREATE_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt,rel_live_vars_out_f94306e028b67aa4->createContext());
1347for(const auto& env0 : *rel_new_live_vars_out_2d78073638bb3740) {
1348Tuple<RamDomain,3> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1]),ramBitCast(env0[2])}};
1349rel_live_vars_out_f94306e028b67aa4->insert(tuple,READ_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt));
1350}
1351}
1352();std::swap(rel_delta_live_vars_out_acc66913cea62d16, rel_new_live_vars_out_2d78073638bb3740);
1353rel_new_live_vars_out_2d78073638bb3740->purge();
1354loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
1355iter++;
1356}
1357iter = 0;
1358rel_delta_live_vars_in_fccc4ee6df066f63->purge();
1359rel_new_live_vars_in_0b01be53183b2351->purge();
1360rel_delta_live_vars_out_acc66913cea62d16->purge();
1361rel_new_live_vars_out_2d78073638bb3740->purge();
1362if (pruneImdtRels) rel_cf_edge_4931a04c8c74bb72->purge();
1363if (pruneImdtRels) rel_live_vars_in_0b002b95687eda95->purge();
1364if (pruneImdtRels) rel_use_e955e932f22dad4d->purge();
1365}
1366
1367} // namespace souffle
1368
1369namespace souffle {
1370using namespace souffle;
1371class Stratum_might_collect_beadc513d07ff032 {
1372public:
1373 Stratum_might_collect_beadc513d07ff032(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_ii__0_1__11__10::Type& rel_delta_might_collect_d651f71586aafe59,t_btree_ii__0_1__11__10::Type& rel_new_might_collect_5d48ef45a97e4618,t_btree_iii__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f,t_btree_ii__0_1__11__10::Type& rel_might_collect_ef1d0b06d36e4ddc);
1374void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1375private:
1376SymbolTable& symTable;
1377RecordTable& recordTable;
1378ConcurrentCache<std::string,std::regex>& regexCache;
1379bool& pruneImdtRels;
1380bool& performIO;
1381SignalHandler*& signalHandler;
1382std::atomic<std::size_t>& iter;
1383std::atomic<RamDomain>& ctr;
1384std::string& inputDirectory;
1385std::string& outputDirectory;
1386t_btree_ii__0_1__11__10::Type* rel_delta_might_collect_d651f71586aafe59;
1387t_btree_ii__0_1__11__10::Type* rel_new_might_collect_5d48ef45a97e4618;
1388t_btree_iii__2_0_1__001__111::Type* rel_call_ee1d8972d66cc25f;
1389t_btree_ii__0_1__11__10::Type* rel_might_collect_ef1d0b06d36e4ddc;
1390};
1391} // namespace souffle
1392namespace souffle {
1393using namespace souffle;
1394 Stratum_might_collect_beadc513d07ff032::Stratum_might_collect_beadc513d07ff032(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_ii__0_1__11__10::Type& rel_delta_might_collect_d651f71586aafe59,t_btree_ii__0_1__11__10::Type& rel_new_might_collect_5d48ef45a97e4618,t_btree_iii__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f,t_btree_ii__0_1__11__10::Type& rel_might_collect_ef1d0b06d36e4ddc):
1395symTable(symTable),
1396recordTable(recordTable),
1397regexCache(regexCache),
1398pruneImdtRels(pruneImdtRels),
1399performIO(performIO),
1400signalHandler(signalHandler),
1401iter(iter),
1402ctr(ctr),
1403inputDirectory(inputDirectory),
1404outputDirectory(outputDirectory),
1405rel_delta_might_collect_d651f71586aafe59(&rel_delta_might_collect_d651f71586aafe59),
1406rel_new_might_collect_5d48ef45a97e4618(&rel_new_might_collect_5d48ef45a97e4618),
1407rel_call_ee1d8972d66cc25f(&rel_call_ee1d8972d66cc25f),
1408rel_might_collect_ef1d0b06d36e4ddc(&rel_might_collect_ef1d0b06d36e4ddc){
1409}
1410
1411void Stratum_might_collect_beadc513d07ff032::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1412signalHandler->setMsg(R"_(might_collect("mylib.MaybeCollect",0).
1413in file call-graph.dl [14:1-14:40])_");
1414[&](){
1415CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1416Tuple<RamDomain,2> tuple{{ramBitCast(RamSigned(0)),ramBitCast(RamSigned(0))}};
1417rel_might_collect_ef1d0b06d36e4ddc->insert(tuple,READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt));
1418}
1419();signalHandler->setMsg(R"_(might_collect(f,s) :-
1420 call(f,s,"mylib.MaybeCollect").
1421in file call-graph.dl [15:1-15:57])_");
1422if(!(rel_call_ee1d8972d66cc25f->empty())) {
1423[&](){
1424CREATE_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt,rel_call_ee1d8972d66cc25f->createContext());
1425CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1426auto range = rel_call_ee1d8972d66cc25f->lowerUpperRange_001(Tuple<RamDomain,3>{{ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast(RamSigned(0))}},Tuple<RamDomain,3>{{ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast(RamSigned(0))}},READ_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt));
1427for(const auto& env0 : range) {
1428Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1429rel_might_collect_ef1d0b06d36e4ddc->insert(tuple,READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt));
1430}
1431}
1432();}
1433[&](){
1434CREATE_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt,rel_delta_might_collect_d651f71586aafe59->createContext());
1435CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1436for(const auto& env0 : *rel_might_collect_ef1d0b06d36e4ddc) {
1437Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1438rel_delta_might_collect_d651f71586aafe59->insert(tuple,READ_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt));
1439}
1440}
1441();auto loop_counter = RamUnsigned(1);
1442iter = 0;
1443for(;;) {
1444signalHandler->setMsg(R"_(might_collect(f,s) :-
1445 call(f,s,g),
1446 might_collect(g,_).
1447in file call-graph.dl [16:1-16:59])_");
1448if(!(rel_call_ee1d8972d66cc25f->empty()) && !(rel_delta_might_collect_d651f71586aafe59->empty())) {
1449[&](){
1450CREATE_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt,rel_delta_might_collect_d651f71586aafe59->createContext());
1451CREATE_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt,rel_new_might_collect_5d48ef45a97e4618->createContext());
1452CREATE_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt,rel_call_ee1d8972d66cc25f->createContext());
1453CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1454for(const auto& env0 : *rel_call_ee1d8972d66cc25f) {
1455if( !rel_delta_might_collect_d651f71586aafe59->lowerUpperRange_10(Tuple<RamDomain,2>{{ramBitCast(env0[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,2>{{ramBitCast(env0[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt)).empty() && !(rel_might_collect_ef1d0b06d36e4ddc->contains(Tuple<RamDomain,2>{{ramBitCast(env0[0]),ramBitCast(env0[1])}},READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt)))) {
1456Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1457rel_new_might_collect_5d48ef45a97e4618->insert(tuple,READ_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt));
1458}
1459}
1460}
1461();}
1462if(rel_new_might_collect_5d48ef45a97e4618->empty()) break;
1463[&](){
1464CREATE_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt,rel_new_might_collect_5d48ef45a97e4618->createContext());
1465CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1466for(const auto& env0 : *rel_new_might_collect_5d48ef45a97e4618) {
1467Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1468rel_might_collect_ef1d0b06d36e4ddc->insert(tuple,READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt));
1469}
1470}
1471();std::swap(rel_delta_might_collect_d651f71586aafe59, rel_new_might_collect_5d48ef45a97e4618);
1472rel_new_might_collect_5d48ef45a97e4618->purge();
1473loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
1474iter++;
1475}
1476iter = 0;
1477rel_delta_might_collect_d651f71586aafe59->purge();
1478rel_new_might_collect_5d48ef45a97e4618->purge();
1479if (performIO) {
1480try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts"},{"auxArity","0"},{"name","might_collect"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 2, \"params\": [\"f\", \"s\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 2, \"types\": [\"s:Function\", \"i:Statement\"]}}"}});
1481if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1482else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1483IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1484} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1485}
1486}
1487
1488} // namespace souffle
1489
1490namespace souffle {
1491using namespace souffle;
1492class Stratum_stack_root_vars_4df5b9c3cd2e7586 {
1493public:
1494 Stratum_stack_root_vars_4df5b9c3cd2e7586(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__1100::Type& rel_assign_e4bb6e0824a16a37,t_btree_iiiii__0_1_2_3_4__11111__11110::Type& rel_bind_c9210fdc63280a40,t_btree_iii__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_ii__0_1__11__10::Type& rel_might_collect_ef1d0b06d36e4ddc,t_btree_ii__0_1__11::Type& rel_stack_root_vars_a138611bd47fd3ff);
1495void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1496private:
1497SymbolTable& symTable;
1498RecordTable& recordTable;
1499ConcurrentCache<std::string,std::regex>& regexCache;
1500bool& pruneImdtRels;
1501bool& performIO;
1502SignalHandler*& signalHandler;
1503std::atomic<std::size_t>& iter;
1504std::atomic<RamDomain>& ctr;
1505std::string& inputDirectory;
1506std::string& outputDirectory;
1507t_btree_iiii__0_1_2_3__1110__1111__1100::Type* rel_assign_e4bb6e0824a16a37;
1508t_btree_iiiii__0_1_2_3_4__11111__11110::Type* rel_bind_c9210fdc63280a40;
1509t_btree_iii__2_0_1__001__111::Type* rel_call_ee1d8972d66cc25f;
1510t_btree_iii__0_1_2__110__111::Type* rel_live_vars_out_f94306e028b67aa4;
1511t_btree_ii__0_1__11__10::Type* rel_might_collect_ef1d0b06d36e4ddc;
1512t_btree_ii__0_1__11::Type* rel_stack_root_vars_a138611bd47fd3ff;
1513std::vector<std::regex> regexes;
1514};
1515} // namespace souffle
1516namespace souffle {
1517using namespace souffle;
1518 Stratum_stack_root_vars_4df5b9c3cd2e7586::Stratum_stack_root_vars_4df5b9c3cd2e7586(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__1100::Type& rel_assign_e4bb6e0824a16a37,t_btree_iiiii__0_1_2_3_4__11111__11110::Type& rel_bind_c9210fdc63280a40,t_btree_iii__2_0_1__001__111::Type& rel_call_ee1d8972d66cc25f,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_ii__0_1__11__10::Type& rel_might_collect_ef1d0b06d36e4ddc,t_btree_ii__0_1__11::Type& rel_stack_root_vars_a138611bd47fd3ff):
1519symTable(symTable),
1520recordTable(recordTable),
1521regexCache(regexCache),
1522pruneImdtRels(pruneImdtRels),
1523performIO(performIO),
1524signalHandler(signalHandler),
1525iter(iter),
1526ctr(ctr),
1527inputDirectory(inputDirectory),
1528outputDirectory(outputDirectory),
1529rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1530rel_bind_c9210fdc63280a40(&rel_bind_c9210fdc63280a40),
1531rel_call_ee1d8972d66cc25f(&rel_call_ee1d8972d66cc25f),
1532rel_live_vars_out_f94306e028b67aa4(&rel_live_vars_out_f94306e028b67aa4),
1533rel_might_collect_ef1d0b06d36e4ddc(&rel_might_collect_ef1d0b06d36e4ddc),
1534rel_stack_root_vars_a138611bd47fd3ff(&rel_stack_root_vars_a138611bd47fd3ff),
1535regexes({
1536 std::regex(".*ctx_.*__init__"),
1537}){
1538}
1539
1540void Stratum_stack_root_vars_4df5b9c3cd2e7586::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1541signalHandler->setMsg(R"_(stack_root_vars(f,r) :-
1542 call(f,s,g),
1543 might_collect(g,_),
1544 !bind(f,s,r,g,_),
1545 live_vars_out(f,s,r).
1546in file dataflow.dl [60:1-60:107])_");
1547if(!(rel_might_collect_ef1d0b06d36e4ddc->empty()) && !(rel_live_vars_out_f94306e028b67aa4->empty()) && !(rel_call_ee1d8972d66cc25f->empty())) {
1548[&](){
1549CREATE_OP_CONTEXT(rel_bind_c9210fdc63280a40_op_ctxt,rel_bind_c9210fdc63280a40->createContext());
1550CREATE_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt,rel_call_ee1d8972d66cc25f->createContext());
1551CREATE_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt,rel_live_vars_out_f94306e028b67aa4->createContext());
1552CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1553CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1554for(const auto& env0 : *rel_call_ee1d8972d66cc25f) {
1555if( !rel_might_collect_ef1d0b06d36e4ddc->lowerUpperRange_10(Tuple<RamDomain,2>{{ramBitCast(env0[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,2>{{ramBitCast(env0[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt)).empty()) {
1556auto range = rel_live_vars_out_f94306e028b67aa4->lowerUpperRange_110(Tuple<RamDomain,3>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,3>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt));
1557for(const auto& env1 : range) {
1558if( !(!rel_bind_c9210fdc63280a40->lowerUpperRange_11110(Tuple<RamDomain,5>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env1[2]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,5>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env1[2]), ramBitCast(env0[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_bind_c9210fdc63280a40_op_ctxt)).empty())) {
1559Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env1[2])}};
1560rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1561}
1562}
1563}
1564}
1565}
1566();}
1567signalHandler->setMsg(R"_(stack_root_vars(f,$LocalVariable(f, v)) :-
1568 might_collect(f,_),
1569 assign(f,0,$LocalVariable(f, v),$Empty()).
1570in file dataflow.dl [64:1-64:111])_");
1571if(!(rel_might_collect_ef1d0b06d36e4ddc->empty()) && !(rel_assign_e4bb6e0824a16a37->empty())) {
1572[&](){
1573CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1574CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1575CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1576for(const auto& env0 : *rel_might_collect_ef1d0b06d36e4ddc) {
1577auto range = rel_assign_e4bb6e0824a16a37->lowerUpperRange_1100(Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(RamSigned(0)), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,4>{{ramBitCast(env0[0]), ramBitCast(RamSigned(0)), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt));
1578for(const auto& env1 : range) {
1579RamDomain const ref = env1[2];
1580if (ref == 0) continue;
1581const RamDomain *env2 = recordTable.unpack(ref,2);
1582{
1583if( (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1584RamDomain const ref = env2[1];
1585if (ref == 0) continue;
1586const RamDomain *env3 = recordTable.unpack(ref,2);
1587{
1588if( (ramBitCast<RamDomain>(env0[0]) == ramBitCast<RamDomain>(env3[0]))) {
1589RamDomain const ref = env1[3];
1590if (ref == 0) continue;
1591const RamDomain *env4 = recordTable.unpack(ref,2);
1592{
1593if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1594Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(0))),ramBitCast(ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(env0[0])),ramBitCast(ramBitCast(env3[1]))}}
1595)))}}
1596))}};
1597rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1598}
1599}
1600}
1601}
1602}
1603}
1604}
1605}
1606}
1607();}
1608signalHandler->setMsg(R"_(stack_root_vars(f,$ObjectMember("self", m)) :-
1609 match(".*ctx_.*__init__", f),
1610 assign(f,_,$ObjectMember("self", m),_).
1611in file dataflow.dl [67:1-67:121])_");
1612if(!(rel_assign_e4bb6e0824a16a37->empty())) {
1613[&](){
1614CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1615CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1616for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
1617if( std::regex_match(symTable.decode(env0[0]), regexes.at(0))) {
1618RamDomain const ref = env0[2];
1619if (ref == 0) continue;
1620const RamDomain *env1 = recordTable.unpack(ref,2);
1621{
1622if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1623RamDomain const ref = env1[1];
1624if (ref == 0) continue;
1625const RamDomain *env2 = recordTable.unpack(ref,2);
1626{
1627if( (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1628Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(pack(recordTable,Tuple<RamDomain,2>{{ramBitCast(ramBitCast(RamSigned(1))),ramBitCast(ramBitCast(env2[1]))}}
1629)))}}
1630))}};
1631rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1632}
1633}
1634}
1635}
1636}
1637}
1638}
1639();}
1640if (performIO) {
1641try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\tr"},{"auxArity","0"},{"delimeter","\t"},{"filename","stack_root_vars.tsv"},{"name","stack_root_vars"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 2, \"params\": [\"f\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 2, \"types\": [\"s:Function\", \"+:Reference\"]}}"}});
1642if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1643else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1644IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1645} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1646}
1647if (pruneImdtRels) rel_assign_e4bb6e0824a16a37->purge();
1648if (pruneImdtRels) rel_bind_c9210fdc63280a40->purge();
1649if (pruneImdtRels) rel_call_ee1d8972d66cc25f->purge();
1650if (pruneImdtRels) rel_live_vars_out_f94306e028b67aa4->purge();
1651}
1652
1653} // namespace souffle
1654
1655namespace souffle {
1656using namespace souffle;
1657class Stratum_use_f38e4ba456a0cc9a {
1658public:
1659 Stratum_use_f38e4ba456a0cc9a(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_use_e955e932f22dad4d);
1660void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1661private:
1662SymbolTable& symTable;
1663RecordTable& recordTable;
1664ConcurrentCache<std::string,std::regex>& regexCache;
1665bool& pruneImdtRels;
1666bool& performIO;
1667SignalHandler*& signalHandler;
1668std::atomic<std::size_t>& iter;
1669std::atomic<RamDomain>& ctr;
1670std::string& inputDirectory;
1671std::string& outputDirectory;
1672t_btree_iii__0_1_2__111::Type* rel_use_e955e932f22dad4d;
1673};
1674} // namespace souffle
1675namespace souffle {
1676using namespace souffle;
1677 Stratum_use_f38e4ba456a0cc9a::Stratum_use_f38e4ba456a0cc9a(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_use_e955e932f22dad4d):
1678symTable(symTable),
1679recordTable(recordTable),
1680regexCache(regexCache),
1681pruneImdtRels(pruneImdtRels),
1682performIO(performIO),
1683signalHandler(signalHandler),
1684iter(iter),
1685ctr(ctr),
1686inputDirectory(inputDirectory),
1687outputDirectory(outputDirectory),
1688rel_use_e955e932f22dad4d(&rel_use_e955e932f22dad4d){
1689}
1690
1691void Stratum_use_f38e4ba456a0cc9a::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1692if (performIO) {
1693try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr"},{"auxArity","0"},{"fact-dir","."},{"name","use"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1694if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1695IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_use_e955e932f22dad4d);
1696} catch (std::exception& e) {std::cerr << "Error loading use data: " << e.what() << '\n';
1697exit(1);
1698}
1699}
1700}
1701
1702} // namespace souffle
1703
1704namespace souffle {
1705using namespace souffle;
1706class Sf__: public SouffleProgram {
1707public:
1708 Sf__();
1709 ~Sf__();
1710void run();
1711void runAll(std::string inputDirectoryArg = "",std::string outputDirectoryArg = "",bool performIOArg = true,bool pruneImdtRelsArg = true);
1712void printAll([[maybe_unused]] std::string outputDirectoryArg = "");
1713void loadAll([[maybe_unused]] std::string inputDirectoryArg = "");
1714void dumpInputs();
1715void dumpOutputs();
1716SymbolTable& getSymbolTable();
1717RecordTable& getRecordTable();
1718void setNumThreads(std::size_t numThreadsValue);
1719void executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret);
1720private:
1721void runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg);
1722SymbolTableImpl symTable;
1723SpecializedRecordTable<0,2> recordTable;
1724ConcurrentCache<std::string,std::regex> regexCache;
1725Own<t_btree_iiii__0_1_2_3__1110__1111__1100::Type> rel_assign_e4bb6e0824a16a37;
1726souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1110__1111__1100::Type> wrapper_rel_assign_e4bb6e0824a16a37;
1727Own<t_btree_iiiii__0_1_2_3_4__11111__11110::Type> rel_bind_c9210fdc63280a40;
1728souffle::RelationWrapper<t_btree_iiiii__0_1_2_3_4__11111__11110::Type> wrapper_rel_bind_c9210fdc63280a40;
1729Own<t_btree_iii__2_0_1__001__111::Type> rel_call_ee1d8972d66cc25f;
1730souffle::RelationWrapper<t_btree_iii__2_0_1__001__111::Type> wrapper_rel_call_ee1d8972d66cc25f;
1731Own<t_btree_ii__0_1__11__10::Type> rel_might_collect_ef1d0b06d36e4ddc;
1732souffle::RelationWrapper<t_btree_ii__0_1__11__10::Type> wrapper_rel_might_collect_ef1d0b06d36e4ddc;
1733Own<t_btree_ii__0_1__11__10::Type> rel_delta_might_collect_d651f71586aafe59;
1734Own<t_btree_ii__0_1__11__10::Type> rel_new_might_collect_5d48ef45a97e4618;
1735Own<t_btree_iii__0_1_2__111::Type> rel_cf_edge_4931a04c8c74bb72;
1736souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_cf_edge_4931a04c8c74bb72;
1737Own<t_btree_iii__0_1_2__111::Type> rel_use_e955e932f22dad4d;
1738souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_use_e955e932f22dad4d;
1739Own<t_btree_iii__0_1_2__111::Type> rel_live_vars_in_0b002b95687eda95;
1740souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_live_vars_in_0b002b95687eda95;
1741Own<t_btree_iii__0_1_2__110__111::Type> rel_delta_live_vars_in_fccc4ee6df066f63;
1742Own<t_btree_iii__0_1_2__110__111::Type> rel_new_live_vars_in_0b01be53183b2351;
1743Own<t_btree_iii__0_1_2__110__111::Type> rel_live_vars_out_f94306e028b67aa4;
1744souffle::RelationWrapper<t_btree_iii__0_1_2__110__111::Type> wrapper_rel_live_vars_out_f94306e028b67aa4;
1745Own<t_btree_iii__0_1_2__111::Type> rel_delta_live_vars_out_acc66913cea62d16;
1746Own<t_btree_iii__0_1_2__111::Type> rel_new_live_vars_out_2d78073638bb3740;
1747Own<t_btree_ii__0_1__11::Type> rel_stack_root_vars_a138611bd47fd3ff;
1748souffle::RelationWrapper<t_btree_ii__0_1__11::Type> wrapper_rel_stack_root_vars_a138611bd47fd3ff;
1749Stratum_assign_e0d78e44f4df6411 stratum_assign_f550d366a9215d2a;
1750Stratum_bind_8b0da46e2379b6cd stratum_bind_1968829e9243d389;
1751Stratum_call_104fac07831e2229 stratum_call_587d2d7effb5d130;
1752Stratum_cf_edge_c2ae152829fd6f1f stratum_cf_edge_4017fef287699967;
1753Stratum_live_vars_in_a363f2025538826a stratum_live_vars_in_c3dc49a4823a7f1e;
1754Stratum_might_collect_beadc513d07ff032 stratum_might_collect_cc50af26f53a71ac;
1755Stratum_stack_root_vars_4df5b9c3cd2e7586 stratum_stack_root_vars_49e4f510c537163e;
1756Stratum_use_f38e4ba456a0cc9a stratum_use_2e20cb5441769259;
1757std::string inputDirectory;
1758std::string outputDirectory;
1759SignalHandler* signalHandler{SignalHandler::instance()};
1760std::atomic<RamDomain> ctr{};
1761std::atomic<std::size_t> iter{};
1762};
1763} // namespace souffle
1764namespace souffle {
1765using namespace souffle;
1766 Sf__::Sf__():
1767symTable({
1768 R"_(mylib.MaybeCollect)_",
1769 R"_(self)_",
1770 R"_(.*ctx_.*__init__)_",
1771}),
1772recordTable(),
1773regexCache(),
1774rel_assign_e4bb6e0824a16a37(mk<t_btree_iiii__0_1_2_3__1110__1111__1100::Type>()),
1775wrapper_rel_assign_e4bb6e0824a16a37(0, *rel_assign_e4bb6e0824a16a37, *this, "assign", std::array<const char *,4>{{"s:Function","i:Statement","+:Reference","+:Value"}}, std::array<const char *,4>{{"f","s","r","v"}}, 0),
1776rel_bind_c9210fdc63280a40(mk<t_btree_iiiii__0_1_2_3_4__11111__11110::Type>()),
1777wrapper_rel_bind_c9210fdc63280a40(1, *rel_bind_c9210fdc63280a40, *this, "bind", std::array<const char *,5>{{"s:Function","i:Statement","+:Reference","s:Function","s:symbol"}}, std::array<const char *,5>{{"caller","s","r","callee","param"}}, 0),
1778rel_call_ee1d8972d66cc25f(mk<t_btree_iii__2_0_1__001__111::Type>()),
1779wrapper_rel_call_ee1d8972d66cc25f(2, *rel_call_ee1d8972d66cc25f, *this, "call", std::array<const char *,3>{{"s:Function","i:Statement","s:Function"}}, std::array<const char *,3>{{"caller","s","callee"}}, 0),
1780rel_might_collect_ef1d0b06d36e4ddc(mk<t_btree_ii__0_1__11__10::Type>()),
1781wrapper_rel_might_collect_ef1d0b06d36e4ddc(3, *rel_might_collect_ef1d0b06d36e4ddc, *this, "might_collect", std::array<const char *,2>{{"s:Function","i:Statement"}}, std::array<const char *,2>{{"f","s"}}, 0),
1782rel_delta_might_collect_d651f71586aafe59(mk<t_btree_ii__0_1__11__10::Type>()),
1783rel_new_might_collect_5d48ef45a97e4618(mk<t_btree_ii__0_1__11__10::Type>()),
1784rel_cf_edge_4931a04c8c74bb72(mk<t_btree_iii__0_1_2__111::Type>()),
1785wrapper_rel_cf_edge_4931a04c8c74bb72(4, *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),
1786rel_use_e955e932f22dad4d(mk<t_btree_iii__0_1_2__111::Type>()),
1787wrapper_rel_use_e955e932f22dad4d(5, *rel_use_e955e932f22dad4d, *this, "use", std::array<const char *,3>{{"s:Function","i:Statement","+:Reference"}}, std::array<const char *,3>{{"f","s","r"}}, 0),
1788rel_live_vars_in_0b002b95687eda95(mk<t_btree_iii__0_1_2__111::Type>()),
1789wrapper_rel_live_vars_in_0b002b95687eda95(6, *rel_live_vars_in_0b002b95687eda95, *this, "live_vars_in", std::array<const char *,3>{{"s:Function","i:Statement","+:Reference"}}, std::array<const char *,3>{{"f","s","r"}}, 0),
1790rel_delta_live_vars_in_fccc4ee6df066f63(mk<t_btree_iii__0_1_2__110__111::Type>()),
1791rel_new_live_vars_in_0b01be53183b2351(mk<t_btree_iii__0_1_2__110__111::Type>()),
1792rel_live_vars_out_f94306e028b67aa4(mk<t_btree_iii__0_1_2__110__111::Type>()),
1793wrapper_rel_live_vars_out_f94306e028b67aa4(7, *rel_live_vars_out_f94306e028b67aa4, *this, "live_vars_out", std::array<const char *,3>{{"s:Function","i:Statement","+:Reference"}}, std::array<const char *,3>{{"f","s","r"}}, 0),
1794rel_delta_live_vars_out_acc66913cea62d16(mk<t_btree_iii__0_1_2__111::Type>()),
1795rel_new_live_vars_out_2d78073638bb3740(mk<t_btree_iii__0_1_2__111::Type>()),
1796rel_stack_root_vars_a138611bd47fd3ff(mk<t_btree_ii__0_1__11::Type>()),
1797wrapper_rel_stack_root_vars_a138611bd47fd3ff(8, *rel_stack_root_vars_a138611bd47fd3ff, *this, "stack_root_vars", std::array<const char *,2>{{"s:Function","+:Reference"}}, std::array<const char *,2>{{"f","r"}}, 0),
1798stratum_assign_f550d366a9215d2a(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37),
1799stratum_bind_1968829e9243d389(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_bind_c9210fdc63280a40),
1800stratum_call_587d2d7effb5d130(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_call_ee1d8972d66cc25f),
1801stratum_cf_edge_4017fef287699967(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_cf_edge_4931a04c8c74bb72),
1802stratum_live_vars_in_c3dc49a4823a7f1e(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_delta_live_vars_in_fccc4ee6df066f63,*rel_delta_live_vars_out_acc66913cea62d16,*rel_new_live_vars_in_0b01be53183b2351,*rel_new_live_vars_out_2d78073638bb3740,*rel_assign_e4bb6e0824a16a37,*rel_cf_edge_4931a04c8c74bb72,*rel_live_vars_in_0b002b95687eda95,*rel_live_vars_out_f94306e028b67aa4,*rel_use_e955e932f22dad4d),
1803stratum_might_collect_cc50af26f53a71ac(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_delta_might_collect_d651f71586aafe59,*rel_new_might_collect_5d48ef45a97e4618,*rel_call_ee1d8972d66cc25f,*rel_might_collect_ef1d0b06d36e4ddc),
1804stratum_stack_root_vars_49e4f510c537163e(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37,*rel_bind_c9210fdc63280a40,*rel_call_ee1d8972d66cc25f,*rel_live_vars_out_f94306e028b67aa4,*rel_might_collect_ef1d0b06d36e4ddc,*rel_stack_root_vars_a138611bd47fd3ff),
1805stratum_use_2e20cb5441769259(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_use_e955e932f22dad4d){
1806addRelation("assign", wrapper_rel_assign_e4bb6e0824a16a37, true, false);
1807addRelation("bind", wrapper_rel_bind_c9210fdc63280a40, true, false);
1808addRelation("call", wrapper_rel_call_ee1d8972d66cc25f, true, false);
1809addRelation("might_collect", wrapper_rel_might_collect_ef1d0b06d36e4ddc, false, true);
1810addRelation("cf_edge", wrapper_rel_cf_edge_4931a04c8c74bb72, true, false);
1811addRelation("use", wrapper_rel_use_e955e932f22dad4d, true, false);
1812addRelation("live_vars_in", wrapper_rel_live_vars_in_0b002b95687eda95, false, false);
1813addRelation("live_vars_out", wrapper_rel_live_vars_out_f94306e028b67aa4, false, false);
1814addRelation("stack_root_vars", wrapper_rel_stack_root_vars_a138611bd47fd3ff, false, true);
1815}
1816
1817 Sf__::~Sf__(){
1818}
1819
1820void Sf__::runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1821
1822 this->inputDirectory = std::move(inputDirectoryArg);
1823 this->outputDirectory = std::move(outputDirectoryArg);
1824 this->performIO = performIOArg;
1825 this->pruneImdtRels = pruneImdtRelsArg;
1826
1827 // set default threads (in embedded mode)
1828 // if this is not set, and omp is used, the default omp setting of number of cores is used.
1829#if defined(_OPENMP)
1830 if (0 < getNumThreads()) { omp_set_num_threads(static_cast<int>(getNumThreads())); }
1831#endif
1832
1833 signalHandler->set();
1834// -- query evaluation --
1835{
1836 std::vector<RamDomain> args, ret;
1837stratum_assign_f550d366a9215d2a.run(args, ret);
1838}
1839{
1840 std::vector<RamDomain> args, ret;
1841stratum_bind_1968829e9243d389.run(args, ret);
1842}
1843{
1844 std::vector<RamDomain> args, ret;
1845stratum_call_587d2d7effb5d130.run(args, ret);
1846}
1847{
1848 std::vector<RamDomain> args, ret;
1849stratum_might_collect_cc50af26f53a71ac.run(args, ret);
1850}
1851{
1852 std::vector<RamDomain> args, ret;
1853stratum_cf_edge_4017fef287699967.run(args, ret);
1854}
1855{
1856 std::vector<RamDomain> args, ret;
1857stratum_use_2e20cb5441769259.run(args, ret);
1858}
1859{
1860 std::vector<RamDomain> args, ret;
1861stratum_live_vars_in_c3dc49a4823a7f1e.run(args, ret);
1862}
1863{
1864 std::vector<RamDomain> args, ret;
1865stratum_stack_root_vars_49e4f510c537163e.run(args, ret);
1866}
1867
1868// -- relation hint statistics --
1869signalHandler->reset();
1870}
1871
1872void Sf__::run(){
1873runFunction("", "", false, false);
1874}
1875
1876void Sf__::runAll(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1877runFunction(inputDirectoryArg, outputDirectoryArg, performIOArg, pruneImdtRelsArg);
1878}
1879
1880void Sf__::printAll([[maybe_unused]] std::string outputDirectoryArg){
1881try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts"},{"auxArity","0"},{"name","might_collect"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 2, \"params\": [\"f\", \"s\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 2, \"types\": [\"s:Function\", \"i:Statement\"]}}"}});
1882if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1883IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1884} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1885try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\tr"},{"auxArity","0"},{"delimeter","\t"},{"filename","stack_root_vars.tsv"},{"name","stack_root_vars"},{"operation","output"},{"output-dir","."},{"params","{\"records\": {}, \"relation\": {\"arity\": 2, \"params\": [\"f\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 2, \"types\": [\"s:Function\", \"+:Reference\"]}}"}});
1886if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1887IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1888} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1889}
1890
1891void Sf__::loadAll([[maybe_unused]] std::string inputDirectoryArg){
1892try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr\tv"},{"auxArity","0"},{"fact-dir","."},{"name","assign"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 4, \"params\": [\"f\", \"s\", \"r\", \"v\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 4, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Value\"]}}"}});
1893if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1894IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1895} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1896exit(1);
1897}
1898try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","caller\ts\tr\tcallee\tparam"},{"auxArity","0"},{"fact-dir","."},{"name","bind"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 5, \"params\": [\"caller\", \"s\", \"r\", \"callee\", \"param\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 5, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"s:symbol\"]}}"}});
1899if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1900IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_bind_c9210fdc63280a40);
1901} catch (std::exception& e) {std::cerr << "Error loading bind data: " << e.what() << '\n';
1902exit(1);
1903}
1904try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","caller\ts\tcallee"},{"auxArity","0"},{"fact-dir","."},{"name","call"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"caller\", \"s\", \"callee\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"s:Function\"]}}"}});
1905if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1906IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_call_ee1d8972d66cc25f);
1907} catch (std::exception& e) {std::cerr << "Error loading call data: " << e.what() << '\n';
1908exit(1);
1909}
1910try {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\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}"}});
1911if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1912IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1913} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1914exit(1);
1915}
1916try {std::map<std::string, std::string> directiveMap({{"IO","file"},{"attributeNames","f\ts\tr"},{"auxArity","0"},{"fact-dir","."},{"name","use"},{"operation","input"},{"params","{\"records\": {}, \"relation\": {\"arity\": 3, \"params\": [\"f\", \"s\", \"r\"]}}"},{"types","{\"ADTs\": {\"+:Reference\": {\"arity\": 2, \"branches\": [{\"name\": \"LocalVariable\", \"types\": [\"s:Function\", \"s:symbol\"]}, {\"name\": \"ObjectMember\", \"types\": [\"s:symbol\", \"s:symbol\"]}], \"enum\": false}, \"+:Value\": {\"arity\": 3, \"branches\": [{\"name\": \"Empty\", \"types\": []}, {\"name\": \"HeapObject\", \"types\": [\"s:symbol\"]}, {\"name\": \"Ref\", \"types\": [\"+:Reference\"]}], \"enum\": false}}, \"records\": {}, \"relation\": {\"arity\": 3, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}"}});
1917if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1918IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_use_e955e932f22dad4d);
1919} catch (std::exception& e) {std::cerr << "Error loading use data: " << e.what() << '\n';
1920exit(1);
1921}
1922}
1923
1924void Sf__::dumpInputs(){
1925try {std::map<std::string, std::string> rwOperation;
1926rwOperation["IO"] = "stdout";
1927rwOperation["name"] = "assign";
1928rwOperation["types"] = "{\"relation\": {\"arity\": 4, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Value\"]}}";
1929IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_assign_e4bb6e0824a16a37);
1930} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1931try {std::map<std::string, std::string> rwOperation;
1932rwOperation["IO"] = "stdout";
1933rwOperation["name"] = "bind";
1934rwOperation["types"] = "{\"relation\": {\"arity\": 5, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"s:symbol\"]}}";
1935IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_bind_c9210fdc63280a40);
1936} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1937try {std::map<std::string, std::string> rwOperation;
1938rwOperation["IO"] = "stdout";
1939rwOperation["name"] = "call";
1940rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"s:Function\"]}}";
1941IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_call_ee1d8972d66cc25f);
1942} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1943try {std::map<std::string, std::string> rwOperation;
1944rwOperation["IO"] = "stdout";
1945rwOperation["name"] = "cf_edge";
1946rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}";
1947IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_cf_edge_4931a04c8c74bb72);
1948} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1949try {std::map<std::string, std::string> rwOperation;
1950rwOperation["IO"] = "stdout";
1951rwOperation["name"] = "use";
1952rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1953IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_use_e955e932f22dad4d);
1954} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1955}
1956
1957void Sf__::dumpOutputs(){
1958try {std::map<std::string, std::string> rwOperation;
1959rwOperation["IO"] = "stdout";
1960rwOperation["name"] = "might_collect";
1961rwOperation["types"] = "{\"relation\": {\"arity\": 2, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\"]}}";
1962IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1963} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1964try {std::map<std::string, std::string> rwOperation;
1965rwOperation["IO"] = "stdout";
1966rwOperation["name"] = "stack_root_vars";
1967rwOperation["types"] = "{\"relation\": {\"arity\": 2, \"auxArity\": 0, \"types\": [\"s:Function\", \"+:Reference\"]}}";
1968IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1969} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1970}
1971
1972SymbolTable& Sf__::getSymbolTable(){
1973return symTable;
1974}
1975
1976RecordTable& Sf__::getRecordTable(){
1977return recordTable;
1978}
1979
1980void Sf__::setNumThreads(std::size_t numThreadsValue){
1981SouffleProgram::setNumThreads(numThreadsValue);
1982symTable.setNumLanes(getNumThreads());
1983recordTable.setNumLanes(getNumThreads());
1984regexCache.setNumLanes(getNumThreads());
1985}
1986
1987void Sf__::executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret){
1988if (name == "assign") {
1989stratum_assign_f550d366a9215d2a.run(args, ret);
1990return;}
1991if (name == "bind") {
1992stratum_bind_1968829e9243d389.run(args, ret);
1993return;}
1994if (name == "call") {
1995stratum_call_587d2d7effb5d130.run(args, ret);
1996return;}
1997if (name == "cf_edge") {
1998stratum_cf_edge_4017fef287699967.run(args, ret);
1999return;}
2000if (name == "live_vars_in") {
2001stratum_live_vars_in_c3dc49a4823a7f1e.run(args, ret);
2002return;}
2003if (name == "might_collect") {
2004stratum_might_collect_cc50af26f53a71ac.run(args, ret);
2005return;}
2006if (name == "stack_root_vars") {
2007stratum_stack_root_vars_49e4f510c537163e.run(args, ret);
2008return;}
2009if (name == "use") {
2010stratum_use_2e20cb5441769259.run(args, ret);
2011return;}
2012fatal(("unknown subroutine " + name).c_str());
2013}
2014
2015} // namespace souffle
2016namespace souffle {
2017SouffleProgram *newInstance__(){return new souffle::Sf__;}
2018SymbolTable *getST__(SouffleProgram *p){return &reinterpret_cast<souffle::Sf__*>(p)->getSymbolTable();}
2019} // namespace souffle
2020
2021#ifndef __EMBEDDED_SOUFFLE__
2022#include "souffle/CompiledOptions.h"
2023int main(int argc, char** argv)
2024{
2025try{
2026souffle::CmdOptions opt(R"(mycpp/datalog/dataflow.dl)",
2027R"()",
2028R"()",
2029false,
2030R"()",
20311);
2032if (!opt.parse(argc,argv)) return 1;
2033souffle::Sf__ obj;
2034#if defined(_OPENMP)
2035obj.setNumThreads(opt.getNumJobs());
2036
2037#endif
2038obj.runAll(opt.getInputFileDir(), opt.getOutputFileDir());
2039return 0;
2040} catch(std::exception &e) { souffle::SignalHandler::instance()->error(e.what());}
2041}
2042#endif
2043
2044namespace souffle {
2045using namespace souffle;
2046class factory_Sf__: souffle::ProgramFactory {
2047public:
2048souffle::SouffleProgram* newInstance();
2049 factory_Sf__();
2050private:
2051};
2052} // namespace souffle
2053namespace souffle {
2054using namespace souffle;
2055souffle::SouffleProgram* factory_Sf__::newInstance(){
2056return new souffle::Sf__();
2057}
2058
2059 factory_Sf__::factory_Sf__():
2060souffle::ProgramFactory("_"){
2061}
2062
2063} // namespace souffle
2064namespace souffle {
2065
2066#ifdef __EMBEDDED_SOUFFLE__
2067extern "C" {
2068souffle::factory_Sf__ __factory_Sf___instance;
2069}
2070#endif
2071} // namespace souffle
2072