X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FAlloyEnc%2Fsignature.cc;h=ad7d2e700fe9b81bbf2f3268c5340e07718c66bf;hp=4237fd6e25e042a976986013141a7dbdf657ec18;hb=51799c65144abda2e95b5bab5a0af868b3378714;hpb=3896ad686a910868d7bf2988cd83a4fe3da700b2 diff --git a/src/AlloyEnc/signature.cc b/src/AlloyEnc/signature.cc index 4237fd6..ad7d2e7 100644 --- a/src/AlloyEnc/signature.cc +++ b/src/AlloyEnc/signature.cc @@ -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"; }