#include "signature.h"
#include "set.h"
-bool BooleanSig::encodeSet = true;
+bool BooleanSig::encodeAbs = true;
+bool SetSig::encodeAbs = true;
+bool ElementSig::encodeAbs = true;
BooleanSig::BooleanSig(uint id):
Signature(id),
string BooleanSig::getSignature() const{
string str;
- if(encodeSet){
- encodeSet = false;
- str += "one sig BooleanSet {\n\
- domain: set Int\n\
- }{\n\
- domain = 0 + 1 \n\
+ if(encodeAbs){
+ encodeAbs = false;
+ str += getAbsSignature();
+ }
+ str += "one sig Boolean" + to_string(id) + " extends AbsBool {}";
+ return str;
+}
+
+string BooleanSig::getAbsSignature() const{
+ string str;
+ if(SetSig::encodeAbs){
+ SetSig::encodeAbs = false;
+ str += "abstract sig AbsSet {\
+ domain: set Int\
}\n";
}
- str += "one sig Boolean" + to_string(id) + " {\n\
- value: Int\n\
+ str +="one sig BooleanSet extends AbsSet {}{\n\
+ domain = 0 + 1 \n\
+ }\n\
+ abstract sig AbsBool {\
+ value: Int\
}{\n\
value in BooleanSet.domain\n\
- }";
+ }\n";
return str;
}
}
string ElementSig::getSignature() const{
- return "one sig Element" + to_string(id) + " {\n\
- value: Int\n\
- }{\n\
+ string str;
+ if(encodeAbs){
+ encodeAbs = false;
+ str += getAbsSignature();
+ }
+ str += "one sig Element" + to_string(id) + " extends AbsElement {}{\n\
value in " + *ssig + "\n\
}";
+ return str;
+}
+
+string ElementSig::getAbsSignature() const{
+ return "abstract sig AbsElement {\n\
+ value: Int\n\
+ }\n";
}
}
string SetSig::getSignature() const{
- return "one sig Set" + to_string(id) + " {\n\
- domain: set Int\n\
- }{\n\
+ string str;
+ if(encodeAbs){
+ encodeAbs = false;
+ str += getAbsSignature();
+ }
+ str += "one sig Set" + to_string(id) + " extends AbsSet {}{\n\
domain = " + domain + "\n\
}";
+ return str;
+}
+
+string SetSig::getAbsSignature() const{
+ return "abstract sig AbsSet {\n\
+ domain: set Int\n\
+ }\n";
}