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

2059 lines, 1648 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__11100__11111 {
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_11100(const t_tuple& lower, const t_tuple& upper, context& h) const;
207range<t_ind_0::iterator> lowerUpperRange_11100(const t_tuple& lower, const t_tuple& upper) const;
208range<t_ind_0::iterator> lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper, context& h) const;
209range<t_ind_0::iterator> lowerUpperRange_11111(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__11100__11111
218namespace souffle::t_btree_iiiii__0_1_2_3_4__11100__11111 {
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_11100(const t_tuple& lower, const t_tuple& upper, context& h) const {
267t_comparator_0 comparator;
268int cmp = comparator(lower, upper);
269if (cmp > 0) {
270 return make_range(ind_0.end(), ind_0.end());
271}
272return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
273}
274range<t_ind_0::iterator> Type::lowerUpperRange_11100(const t_tuple& lower, const t_tuple& upper) const {
275context h;
276return lowerUpperRange_11100(lower,upper,h);
277}
278range<t_ind_0::iterator> Type::lowerUpperRange_11111(const t_tuple& lower, const t_tuple& upper, context& h) const {
279t_comparator_0 comparator;
280int cmp = comparator(lower, upper);
281if (cmp == 0) {
282 auto pos = ind_0.find(lower, h.hints_0_lower);
283 auto fin = ind_0.end();
284 if (pos != fin) {fin = pos; ++fin;}
285 return make_range(pos, fin);
286}
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_11111(const t_tuple& lower, const t_tuple& upper) const {
293context h;
294return lowerUpperRange_11111(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__11100__11111
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 {
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;
498bool empty() const;
499std::vector<range<iterator>> partition() const;
500void purge();
501iterator begin() const;
502iterator end() const;
503void printStatistics(std::ostream& o) const;
504};
505} // namespace souffle::t_btree_ii__0_1__11
506namespace souffle::t_btree_ii__0_1__11 {
507using namespace souffle;
508using t_ind_0 = Type::t_ind_0;
509using iterator = Type::iterator;
510using context = Type::context;
511bool Type::insert(const t_tuple& t) {
512context h;
513return insert(t, h);
514}
515bool Type::insert(const t_tuple& t, context& h) {
516if (ind_0.insert(t, h.hints_0_lower)) {
517return true;
518} else return false;
519}
520bool Type::insert(const RamDomain* ramDomain) {
521RamDomain data[2];
522std::copy(ramDomain, ramDomain + 2, data);
523const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
524context h;
525return insert(tuple, h);
526}
527bool Type::insert(RamDomain a0,RamDomain a1) {
528RamDomain data[2] = {a0,a1};
529return insert(data);
530}
531bool Type::contains(const t_tuple& t, context& h) const {
532return ind_0.contains(t, h.hints_0_lower);
533}
534bool Type::contains(const t_tuple& t) const {
535context h;
536return contains(t, h);
537}
538std::size_t Type::size() const {
539return ind_0.size();
540}
541iterator Type::find(const t_tuple& t, context& h) const {
542return ind_0.find(t, h.hints_0_lower);
543}
544iterator Type::find(const t_tuple& t) const {
545context h;
546return find(t, h);
547}
548range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
549return range<iterator>(ind_0.begin(),ind_0.end());
550}
551range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
552return range<iterator>(ind_0.begin(),ind_0.end());
553}
554range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const {
555t_comparator_0 comparator;
556int cmp = comparator(lower, upper);
557if (cmp == 0) {
558 auto pos = ind_0.find(lower, h.hints_0_lower);
559 auto fin = ind_0.end();
560 if (pos != fin) {fin = pos; ++fin;}
561 return make_range(pos, fin);
562}
563if (cmp > 0) {
564 return make_range(ind_0.end(), ind_0.end());
565}
566return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
567}
568range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const {
569context h;
570return lowerUpperRange_11(lower,upper,h);
571}
572bool Type::empty() const {
573return ind_0.empty();
574}
575std::vector<range<iterator>> Type::partition() const {
576return ind_0.getChunks(400);
577}
578void Type::purge() {
579ind_0.clear();
580}
581iterator Type::begin() const {
582return ind_0.begin();
583}
584iterator Type::end() const {
585return ind_0.end();
586}
587void Type::printStatistics(std::ostream& o) const {
588o << " arity 2 direct b-tree index 0 lex-order [0,1]\n";
589ind_0.printStats(o);
590}
591} // namespace souffle::t_btree_ii__0_1__11
592namespace souffle::t_btree_ii__0_1__11__10 {
593using namespace souffle;
594struct Type {
595static constexpr Relation::arity_type Arity = 2;
596using t_tuple = Tuple<RamDomain, 2>;
597struct t_comparator_0{
598 int operator()(const t_tuple& a, const t_tuple& b) const {
599 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));
600 }
601bool less(const t_tuple& a, const t_tuple& b) const {
602 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]))));
603 }
604bool equal(const t_tuple& a, const t_tuple& b) const {
605return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]));
606 }
607};
608using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
609t_ind_0 ind_0;
610using iterator = t_ind_0::iterator;
611struct context {
612t_ind_0::operation_hints hints_0_lower;
613t_ind_0::operation_hints hints_0_upper;
614};
615context createContext() { return context(); }
616bool insert(const t_tuple& t);
617bool insert(const t_tuple& t, context& h);
618bool insert(const RamDomain* ramDomain);
619bool insert(RamDomain a0,RamDomain a1);
620bool contains(const t_tuple& t, context& h) const;
621bool contains(const t_tuple& t) const;
622std::size_t size() const;
623iterator find(const t_tuple& t, context& h) const;
624iterator find(const t_tuple& t) const;
625range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
626range<iterator> lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
627range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const;
628range<t_ind_0::iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const;
629range<t_ind_0::iterator> lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper, context& h) const;
630range<t_ind_0::iterator> lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper) const;
631bool empty() const;
632std::vector<range<iterator>> partition() const;
633void purge();
634iterator begin() const;
635iterator end() const;
636void printStatistics(std::ostream& o) const;
637};
638} // namespace souffle::t_btree_ii__0_1__11__10
639namespace souffle::t_btree_ii__0_1__11__10 {
640using namespace souffle;
641using t_ind_0 = Type::t_ind_0;
642using iterator = Type::iterator;
643using context = Type::context;
644bool Type::insert(const t_tuple& t) {
645context h;
646return insert(t, h);
647}
648bool Type::insert(const t_tuple& t, context& h) {
649if (ind_0.insert(t, h.hints_0_lower)) {
650return true;
651} else return false;
652}
653bool Type::insert(const RamDomain* ramDomain) {
654RamDomain data[2];
655std::copy(ramDomain, ramDomain + 2, data);
656const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
657context h;
658return insert(tuple, h);
659}
660bool Type::insert(RamDomain a0,RamDomain a1) {
661RamDomain data[2] = {a0,a1};
662return insert(data);
663}
664bool Type::contains(const t_tuple& t, context& h) const {
665return ind_0.contains(t, h.hints_0_lower);
666}
667bool Type::contains(const t_tuple& t) const {
668context h;
669return contains(t, h);
670}
671std::size_t Type::size() const {
672return ind_0.size();
673}
674iterator Type::find(const t_tuple& t, context& h) const {
675return ind_0.find(t, h.hints_0_lower);
676}
677iterator Type::find(const t_tuple& t) const {
678context h;
679return find(t, h);
680}
681range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
682return range<iterator>(ind_0.begin(),ind_0.end());
683}
684range<iterator> Type::lowerUpperRange_00(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
685return range<iterator>(ind_0.begin(),ind_0.end());
686}
687range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const {
688t_comparator_0 comparator;
689int cmp = comparator(lower, upper);
690if (cmp == 0) {
691 auto pos = ind_0.find(lower, h.hints_0_lower);
692 auto fin = ind_0.end();
693 if (pos != fin) {fin = pos; ++fin;}
694 return make_range(pos, fin);
695}
696if (cmp > 0) {
697 return make_range(ind_0.end(), ind_0.end());
698}
699return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
700}
701range<t_ind_0::iterator> Type::lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const {
702context h;
703return lowerUpperRange_11(lower,upper,h);
704}
705range<t_ind_0::iterator> Type::lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper, context& h) const {
706t_comparator_0 comparator;
707int cmp = comparator(lower, upper);
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_10(const t_tuple& lower, const t_tuple& upper) const {
714context h;
715return lowerUpperRange_10(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 2 direct b-tree index 0 lex-order [0,1]\n";
734ind_0.printStats(o);
735}
736} // namespace souffle::t_btree_ii__0_1__11__10
737namespace souffle::t_btree_iii__0_1_2__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_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
773range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
774bool empty() const;
775std::vector<range<iterator>> partition() const;
776void purge();
777iterator begin() const;
778iterator end() const;
779void printStatistics(std::ostream& o) const;
780};
781} // namespace souffle::t_btree_iii__0_1_2__111
782namespace souffle::t_btree_iii__0_1_2__111 {
783using namespace souffle;
784using t_ind_0 = Type::t_ind_0;
785using iterator = Type::iterator;
786using context = Type::context;
787bool Type::insert(const t_tuple& t) {
788context h;
789return insert(t, h);
790}
791bool Type::insert(const t_tuple& t, context& h) {
792if (ind_0.insert(t, h.hints_0_lower)) {
793return true;
794} else return false;
795}
796bool Type::insert(const RamDomain* ramDomain) {
797RamDomain data[3];
798std::copy(ramDomain, ramDomain + 3, data);
799const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
800context h;
801return insert(tuple, h);
802}
803bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
804RamDomain data[3] = {a0,a1,a2};
805return insert(data);
806}
807bool Type::contains(const t_tuple& t, context& h) const {
808return ind_0.contains(t, h.hints_0_lower);
809}
810bool Type::contains(const t_tuple& t) const {
811context h;
812return contains(t, h);
813}
814std::size_t Type::size() const {
815return ind_0.size();
816}
817iterator Type::find(const t_tuple& t, context& h) const {
818return ind_0.find(t, h.hints_0_lower);
819}
820iterator Type::find(const t_tuple& t) const {
821context h;
822return find(t, h);
823}
824range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
825return range<iterator>(ind_0.begin(),ind_0.end());
826}
827range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
828return range<iterator>(ind_0.begin(),ind_0.end());
829}
830range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const {
831t_comparator_0 comparator;
832int cmp = comparator(lower, upper);
833if (cmp == 0) {
834 auto pos = ind_0.find(lower, h.hints_0_lower);
835 auto fin = ind_0.end();
836 if (pos != fin) {fin = pos; ++fin;}
837 return make_range(pos, fin);
838}
839if (cmp > 0) {
840 return make_range(ind_0.end(), ind_0.end());
841}
842return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
843}
844range<t_ind_0::iterator> Type::lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const {
845context h;
846return lowerUpperRange_111(lower,upper,h);
847}
848bool Type::empty() const {
849return ind_0.empty();
850}
851std::vector<range<iterator>> Type::partition() const {
852return ind_0.getChunks(400);
853}
854void Type::purge() {
855ind_0.clear();
856}
857iterator Type::begin() const {
858return ind_0.begin();
859}
860iterator Type::end() const {
861return ind_0.end();
862}
863void Type::printStatistics(std::ostream& o) const {
864o << " arity 3 direct b-tree index 0 lex-order [0,1,2]\n";
865ind_0.printStats(o);
866}
867} // namespace souffle::t_btree_iii__0_1_2__111
868namespace souffle::t_btree_iii__0_1_2__110__111 {
869using namespace souffle;
870struct Type {
871static constexpr Relation::arity_type Arity = 3;
872using t_tuple = Tuple<RamDomain, 3>;
873struct t_comparator_0{
874 int operator()(const t_tuple& a, const t_tuple& b) const {
875 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)));
876 }
877bool less(const t_tuple& a, const t_tuple& b) const {
878 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]))))));
879 }
880bool equal(const t_tuple& a, const t_tuple& b) const {
881return (ramBitCast<RamSigned>(a[0]) == ramBitCast<RamSigned>(b[0]))&&(ramBitCast<RamSigned>(a[1]) == ramBitCast<RamSigned>(b[1]))&&(ramBitCast<RamSigned>(a[2]) == ramBitCast<RamSigned>(b[2]));
882 }
883};
884using t_ind_0 = btree_set<t_tuple,t_comparator_0>;
885t_ind_0 ind_0;
886using iterator = t_ind_0::iterator;
887struct context {
888t_ind_0::operation_hints hints_0_lower;
889t_ind_0::operation_hints hints_0_upper;
890};
891context createContext() { return context(); }
892bool insert(const t_tuple& t);
893bool insert(const t_tuple& t, context& h);
894bool insert(const RamDomain* ramDomain);
895bool insert(RamDomain a0,RamDomain a1,RamDomain a2);
896bool contains(const t_tuple& t, context& h) const;
897bool contains(const t_tuple& t) const;
898std::size_t size() const;
899iterator find(const t_tuple& t, context& h) const;
900iterator find(const t_tuple& t) const;
901range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const;
902range<iterator> lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const;
903range<t_ind_0::iterator> lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper, context& h) const;
904range<t_ind_0::iterator> lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper) const;
905range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper, context& h) const;
906range<t_ind_0::iterator> lowerUpperRange_111(const t_tuple& lower, const t_tuple& upper) const;
907bool empty() const;
908std::vector<range<iterator>> partition() const;
909void purge();
910iterator begin() const;
911iterator end() const;
912void printStatistics(std::ostream& o) const;
913};
914} // namespace souffle::t_btree_iii__0_1_2__110__111
915namespace souffle::t_btree_iii__0_1_2__110__111 {
916using namespace souffle;
917using t_ind_0 = Type::t_ind_0;
918using iterator = Type::iterator;
919using context = Type::context;
920bool Type::insert(const t_tuple& t) {
921context h;
922return insert(t, h);
923}
924bool Type::insert(const t_tuple& t, context& h) {
925if (ind_0.insert(t, h.hints_0_lower)) {
926return true;
927} else return false;
928}
929bool Type::insert(const RamDomain* ramDomain) {
930RamDomain data[3];
931std::copy(ramDomain, ramDomain + 3, data);
932const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data);
933context h;
934return insert(tuple, h);
935}
936bool Type::insert(RamDomain a0,RamDomain a1,RamDomain a2) {
937RamDomain data[3] = {a0,a1,a2};
938return insert(data);
939}
940bool Type::contains(const t_tuple& t, context& h) const {
941return ind_0.contains(t, h.hints_0_lower);
942}
943bool Type::contains(const t_tuple& t) const {
944context h;
945return contains(t, h);
946}
947std::size_t Type::size() const {
948return ind_0.size();
949}
950iterator Type::find(const t_tuple& t, context& h) const {
951return ind_0.find(t, h.hints_0_lower);
952}
953iterator Type::find(const t_tuple& t) const {
954context h;
955return find(t, h);
956}
957range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */, context& /* h */) const {
958return range<iterator>(ind_0.begin(),ind_0.end());
959}
960range<iterator> Type::lowerUpperRange_000(const t_tuple& /* lower */, const t_tuple& /* upper */) const {
961return range<iterator>(ind_0.begin(),ind_0.end());
962}
963range<t_ind_0::iterator> Type::lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper, context& h) const {
964t_comparator_0 comparator;
965int cmp = comparator(lower, upper);
966if (cmp > 0) {
967 return make_range(ind_0.end(), ind_0.end());
968}
969return make_range(ind_0.lower_bound(lower, h.hints_0_lower), ind_0.upper_bound(upper, h.hints_0_upper));
970}
971range<t_ind_0::iterator> Type::lowerUpperRange_110(const t_tuple& lower, const t_tuple& upper) const {
972context h;
973return lowerUpperRange_110(lower,upper,h);
974}
975range<t_ind_0::iterator> Type::lowerUpperRange_111(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_111(const t_tuple& lower, const t_tuple& upper) const {
990context h;
991return lowerUpperRange_111(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 3 direct b-tree index 0 lex-order [0,1,2]\n";
1010ind_0.printStats(o);
1011}
1012} // namespace souffle::t_btree_iii__0_1_2__110__111
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__11100__11111::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__11100__11111::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__11100__11111::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 [49:1-49: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 [51:1-51: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 [55:1-55: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::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::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::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(f,s) :-
1413 call(f,s,"mylib.MaybeCollect").
1414in file call-graph.dl [14:1-14:57])_");
1415if(!(rel_call_ee1d8972d66cc25f->empty())) {
1416[&](){
1417CREATE_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt,rel_call_ee1d8972d66cc25f->createContext());
1418CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1419auto 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));
1420for(const auto& env0 : range) {
1421Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1422rel_might_collect_ef1d0b06d36e4ddc->insert(tuple,READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt));
1423}
1424}
1425();}
1426[&](){
1427CREATE_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt,rel_delta_might_collect_d651f71586aafe59->createContext());
1428CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1429for(const auto& env0 : *rel_might_collect_ef1d0b06d36e4ddc) {
1430Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1431rel_delta_might_collect_d651f71586aafe59->insert(tuple,READ_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt));
1432}
1433}
1434();auto loop_counter = RamUnsigned(1);
1435iter = 0;
1436for(;;) {
1437signalHandler->setMsg(R"_(might_collect(f,s) :-
1438 call(f,s,g),
1439 might_collect(g,_).
1440in file call-graph.dl [15:1-15:59])_");
1441if(!(rel_call_ee1d8972d66cc25f->empty()) && !(rel_delta_might_collect_d651f71586aafe59->empty())) {
1442[&](){
1443CREATE_OP_CONTEXT(rel_delta_might_collect_d651f71586aafe59_op_ctxt,rel_delta_might_collect_d651f71586aafe59->createContext());
1444CREATE_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt,rel_new_might_collect_5d48ef45a97e4618->createContext());
1445CREATE_OP_CONTEXT(rel_call_ee1d8972d66cc25f_op_ctxt,rel_call_ee1d8972d66cc25f->createContext());
1446CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1447for(const auto& env0 : *rel_call_ee1d8972d66cc25f) {
1448if( !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)))) {
1449Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1450rel_new_might_collect_5d48ef45a97e4618->insert(tuple,READ_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt));
1451}
1452}
1453}
1454();}
1455if(rel_new_might_collect_5d48ef45a97e4618->empty()) break;
1456[&](){
1457CREATE_OP_CONTEXT(rel_new_might_collect_5d48ef45a97e4618_op_ctxt,rel_new_might_collect_5d48ef45a97e4618->createContext());
1458CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1459for(const auto& env0 : *rel_new_might_collect_5d48ef45a97e4618) {
1460Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env0[1])}};
1461rel_might_collect_ef1d0b06d36e4ddc->insert(tuple,READ_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt));
1462}
1463}
1464();std::swap(rel_delta_might_collect_d651f71586aafe59, rel_new_might_collect_5d48ef45a97e4618);
1465rel_new_might_collect_5d48ef45a97e4618->purge();
1466loop_counter = (ramBitCast<RamUnsigned>(loop_counter) + ramBitCast<RamUnsigned>(RamUnsigned(1)));
1467iter++;
1468}
1469iter = 0;
1470rel_delta_might_collect_d651f71586aafe59->purge();
1471rel_new_might_collect_5d48ef45a97e4618->purge();
1472if (performIO) {
1473try {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\"]}}"}});
1474if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1475else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1476IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1477} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1478}
1479if (pruneImdtRels) rel_call_ee1d8972d66cc25f->purge();
1480}
1481
1482} // namespace souffle
1483
1484namespace souffle {
1485using namespace souffle;
1486class Stratum_stack_root_vars_4df5b9c3cd2e7586 {
1487public:
1488 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__11100__11111::Type& rel_bind_c9210fdc63280a40,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_ii__0_1__11::Type& rel_might_collect_ef1d0b06d36e4ddc,t_btree_ii__0_1__11::Type& rel_stack_root_vars_a138611bd47fd3ff);
1489void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1490private:
1491SymbolTable& symTable;
1492RecordTable& recordTable;
1493ConcurrentCache<std::string,std::regex>& regexCache;
1494bool& pruneImdtRels;
1495bool& performIO;
1496SignalHandler*& signalHandler;
1497std::atomic<std::size_t>& iter;
1498std::atomic<RamDomain>& ctr;
1499std::string& inputDirectory;
1500std::string& outputDirectory;
1501t_btree_iiii__0_1_2_3__1110__1111__1100::Type* rel_assign_e4bb6e0824a16a37;
1502t_btree_iiiii__0_1_2_3_4__11100__11111::Type* rel_bind_c9210fdc63280a40;
1503t_btree_iii__0_1_2__110__111::Type* rel_live_vars_out_f94306e028b67aa4;
1504t_btree_ii__0_1__11::Type* rel_might_collect_ef1d0b06d36e4ddc;
1505t_btree_ii__0_1__11::Type* rel_stack_root_vars_a138611bd47fd3ff;
1506std::vector<std::regex> regexes;
1507};
1508} // namespace souffle
1509namespace souffle {
1510using namespace souffle;
1511 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__11100__11111::Type& rel_bind_c9210fdc63280a40,t_btree_iii__0_1_2__110__111::Type& rel_live_vars_out_f94306e028b67aa4,t_btree_ii__0_1__11::Type& rel_might_collect_ef1d0b06d36e4ddc,t_btree_ii__0_1__11::Type& rel_stack_root_vars_a138611bd47fd3ff):
1512symTable(symTable),
1513recordTable(recordTable),
1514regexCache(regexCache),
1515pruneImdtRels(pruneImdtRels),
1516performIO(performIO),
1517signalHandler(signalHandler),
1518iter(iter),
1519ctr(ctr),
1520inputDirectory(inputDirectory),
1521outputDirectory(outputDirectory),
1522rel_assign_e4bb6e0824a16a37(&rel_assign_e4bb6e0824a16a37),
1523rel_bind_c9210fdc63280a40(&rel_bind_c9210fdc63280a40),
1524rel_live_vars_out_f94306e028b67aa4(&rel_live_vars_out_f94306e028b67aa4),
1525rel_might_collect_ef1d0b06d36e4ddc(&rel_might_collect_ef1d0b06d36e4ddc),
1526rel_stack_root_vars_a138611bd47fd3ff(&rel_stack_root_vars_a138611bd47fd3ff),
1527regexes({
1528 std::regex(".*ctx_.*__init__"),
1529}){
1530}
1531
1532void Stratum_stack_root_vars_4df5b9c3cd2e7586::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1533signalHandler->setMsg(R"_(stack_root_vars(f,r) :-
1534 !bind(f,s,r,_,_),
1535 might_collect(f,s),
1536 live_vars_out(f,s,r).
1537in file dataflow.dl [59:1-59:92])_");
1538if(!(rel_might_collect_ef1d0b06d36e4ddc->empty()) && !(rel_live_vars_out_f94306e028b67aa4->empty())) {
1539[&](){
1540CREATE_OP_CONTEXT(rel_bind_c9210fdc63280a40_op_ctxt,rel_bind_c9210fdc63280a40->createContext());
1541CREATE_OP_CONTEXT(rel_live_vars_out_f94306e028b67aa4_op_ctxt,rel_live_vars_out_f94306e028b67aa4->createContext());
1542CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1543CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1544for(const auto& env0 : *rel_might_collect_ef1d0b06d36e4ddc) {
1545auto 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));
1546for(const auto& env1 : range) {
1547if( !(!rel_bind_c9210fdc63280a40->lowerUpperRange_11100(Tuple<RamDomain,5>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env1[2]), ramBitCast<RamDomain>(MIN_RAM_SIGNED), ramBitCast<RamDomain>(MIN_RAM_SIGNED)}},Tuple<RamDomain,5>{{ramBitCast(env0[0]), ramBitCast(env0[1]), ramBitCast(env1[2]), ramBitCast<RamDomain>(MAX_RAM_SIGNED), ramBitCast<RamDomain>(MAX_RAM_SIGNED)}},READ_OP_CONTEXT(rel_bind_c9210fdc63280a40_op_ctxt)).empty())) {
1548Tuple<RamDomain,2> tuple{{ramBitCast(env0[0]),ramBitCast(env1[2])}};
1549rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1550}
1551}
1552}
1553}
1554();}
1555signalHandler->setMsg(R"_(stack_root_vars(f,$LocalVariable(f, v)) :-
1556 might_collect(f,_),
1557 assign(f,0,$LocalVariable(f, v),$Empty()).
1558in file dataflow.dl [63:1-63:111])_");
1559if(!(rel_might_collect_ef1d0b06d36e4ddc->empty()) && !(rel_assign_e4bb6e0824a16a37->empty())) {
1560[&](){
1561CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1562CREATE_OP_CONTEXT(rel_might_collect_ef1d0b06d36e4ddc_op_ctxt,rel_might_collect_ef1d0b06d36e4ddc->createContext());
1563CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1564for(const auto& env0 : *rel_might_collect_ef1d0b06d36e4ddc) {
1565auto 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));
1566for(const auto& env1 : range) {
1567RamDomain const ref = env1[2];
1568if (ref == 0) continue;
1569const RamDomain *env2 = recordTable.unpack(ref,2);
1570{
1571if( (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1572RamDomain const ref = env2[1];
1573if (ref == 0) continue;
1574const RamDomain *env3 = recordTable.unpack(ref,2);
1575{
1576if( (ramBitCast<RamDomain>(env0[0]) == ramBitCast<RamDomain>(env3[0]))) {
1577RamDomain const ref = env1[3];
1578if (ref == 0) continue;
1579const RamDomain *env4 = recordTable.unpack(ref,2);
1580{
1581if( (ramBitCast<RamDomain>(env4[0]) == ramBitCast<RamDomain>(RamSigned(0)))) {
1582Tuple<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]))}}
1583)))}}
1584))}};
1585rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1586}
1587}
1588}
1589}
1590}
1591}
1592}
1593}
1594}
1595();}
1596signalHandler->setMsg(R"_(stack_root_vars(f,$ObjectMember("self", m)) :-
1597 match(".*ctx_.*__init__", f),
1598 assign(f,_,$ObjectMember("self", m),_).
1599in file dataflow.dl [66:1-66:121])_");
1600if(!(rel_assign_e4bb6e0824a16a37->empty())) {
1601[&](){
1602CREATE_OP_CONTEXT(rel_assign_e4bb6e0824a16a37_op_ctxt,rel_assign_e4bb6e0824a16a37->createContext());
1603CREATE_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt,rel_stack_root_vars_a138611bd47fd3ff->createContext());
1604for(const auto& env0 : *rel_assign_e4bb6e0824a16a37) {
1605if( std::regex_match(symTable.decode(env0[0]), regexes.at(0))) {
1606RamDomain const ref = env0[2];
1607if (ref == 0) continue;
1608const RamDomain *env1 = recordTable.unpack(ref,2);
1609{
1610if( (ramBitCast<RamDomain>(env1[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1611RamDomain const ref = env1[1];
1612if (ref == 0) continue;
1613const RamDomain *env2 = recordTable.unpack(ref,2);
1614{
1615if( (ramBitCast<RamDomain>(env2[0]) == ramBitCast<RamDomain>(RamSigned(1)))) {
1616Tuple<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]))}}
1617)))}}
1618))}};
1619rel_stack_root_vars_a138611bd47fd3ff->insert(tuple,READ_OP_CONTEXT(rel_stack_root_vars_a138611bd47fd3ff_op_ctxt));
1620}
1621}
1622}
1623}
1624}
1625}
1626}
1627();}
1628if (performIO) {
1629try {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\"]}}"}});
1630if (outputDirectory == "-"){directiveMap["IO"] = "stdout"; directiveMap["headers"] = "true";}
1631else if (!outputDirectory.empty()) {directiveMap["output-dir"] = outputDirectory;}
1632IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1633} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1634}
1635if (pruneImdtRels) rel_assign_e4bb6e0824a16a37->purge();
1636if (pruneImdtRels) rel_bind_c9210fdc63280a40->purge();
1637if (pruneImdtRels) rel_live_vars_out_f94306e028b67aa4->purge();
1638}
1639
1640} // namespace souffle
1641
1642namespace souffle {
1643using namespace souffle;
1644class Stratum_use_f38e4ba456a0cc9a {
1645public:
1646 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);
1647void run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret);
1648private:
1649SymbolTable& symTable;
1650RecordTable& recordTable;
1651ConcurrentCache<std::string,std::regex>& regexCache;
1652bool& pruneImdtRels;
1653bool& performIO;
1654SignalHandler*& signalHandler;
1655std::atomic<std::size_t>& iter;
1656std::atomic<RamDomain>& ctr;
1657std::string& inputDirectory;
1658std::string& outputDirectory;
1659t_btree_iii__0_1_2__111::Type* rel_use_e955e932f22dad4d;
1660};
1661} // namespace souffle
1662namespace souffle {
1663using namespace souffle;
1664 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):
1665symTable(symTable),
1666recordTable(recordTable),
1667regexCache(regexCache),
1668pruneImdtRels(pruneImdtRels),
1669performIO(performIO),
1670signalHandler(signalHandler),
1671iter(iter),
1672ctr(ctr),
1673inputDirectory(inputDirectory),
1674outputDirectory(outputDirectory),
1675rel_use_e955e932f22dad4d(&rel_use_e955e932f22dad4d){
1676}
1677
1678void Stratum_use_f38e4ba456a0cc9a::run([[maybe_unused]] const std::vector<RamDomain>& args,[[maybe_unused]] std::vector<RamDomain>& ret){
1679if (performIO) {
1680try {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\"]}}"}});
1681if (!inputDirectory.empty()) {directiveMap["fact-dir"] = inputDirectory;}
1682IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_use_e955e932f22dad4d);
1683} catch (std::exception& e) {std::cerr << "Error loading use data: " << e.what() << '\n';
1684exit(1);
1685}
1686}
1687}
1688
1689} // namespace souffle
1690
1691namespace souffle {
1692using namespace souffle;
1693class Sf__: public SouffleProgram {
1694public:
1695 Sf__();
1696 ~Sf__();
1697void run();
1698void runAll(std::string inputDirectoryArg = "",std::string outputDirectoryArg = "",bool performIOArg = true,bool pruneImdtRelsArg = true);
1699void printAll([[maybe_unused]] std::string outputDirectoryArg = "");
1700void loadAll([[maybe_unused]] std::string inputDirectoryArg = "");
1701void dumpInputs();
1702void dumpOutputs();
1703SymbolTable& getSymbolTable();
1704RecordTable& getRecordTable();
1705void setNumThreads(std::size_t numThreadsValue);
1706void executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret);
1707private:
1708void runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg);
1709SymbolTableImpl symTable;
1710SpecializedRecordTable<0,2> recordTable;
1711ConcurrentCache<std::string,std::regex> regexCache;
1712Own<t_btree_iiii__0_1_2_3__1110__1111__1100::Type> rel_assign_e4bb6e0824a16a37;
1713souffle::RelationWrapper<t_btree_iiii__0_1_2_3__1110__1111__1100::Type> wrapper_rel_assign_e4bb6e0824a16a37;
1714Own<t_btree_iiiii__0_1_2_3_4__11100__11111::Type> rel_bind_c9210fdc63280a40;
1715souffle::RelationWrapper<t_btree_iiiii__0_1_2_3_4__11100__11111::Type> wrapper_rel_bind_c9210fdc63280a40;
1716Own<t_btree_iii__2_0_1__001__111::Type> rel_call_ee1d8972d66cc25f;
1717souffle::RelationWrapper<t_btree_iii__2_0_1__001__111::Type> wrapper_rel_call_ee1d8972d66cc25f;
1718Own<t_btree_ii__0_1__11::Type> rel_might_collect_ef1d0b06d36e4ddc;
1719souffle::RelationWrapper<t_btree_ii__0_1__11::Type> wrapper_rel_might_collect_ef1d0b06d36e4ddc;
1720Own<t_btree_ii__0_1__11__10::Type> rel_delta_might_collect_d651f71586aafe59;
1721Own<t_btree_ii__0_1__11__10::Type> rel_new_might_collect_5d48ef45a97e4618;
1722Own<t_btree_iii__0_1_2__111::Type> rel_cf_edge_4931a04c8c74bb72;
1723souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_cf_edge_4931a04c8c74bb72;
1724Own<t_btree_iii__0_1_2__111::Type> rel_use_e955e932f22dad4d;
1725souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_use_e955e932f22dad4d;
1726Own<t_btree_iii__0_1_2__111::Type> rel_live_vars_in_0b002b95687eda95;
1727souffle::RelationWrapper<t_btree_iii__0_1_2__111::Type> wrapper_rel_live_vars_in_0b002b95687eda95;
1728Own<t_btree_iii__0_1_2__110__111::Type> rel_delta_live_vars_in_fccc4ee6df066f63;
1729Own<t_btree_iii__0_1_2__110__111::Type> rel_new_live_vars_in_0b01be53183b2351;
1730Own<t_btree_iii__0_1_2__110__111::Type> rel_live_vars_out_f94306e028b67aa4;
1731souffle::RelationWrapper<t_btree_iii__0_1_2__110__111::Type> wrapper_rel_live_vars_out_f94306e028b67aa4;
1732Own<t_btree_iii__0_1_2__111::Type> rel_delta_live_vars_out_acc66913cea62d16;
1733Own<t_btree_iii__0_1_2__111::Type> rel_new_live_vars_out_2d78073638bb3740;
1734Own<t_btree_ii__0_1__11::Type> rel_stack_root_vars_a138611bd47fd3ff;
1735souffle::RelationWrapper<t_btree_ii__0_1__11::Type> wrapper_rel_stack_root_vars_a138611bd47fd3ff;
1736Stratum_assign_e0d78e44f4df6411 stratum_assign_f550d366a9215d2a;
1737Stratum_bind_8b0da46e2379b6cd stratum_bind_1968829e9243d389;
1738Stratum_call_104fac07831e2229 stratum_call_587d2d7effb5d130;
1739Stratum_cf_edge_c2ae152829fd6f1f stratum_cf_edge_4017fef287699967;
1740Stratum_live_vars_in_a363f2025538826a stratum_live_vars_in_c3dc49a4823a7f1e;
1741Stratum_might_collect_beadc513d07ff032 stratum_might_collect_cc50af26f53a71ac;
1742Stratum_stack_root_vars_4df5b9c3cd2e7586 stratum_stack_root_vars_49e4f510c537163e;
1743Stratum_use_f38e4ba456a0cc9a stratum_use_2e20cb5441769259;
1744std::string inputDirectory;
1745std::string outputDirectory;
1746SignalHandler* signalHandler{SignalHandler::instance()};
1747std::atomic<RamDomain> ctr{};
1748std::atomic<std::size_t> iter{};
1749};
1750} // namespace souffle
1751namespace souffle {
1752using namespace souffle;
1753 Sf__::Sf__():
1754symTable({
1755 R"_(mylib.MaybeCollect)_",
1756 R"_(self)_",
1757 R"_(.*ctx_.*__init__)_",
1758}),
1759recordTable(),
1760regexCache(),
1761rel_assign_e4bb6e0824a16a37(mk<t_btree_iiii__0_1_2_3__1110__1111__1100::Type>()),
1762wrapper_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),
1763rel_bind_c9210fdc63280a40(mk<t_btree_iiiii__0_1_2_3_4__11100__11111::Type>()),
1764wrapper_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),
1765rel_call_ee1d8972d66cc25f(mk<t_btree_iii__2_0_1__001__111::Type>()),
1766wrapper_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),
1767rel_might_collect_ef1d0b06d36e4ddc(mk<t_btree_ii__0_1__11::Type>()),
1768wrapper_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),
1769rel_delta_might_collect_d651f71586aafe59(mk<t_btree_ii__0_1__11__10::Type>()),
1770rel_new_might_collect_5d48ef45a97e4618(mk<t_btree_ii__0_1__11__10::Type>()),
1771rel_cf_edge_4931a04c8c74bb72(mk<t_btree_iii__0_1_2__111::Type>()),
1772wrapper_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),
1773rel_use_e955e932f22dad4d(mk<t_btree_iii__0_1_2__111::Type>()),
1774wrapper_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),
1775rel_live_vars_in_0b002b95687eda95(mk<t_btree_iii__0_1_2__111::Type>()),
1776wrapper_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),
1777rel_delta_live_vars_in_fccc4ee6df066f63(mk<t_btree_iii__0_1_2__110__111::Type>()),
1778rel_new_live_vars_in_0b01be53183b2351(mk<t_btree_iii__0_1_2__110__111::Type>()),
1779rel_live_vars_out_f94306e028b67aa4(mk<t_btree_iii__0_1_2__110__111::Type>()),
1780wrapper_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),
1781rel_delta_live_vars_out_acc66913cea62d16(mk<t_btree_iii__0_1_2__111::Type>()),
1782rel_new_live_vars_out_2d78073638bb3740(mk<t_btree_iii__0_1_2__111::Type>()),
1783rel_stack_root_vars_a138611bd47fd3ff(mk<t_btree_ii__0_1__11::Type>()),
1784wrapper_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),
1785stratum_assign_f550d366a9215d2a(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37),
1786stratum_bind_1968829e9243d389(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_bind_c9210fdc63280a40),
1787stratum_call_587d2d7effb5d130(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_call_ee1d8972d66cc25f),
1788stratum_cf_edge_4017fef287699967(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_cf_edge_4931a04c8c74bb72),
1789stratum_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),
1790stratum_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),
1791stratum_stack_root_vars_49e4f510c537163e(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_assign_e4bb6e0824a16a37,*rel_bind_c9210fdc63280a40,*rel_live_vars_out_f94306e028b67aa4,*rel_might_collect_ef1d0b06d36e4ddc,*rel_stack_root_vars_a138611bd47fd3ff),
1792stratum_use_2e20cb5441769259(symTable,recordTable,regexCache,pruneImdtRels,performIO,signalHandler,iter,ctr,inputDirectory,outputDirectory,*rel_use_e955e932f22dad4d){
1793addRelation("assign", wrapper_rel_assign_e4bb6e0824a16a37, true, false);
1794addRelation("bind", wrapper_rel_bind_c9210fdc63280a40, true, false);
1795addRelation("call", wrapper_rel_call_ee1d8972d66cc25f, true, false);
1796addRelation("might_collect", wrapper_rel_might_collect_ef1d0b06d36e4ddc, false, true);
1797addRelation("cf_edge", wrapper_rel_cf_edge_4931a04c8c74bb72, true, false);
1798addRelation("use", wrapper_rel_use_e955e932f22dad4d, true, false);
1799addRelation("live_vars_in", wrapper_rel_live_vars_in_0b002b95687eda95, false, false);
1800addRelation("live_vars_out", wrapper_rel_live_vars_out_f94306e028b67aa4, false, false);
1801addRelation("stack_root_vars", wrapper_rel_stack_root_vars_a138611bd47fd3ff, false, true);
1802}
1803
1804 Sf__::~Sf__(){
1805}
1806
1807void Sf__::runFunction(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1808
1809 this->inputDirectory = std::move(inputDirectoryArg);
1810 this->outputDirectory = std::move(outputDirectoryArg);
1811 this->performIO = performIOArg;
1812 this->pruneImdtRels = pruneImdtRelsArg;
1813
1814 // set default threads (in embedded mode)
1815 // if this is not set, and omp is used, the default omp setting of number of cores is used.
1816#if defined(_OPENMP)
1817 if (0 < getNumThreads()) { omp_set_num_threads(static_cast<int>(getNumThreads())); }
1818#endif
1819
1820 signalHandler->set();
1821// -- query evaluation --
1822{
1823 std::vector<RamDomain> args, ret;
1824stratum_assign_f550d366a9215d2a.run(args, ret);
1825}
1826{
1827 std::vector<RamDomain> args, ret;
1828stratum_bind_1968829e9243d389.run(args, ret);
1829}
1830{
1831 std::vector<RamDomain> args, ret;
1832stratum_call_587d2d7effb5d130.run(args, ret);
1833}
1834{
1835 std::vector<RamDomain> args, ret;
1836stratum_might_collect_cc50af26f53a71ac.run(args, ret);
1837}
1838{
1839 std::vector<RamDomain> args, ret;
1840stratum_cf_edge_4017fef287699967.run(args, ret);
1841}
1842{
1843 std::vector<RamDomain> args, ret;
1844stratum_use_2e20cb5441769259.run(args, ret);
1845}
1846{
1847 std::vector<RamDomain> args, ret;
1848stratum_live_vars_in_c3dc49a4823a7f1e.run(args, ret);
1849}
1850{
1851 std::vector<RamDomain> args, ret;
1852stratum_stack_root_vars_49e4f510c537163e.run(args, ret);
1853}
1854
1855// -- relation hint statistics --
1856signalHandler->reset();
1857}
1858
1859void Sf__::run(){
1860runFunction("", "", false, false);
1861}
1862
1863void Sf__::runAll(std::string inputDirectoryArg,std::string outputDirectoryArg,bool performIOArg,bool pruneImdtRelsArg){
1864runFunction(inputDirectoryArg, outputDirectoryArg, performIOArg, pruneImdtRelsArg);
1865}
1866
1867void Sf__::printAll([[maybe_unused]] std::string outputDirectoryArg){
1868try {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\"]}}"}});
1869if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1870IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1871} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1872try {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\"]}}"}});
1873if (!outputDirectoryArg.empty()) {directiveMap["output-dir"] = outputDirectoryArg;}
1874IOSystem::getInstance().getWriter(directiveMap, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1875} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1876}
1877
1878void Sf__::loadAll([[maybe_unused]] std::string inputDirectoryArg){
1879try {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\"]}}"}});
1880if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1881IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_bind_c9210fdc63280a40);
1882} catch (std::exception& e) {std::cerr << "Error loading bind data: " << e.what() << '\n';
1883exit(1);
1884}
1885try {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\"]}}"}});
1886if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1887IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_call_ee1d8972d66cc25f);
1888} catch (std::exception& e) {std::cerr << "Error loading call data: " << e.what() << '\n';
1889exit(1);
1890}
1891try {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\"]}}"}});
1892if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1893IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_assign_e4bb6e0824a16a37);
1894} catch (std::exception& e) {std::cerr << "Error loading assign data: " << e.what() << '\n';
1895exit(1);
1896}
1897try {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\"]}}"}});
1898if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1899IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_cf_edge_4931a04c8c74bb72);
1900} catch (std::exception& e) {std::cerr << "Error loading cf_edge data: " << e.what() << '\n';
1901exit(1);
1902}
1903try {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\"]}}"}});
1904if (!inputDirectoryArg.empty()) {directiveMap["fact-dir"] = inputDirectoryArg;}
1905IOSystem::getInstance().getReader(directiveMap, symTable, recordTable)->readAll(*rel_use_e955e932f22dad4d);
1906} catch (std::exception& e) {std::cerr << "Error loading use data: " << e.what() << '\n';
1907exit(1);
1908}
1909}
1910
1911void Sf__::dumpInputs(){
1912try {std::map<std::string, std::string> rwOperation;
1913rwOperation["IO"] = "stdout";
1914rwOperation["name"] = "bind";
1915rwOperation["types"] = "{\"relation\": {\"arity\": 5, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"s:Function\", \"s:symbol\"]}}";
1916IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_bind_c9210fdc63280a40);
1917} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1918try {std::map<std::string, std::string> rwOperation;
1919rwOperation["IO"] = "stdout";
1920rwOperation["name"] = "call";
1921rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"s:Function\"]}}";
1922IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_call_ee1d8972d66cc25f);
1923} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1924try {std::map<std::string, std::string> rwOperation;
1925rwOperation["IO"] = "stdout";
1926rwOperation["name"] = "assign";
1927rwOperation["types"] = "{\"relation\": {\"arity\": 4, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\", \"+:Value\"]}}";
1928IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_assign_e4bb6e0824a16a37);
1929} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1930try {std::map<std::string, std::string> rwOperation;
1931rwOperation["IO"] = "stdout";
1932rwOperation["name"] = "cf_edge";
1933rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"i:Statement\"]}}";
1934IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_cf_edge_4931a04c8c74bb72);
1935} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1936try {std::map<std::string, std::string> rwOperation;
1937rwOperation["IO"] = "stdout";
1938rwOperation["name"] = "use";
1939rwOperation["types"] = "{\"relation\": {\"arity\": 3, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\", \"+:Reference\"]}}";
1940IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_use_e955e932f22dad4d);
1941} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1942}
1943
1944void Sf__::dumpOutputs(){
1945try {std::map<std::string, std::string> rwOperation;
1946rwOperation["IO"] = "stdout";
1947rwOperation["name"] = "might_collect";
1948rwOperation["types"] = "{\"relation\": {\"arity\": 2, \"auxArity\": 0, \"types\": [\"s:Function\", \"i:Statement\"]}}";
1949IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_might_collect_ef1d0b06d36e4ddc);
1950} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1951try {std::map<std::string, std::string> rwOperation;
1952rwOperation["IO"] = "stdout";
1953rwOperation["name"] = "stack_root_vars";
1954rwOperation["types"] = "{\"relation\": {\"arity\": 2, \"auxArity\": 0, \"types\": [\"s:Function\", \"+:Reference\"]}}";
1955IOSystem::getInstance().getWriter(rwOperation, symTable, recordTable)->writeAll(*rel_stack_root_vars_a138611bd47fd3ff);
1956} catch (std::exception& e) {std::cerr << e.what();exit(1);}
1957}
1958
1959SymbolTable& Sf__::getSymbolTable(){
1960return symTable;
1961}
1962
1963RecordTable& Sf__::getRecordTable(){
1964return recordTable;
1965}
1966
1967void Sf__::setNumThreads(std::size_t numThreadsValue){
1968SouffleProgram::setNumThreads(numThreadsValue);
1969symTable.setNumLanes(getNumThreads());
1970recordTable.setNumLanes(getNumThreads());
1971regexCache.setNumLanes(getNumThreads());
1972}
1973
1974void Sf__::executeSubroutine(std::string name,const std::vector<RamDomain>& args,std::vector<RamDomain>& ret){
1975if (name == "assign") {
1976stratum_assign_f550d366a9215d2a.run(args, ret);
1977return;}
1978if (name == "bind") {
1979stratum_bind_1968829e9243d389.run(args, ret);
1980return;}
1981if (name == "call") {
1982stratum_call_587d2d7effb5d130.run(args, ret);
1983return;}
1984if (name == "cf_edge") {
1985stratum_cf_edge_4017fef287699967.run(args, ret);
1986return;}
1987if (name == "live_vars_in") {
1988stratum_live_vars_in_c3dc49a4823a7f1e.run(args, ret);
1989return;}
1990if (name == "might_collect") {
1991stratum_might_collect_cc50af26f53a71ac.run(args, ret);
1992return;}
1993if (name == "stack_root_vars") {
1994stratum_stack_root_vars_49e4f510c537163e.run(args, ret);
1995return;}
1996if (name == "use") {
1997stratum_use_2e20cb5441769259.run(args, ret);
1998return;}
1999fatal(("unknown subroutine " + name).c_str());
2000}
2001
2002} // namespace souffle
2003namespace souffle {
2004SouffleProgram *newInstance__(){return new souffle::Sf__;}
2005SymbolTable *getST__(SouffleProgram *p){return &reinterpret_cast<souffle::Sf__*>(p)->getSymbolTable();}
2006} // namespace souffle
2007
2008#ifndef __EMBEDDED_SOUFFLE__
2009#include "souffle/CompiledOptions.h"
2010int main(int argc, char** argv)
2011{
2012try{
2013souffle::CmdOptions opt(R"(mycpp/datalog/dataflow.dl)",
2014R"()",
2015R"()",
2016false,
2017R"()",
20181);
2019if (!opt.parse(argc,argv)) return 1;
2020souffle::Sf__ obj;
2021#if defined(_OPENMP)
2022obj.setNumThreads(opt.getNumJobs());
2023
2024#endif
2025obj.runAll(opt.getInputFileDir(), opt.getOutputFileDir());
2026return 0;
2027} catch(std::exception &e) { souffle::SignalHandler::instance()->error(e.what());}
2028}
2029#endif
2030
2031namespace souffle {
2032using namespace souffle;
2033class factory_Sf__: souffle::ProgramFactory {
2034public:
2035souffle::SouffleProgram* newInstance();
2036 factory_Sf__();
2037private:
2038};
2039} // namespace souffle
2040namespace souffle {
2041using namespace souffle;
2042souffle::SouffleProgram* factory_Sf__::newInstance(){
2043return new souffle::Sf__();
2044}
2045
2046 factory_Sf__::factory_Sf__():
2047souffle::ProgramFactory("_"){
2048}
2049
2050} // namespace souffle
2051namespace souffle {
2052
2053#ifdef __EMBEDDED_SOUFFLE__
2054extern "C" {
2055souffle::factory_Sf__ __factory_Sf___instance;
2056}
2057#endif
2058} // namespace souffle
2059