renaming alloyenc to alloy interpreter
[satune.git] / src / Interpreter / signature.cc
1 #include "signature.h"
2 #include "set.h"
3
4 bool BooleanSig::encodeAbs = true;
5 bool SetSig::encodeAbs = true;
6 bool ElementSig::encodeAbs = true;
7
8 ValuedSignature::ValuedSignature(uint id): 
9         Signature(id), 
10         value(-1) 
11 {
12 }
13
14 int ValuedSignature::getValue(){
15         ASSERT(value != -1);
16         return value;
17 }
18
19 BooleanSig::BooleanSig(uint id):
20         ValuedSignature(id)
21 {
22 }
23
24 string BooleanSig::toString() const{
25         return "Boolean" + to_string(id) + ".value";
26 }
27
28 string BooleanSig::getSignature() const{
29         string str;
30         if(encodeAbs){
31                 encodeAbs = false;
32                 str += getAbsSignature();
33         }
34         str += "one sig Boolean" + to_string(id) + " extends AbsBool {}";
35         return str;
36 }
37
38 string BooleanSig::getAbsSignature() const{
39         string str;
40         if(SetSig::encodeAbs){
41                 SetSig::encodeAbs = false;
42                 str += "abstract sig AbsSet {\
43                 domain: set Int\
44                 }\n";
45         }
46         str +="one sig BooleanSet extends AbsSet {}{\n\
47         domain = 0 + 1 \n\
48         }\n\
49         abstract sig AbsBool {\
50         value: Int\
51         }{\n\
52         value in BooleanSet.domain\n\
53         }\n";
54         return str;
55 }
56
57 ElementSig::ElementSig(uint id, SetSig *_ssig): 
58         ValuedSignature(id),
59         ssig(_ssig)
60 {
61 }
62
63 string ElementSig::toString() const{
64         return "Element" + to_string(id) + ".value";
65 }
66
67 string ElementSig::getSignature() const{
68         string str;
69         if(encodeAbs){
70                 encodeAbs = false;
71                 str += getAbsSignature();
72         }
73         str += "one sig Element" + to_string(id) + " extends AbsElement {}{\n\
74                 value in " + *ssig + "\n\
75                 }";
76         return str;
77 }
78
79 string ElementSig::getAbsSignature() const{
80         return "abstract sig AbsElement {\n\
81                 value: Int\n\
82                 }\n";
83         
84 }
85
86 SetSig::SetSig(uint id, Set *set): Signature(id){
87         ASSERT(set->getSize() > 0);
88         domain = to_string(set->getElement(0));
89         for(uint i=1; i< set->getSize(); i++){
90                 domain += " + " + to_string(set->getElement(i));
91         }
92 }
93
94 string SetSig::toString() const{
95         return "Set" + to_string(id) + ".domain";
96 }
97
98 string SetSig::getSignature() const{
99         string str;
100         if(encodeAbs){
101                 encodeAbs = false;
102                 str += getAbsSignature();
103         }
104         str += "one sig Set" + to_string(id) + " extends AbsSet {}{\n\
105                 domain = " + domain + "\n\
106                 }";
107         return str;
108 }
109
110 string SetSig::getAbsSignature() const{
111         return "abstract sig AbsSet {\n\
112                 domain: set Int\n\
113                 }\n";
114         
115 }
116
117 string Signature::operator+(const string& str){
118         return toString() + str;
119 }
120
121 string operator+(const string& str, const Signature& sig){
122         return str + sig.toString();
123 }