1 #include "signatureenc.h"
5 #include "alloyinterpreter.h"
8 SignatureEnc::SignatureEnc(Interpreter *inter):
14 SignatureEnc::~SignatureEnc(){
15 for(uint i=0; i<signatures.getSize(); i++){
16 Signature *s = signatures.get(i);
21 int SignatureEnc::getAlloyIntScope(){
22 double mylog = log2(maxValue + 1);
23 return floor(mylog) == mylog ? (int)mylog + 1: (int)mylog + 2;
26 void SignatureEnc::updateMaxValue(Set *set){
27 for(uint i=0; i< set->getSize(); i++){
28 if(set->getElement(i) > maxValue){
29 maxValue = set->getElement(i);
34 BooleanSig *SignatureEnc::getBooleanSignature(Boolean *bvar){
35 BooleanSig *bsig = (BooleanSig *)encoded.get((void *)bvar);
37 bsig = new BooleanSig(getUniqueSigID());
38 encoded.put(bvar, bsig);
39 signatures.push(bsig);
40 interpreter->writeToFile(bsig->getSignature());
45 ElementSig *SignatureEnc::getElementSignature(Element *element){
46 ElementSig *esig = (ElementSig *)encoded.get((void *)element);
48 Set *set = element->getRange();
49 SetSig *ssig = (SetSig *)encoded.get((void *)set);
51 ssig = new SetSig(getUniqueSigID(), set);
52 encoded.put(set, ssig);
53 signatures.push(ssig);
54 interpreter->writeToFile(ssig->getSignature());
57 esig = new ElementSig(getUniqueSigID(), ssig);
58 encoded.put(element, esig);
59 signatures.push(esig);
60 interpreter->writeToFile(esig->getSignature());
66 void SignatureEnc::setValue(uint id, uint value){
67 ValuedSignature *sig = getValuedSignature(id);
72 int SignatureEnc::getValue(void *astnode){
73 ValuedSignature *sig = (ValuedSignature *)encoded.get(astnode);
75 return sig->getValue();