-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdatalogProgram.cpp
87 lines (74 loc) · 1.61 KB
/
datalogProgram.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "datalogProgram.h"
string DatalogProgram::toString()
{
string res = pred_list_str("Schemes", schemes);
res += pred_list_str("Facts", facts);
res += lheader((string)"Rules", rules.size());
for (unsigned int i = 0; i < rules.size(); i++) {
res += " ";
res += rules[i]->toString();
res += "\n";
}
res += pred_list_str("Queries", queries);
res += lheader("Domain", domain.size());
set<string>::iterator it;
for (it = domain.begin(); it != domain.end(); ++it)
{
res += " ";
res += *it;
res += "\n";
}
return res;
}
DatalogProgram::~DatalogProgram()
{
del_pred_list(schemes);
del_pred_list(facts);
del_pred_list(queries);
for (unsigned int i = 0; i < rules.size(); i++)
{
delete rules[i];
}
}
void DatalogProgram::addScheme(Predicate* p){
schemes.push_back(p);
}
void DatalogProgram::addFact(Predicate* p){
facts.push_back(p);
}
void DatalogProgram::addRule(Rule* r){
rules.push_back(r);
}
void DatalogProgram::addQuery(Predicate* p){
queries.push_back(p);
}
string DatalogProgram::lheader(string lname, int lsize)
{
string res = lname;
res += "(";
res += to_string(lsize);
res += "):\n";
return res;
}
string DatalogProgram::pred_list_str(string lname, vector<Predicate*>& l)
{
string res = lheader(lname, l.size());
for (unsigned int i = 0; i < l.size(); i++)
{
res += " ";
res += l[i]->toString();
res += "\n";
}
return res;
}
void DatalogProgram::del_pred_list(vector<Predicate*>& l)
{
for (unsigned int i = 0; i < l.size(); i++)
{
delete l[i];
}
}
void DatalogProgram::add_dom_str(string s)
{
domain.insert(s);
}