#include "signature.h"
#include "set.h"
-bool BooleanSig::encodeAbsSig = true;
+bool BooleanSig::encodeAbs = true;
+bool SetSig::encodeAbs = true;
+bool ElementSig::encodeAbs = true;
-BooleanSig::BooleanSig(uint id):
- Signature(id),
- value(-1)
+ValuedSignature::ValuedSignature(uint id):
+ Signature(id),
+ value(-1)
{
}
-bool BooleanSig::getValue(){
+int ValuedSignature::getValue(){
ASSERT(value != -1);
- return (bool) value;
+ return value;
+}
+
+BooleanSig::BooleanSig(uint id):
+ ValuedSignature(id)
+{
}
string BooleanSig::toString() const{
string BooleanSig::getSignature() const{
string str;
- if(encodeAbsSig){
- encodeAbsSig = 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;
}
ElementSig::ElementSig(uint id, SetSig *_ssig):
- Signature(id),
- ssig(_ssig),
- value(0)
+ ValuedSignature(id),
+ ssig(_ssig)
{
}
}
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";
}