build with other copy
[repair.git] / Repair / RepairInterpreter / omodel.h
1 // Defines the Internal Constraint Language
2
3
4 #ifndef ObjectModel_H
5 #define ObjectModel_H
6 #include<unistd.h>
7 #include<stdio.h>
8 #include "classlist.h"
9
10
11 #define LITERAL_NUMBER 1
12 #define LITERAL_TOKEN 2
13 #define LITERAL_BOOL 3
14
15
16 class Literal {
17  public:
18   Literal(char *s);
19   bool getbool();
20   int gettype();
21   int number();
22   char * token();
23   void print();
24   void fprint(FILE *f);
25
26  private:
27   char *str;
28 };
29
30
31
32
33 class Setlabel {
34  public:
35   Setlabel(char *s);
36   char * getname();
37   void print();
38   void fprint(FILE *f);
39  private:
40   char *str;
41 };
42
43
44
45
46
47 #define SET_label 0
48 #define SET_literal 1
49
50 class Set {
51  public:
52   Set(Setlabel *sl);
53   Set(Literal **l, int nl);
54   ~Set();
55   void fprint(FILE *f);
56   void print();
57   int gettype();
58   char * getname();
59   int getnumliterals();
60   Literal * getliteral(int i);
61  private:
62   int type;
63   Setlabel *setlabel;
64   int numliterals;
65   Literal **literals;
66 };
67
68
69
70
71
72 class Label {
73  public:
74   Label(char *s);
75   void print();
76   void fprint(FILE *f);
77   char* label() {
78     return str;
79   }
80
81  private:
82   char *str;
83 };
84
85
86
87
88
89 class Relation {
90  public:
91   Relation(char * r);
92   void print();  
93   void fprint(FILE *f);  
94   char * getname();
95
96  private:
97   char *str;
98 };
99
100
101
102
103
104 class Quantifier {
105  public:
106   Quantifier(Label *l, Set *s);
107   void print();
108   void fprint(FILE *f);
109   Label * getlabel();
110   Set * getset();
111
112  private:
113   Label *label;
114   Set *set;
115 };
116
117
118
119
120
121
122 #define SETEXPR_LABEL 1
123 #define SETEXPR_REL 2
124 #define SETEXPR_INVREL 3
125
126 class Setexpr {
127  public:
128   Setexpr(Setlabel *sl);
129   Setexpr(Label *l, bool invert, Relation *r);
130   void print();
131   void fprint(FILE *f);
132   void print_size(Hashtable *stateenv, model *m);
133   void print_value(Hashtable *stateenv, model *m);
134   Setlabel * getsetlabel();
135   Relation * getrelation();
136   Label * getlabel();
137   int gettype();
138
139  private:
140   int type;
141   Setlabel *setlabel;
142   Label *label;
143   Relation *relation;
144 };
145
146
147
148
149
150
151 class Valueexpr {
152  public:
153   Valueexpr(Label *l,Relation *r, bool inv);
154   Valueexpr(Valueexpr *ve,Relation *r, bool inv);
155   void print();
156   void fprint(FILE *f);
157   void print_value(Hashtable *stateenv, model *m);
158   Element * get_value(Hashtable *stateenv, model *m);
159   int gettype();
160   Label * getlabel();
161   Valueexpr * getvalueexpr();
162   Relation * getrelation();
163   bool getinverted();
164   
165  private:
166   int type;
167   bool inverted;
168   Label *label;
169   Valueexpr *valueexpr;
170   Relation *relation;
171 };
172
173
174
175
176
177
178 #define ELEMENTEXPR_LABEL 1
179 #define ELEMENTEXPR_SUB 2
180 #define ELEMENTEXPR_ADD 3
181 #define ELEMENTEXPR_MULT 4
182 #define ELEMENTEXPR_LIT 5
183 #define ELEMENTEXPR_SETSIZE 6
184 #define ELEMENTEXPR_RELATION 11
185
186 class Elementexpr {
187  public:
188   Elementexpr(Setexpr *se);
189   Elementexpr(Elementexpr *l, Elementexpr *r, int op);
190   Elementexpr(Literal *lit);
191   Elementexpr(Label *lab);
192   Elementexpr(Elementexpr *l,Relation *r);
193   void print();
194   void fprint(FILE *f);
195   void print_value(Hashtable *stateenv, model *m);
196
197   int gettype();
198   Label * getlabel();
199   Elementexpr *getleft();
200   Elementexpr *getright();
201   Literal * getliteral();
202   Setexpr * getsetexpr();
203   Relation * getrelation();
204
205  private:
206   int type;
207   Relation *relation;
208   Elementexpr *left, *right;
209   Label *label;
210   Literal *literal;
211   Setexpr *setexpr;
212 };
213
214
215
216
217
218 #define PREDICATE_LT 1
219 #define PREDICATE_LTE 2
220 #define PREDICATE_EQUALS 3
221 #define PREDICATE_GTE 4
222 #define PREDICATE_GT 5
223 #define PREDICATE_SET 6
224 #define PREDICATE_EQ1 7
225 #define PREDICATE_GTE1 8
226
227 class Predicate {
228  public:
229   Predicate(Valueexpr *ve, int t, Elementexpr *ee);
230   Predicate(Label *l,Setexpr *se);
231   Predicate(bool greaterthan, Setexpr *se);
232   void print();
233   void fprint(FILE *f);
234   void print_sets(Hashtable *stateenv, model *m);
235   int gettype();
236   Valueexpr * getvalueexpr();
237   Elementexpr * geteleexpr();
238   Label * getlabel();
239   Setexpr * getsetexpr();
240  private:
241   int type;
242   Valueexpr *valueexpr;
243   Elementexpr *elementexpr;
244   Label *label;
245   Setexpr *setexpr;
246 };
247
248
249
250
251
252
253 #define STATEMENT_OR 1
254 #define STATEMENT_AND 2
255 #define STATEMENT_NOT 3
256 #define STATEMENT_PRED 4
257
258 class Statement {
259  public:
260   Statement(Statement *l, Statement *r, int t);
261   Statement(Statement *l);
262   Statement(Predicate *p);
263   void print();
264   void fprint(FILE *f);
265   void print_sets(Hashtable *env, model *m); // prints the sets and the relations involved in the statement
266   int gettype();
267   Statement *getleft();
268   Statement *getright();
269   Predicate *getpredicate();
270  private:
271   int type;
272   Statement *left,*right;
273   Predicate *pred;
274 };
275
276
277
278
279
280
281 class Constraint {
282  public:
283   Constraint();
284   Constraint(Quantifier **q, int nq);
285   void setstatement(Statement *s);
286   void print();
287   void fprint(FILE *f);
288   int numquants();
289   Quantifier * getquant(int i);
290   Statement * getstatement();
291   void setcrash(bool c);
292   bool getcrash();
293  private:
294   bool crash;
295   int numquantifiers;
296   Quantifier **quantifiers;
297   Statement *statement;
298 };
299
300
301 #endif