Moved the interpreter
[repair.git] / Repair / RepairInterpreter / processabstract.h
1 // evaluates model definition rules
2
3 #ifndef PROCESSABSTRACT_H
4 #define PROCESSABSTRACT_H
5 #include "classlist.h"
6
7
8 Element * evaluateexpr(model *m, AElementexpr *ee, Hashtable *env,bool enforcetyping,bool compute);
9
10
11
12 class processabstract {
13  public:
14   processabstract(model *m);
15   void processrule(Rule *r);
16   void setclean();
17   void printstats();
18   bool dirtyflagstatus();
19   ~processabstract();
20   void processrule(Rule *r, Element *ele, char *set);
21  private:
22   bool evaluatestatementa(Statementa *sa, Hashtable *env);
23   void satisfystatementb(Statementb *sb, Hashtable *env);
24   model * globalmodel;
25   bool dirtyflag;
26   bitreader * br;
27 };
28
29
30
31
32 /* A RelationSet keeps the current state of a quantifier. 
33    There are three types of RelationSet's:
34    TYPE_SET: "for left in set"
35    TYPE_RELATION: "for <left,right> in set"
36    TYPE_RANGE: "for left=lower..upper */
37 #define TYPE_SET 1
38 #define TYPE_RELATION 2
39 #define TYPE_RANGE 3
40
41 class RelationSet {
42  public:
43   RelationSet(Set *s, char *l, Type *tl);
44   RelationSet(Set *s, char *l, Type *tl, char *r, Type *tr);
45   RelationSet(char *l,AElementexpr *lower,AElementexpr*upper);
46   int gettype();
47   bool incrementassignment(bitreader *br,Hashtable *env, model *m);
48   bool incrementassignment(Hashtable *env, model *m);
49   bool incrementassignment(processconcrete *pc,Hashtable *env, model *m);
50   void resetassignment(Hashtable *env);
51
52   void print(Hashtable *env, model *m);  // prints the quantifier and its current state
53
54   AElementexpr *lower,*upper;
55   char *left,*right;
56   Type *tleft,*tright;
57   /* char's are not the responsibility of this class to dispose of*/
58   int type;
59   Set *set;
60 };
61
62
63
64
65 // Keeps the current state of the quantifiers of a given rule or constraint
66 class State {
67  public:
68   State(Rule *r, Hashtable *h);
69   State(Constraint *c, Hashtable *h);
70   ~State();
71   bool initializestate(bitreader *br, model *m);
72   bool increment(bitreader *br, model *m);
73   bool initializestate(model *m);
74   bool increment(model *m);
75
76   bool initializestate(processconcrete*, model *m);
77   bool increment(processconcrete*, model *m);
78
79   void print(model *m);
80   
81   Hashtable *env;
82   RelationSet **relset;
83   int numrelset;
84   
85 };
86 #endif