-
Notifications
You must be signed in to change notification settings - Fork 0
/
all_class.h
110 lines (103 loc) · 2.26 KB
/
all_class.h
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <list>
#include <set>
using namespace std;
enum STATUS { IN, OUT};
class NODE
{
string label;
vector<string> in, out; // Could change to set<string> to speed up search, although with costlier insertion, insertion happens only once
int height;
enum STATUS status;
bool propogate_reached;
public:
NODE( string _label )
{
label = _label;
}
NODE( string _label, enum STATUS _status, vector<string> _in, vector<string> _out )
{
label = _label;
status = _status;
in = _in; // try std::move ?
out = _out;
}
bool operator<( NODE other ) const
{
return label < other.label;
}
bool operator==( NODE other ) const
{
return label == other.label;
}
vector<string> ret_in() const
{
return in;
}
vector<string> ret_out() const
{
return out;
}
bool isIn_in( string in_just ) const
{
return (find( in.begin(), in.end(), in_just )!=in.end());
}
bool isIn_out( string out_just ) const
{
return (find( out.begin(), out.end(), out_just )!=out.end());
}
void propogate_initialise()
{
propogate_reached = false;
}
void added_to_heap()
{
propogate_reached = true;
}
bool is_added_to_heap() const
{
return propogate_reached;
}
string ret_label() const
{
return label;
}
int ret_height() const
{
return height;
}
enum STATUS ret_status() const
{
return status;
}
void eval_height(); // Finds the height of the node based on its justifications
void eval_status();
bool chk_crculr(); // Check for circularities
vector<string> chk_exist_just();// Check if the justifications exist, return those that don't exist
friend class PropNODE;
};
set<NODE> nodes;
class PropNODE
{
NODE *it;
public:
bool operator<( PropNODE other ) const
{
return it->height < other.it->height;
/* Since going to be using a sorted, the one with the least height should be first */
}
PropNODE( NODE* it_ )
{
it = it_;
}
friend void propogate( NODE *proponent );
};
void propogate( NODE *proponent );
bool is_KEYWORD();
void handle_IS();
bool handle_STATE( string &label, vector<string> &in, vector<string> &out, enum STATUS &status );
void handle_LIST();
void handle_HELP();