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 ElementSig *SignatureEnc::getElementSignature(Element *element){
35 ElementSig *esig = (ElementSig *)encoded.get((void *)element);
37 Set *set = element->getRange();
38 SetSig *ssig = (SetSig *)encoded.get((void *)set);
40 ssig = new SetSig(signatures.getSize(), set);
41 encoded.put(set, ssig);
42 signatures.push(ssig);
43 alloyEncoder->writeToFile(ssig->getSignature());
46 esig = new ElementSig(signatures.getSize(), ssig);
48 model_print(" = Element%u\n", signatures.getSize());
49 encoded.put(element, esig);
50 signatures.push(esig);
51 alloyEncoder->writeToFile(esig->getSignature());
57 void SignatureEnc::setValue(uint id, uint64_t value){
58 ElementSig *sig = (ElementSig *)signatures.get(id);
62 uint64_t SignatureEnc::getValue(Element *element){
63 ElementSig *sig = (ElementSig *)encoded.get((void *) element);
65 model_print("******************\n");
67 model_print("Value = %" PRId64 "\n", sig->getValue());
68 return sig->getValue();