1 #include "signatureenc.h"
8 SignatureEnc::SignatureEnc(AlloyEnc *ae):
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(signatures.getSize());
38 encoded.put(bvar, bsig);
39 signatures.push(bsig);
40 alloyEncoder->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(signatures.getSize(), set);
52 encoded.put(set, ssig);
53 signatures.push(ssig);
54 alloyEncoder->writeToFile(ssig->getSignature());
57 esig = new ElementSig(signatures.getSize(), ssig);
58 encoded.put(element, esig);
59 signatures.push(esig);
60 alloyEncoder->writeToFile(esig->getSignature());
66 void SignatureEnc::setValue(uint id, uint64_t value){
67 ElementSig *sig = (ElementSig *)signatures.get(id);
71 uint64_t SignatureEnc::getValue(Element *element){
72 ElementSig *sig = (ElementSig *)encoded.get((void *) element);
74 model_print("******************\n");
76 model_print("Value = %" PRId64 "\n", sig->getValue());
77 return sig->getValue();