1)core dump in regex for big strings 2) Boolean Var bugs 3) adding support for other...
[satune.git] / src / AlloyEnc / signature.cc
index 4237fd6e25e042a976986013141a7dbdf657ec18..ad7d2e700fe9b81bbf2f3268c5340e07718c66bf 100644 (file)
@@ -1,17 +1,24 @@
 #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),
-       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{
@@ -20,26 +27,36 @@ string BooleanSig::toString() const{
 
 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;
 }
 
 ElementSig::ElementSig(uint id, SetSig *_ssig): 
-       Signature(id),
-       ssig(_ssig),
-       value(0)
+       ValuedSignature(id),
+       ssig(_ssig)
 {
 }
 
@@ -48,11 +65,21 @@ string ElementSig::toString() const{
 }
 
 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";
        
 }
 
@@ -69,11 +96,21 @@ string SetSig::toString() const{
 }
 
 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";
        
 }