4c11957b31069354e1af1bbaa0c875a030d438d9
[satune.git] / src / AlloyEnc / signatureenc.cc
1 #include "signatureenc.h"
2 #include "element.h"
3 #include "set.h"
4 #include "signature.h"
5 #include "alloyenc.h"
6
7 SignatureEnc::SignatureEnc(AlloyEnc *ae): alloyEncoder(ae){
8 }
9
10 SignatureEnc::~SignatureEnc(){
11         for(uint i=0; i<signatures.getSize(); i++){
12                 Signature *s = signatures.get(i);
13                 delete s;
14         }
15 }
16
17 ElementSig *SignatureEnc::getElementSignature(Element *element){
18         ElementSig *esig = (ElementSig *)encoded.get((void *)element);
19         if(esig == NULL){
20                 Set *set = element->getRange();
21                 SetSig *ssig = (SetSig *)encoded.get((void *)set);
22                 if(ssig == NULL){
23                         ssig = new SetSig(signatures.getSize(), set);
24                         encoded.put(set, ssig);
25                         signatures.push(ssig);
26                         alloyEncoder->writeToFile(ssig->getSignature());
27                 }
28                 esig = new ElementSig(signatures.getSize(), ssig);
29                 encoded.put(element, esig);
30                 signatures.push(esig);
31                 alloyEncoder->writeToFile(esig->getSignature());
32
33         }
34         return esig;
35 }
36
37 void SignatureEnc::setValue(uint id, uint64_t value){
38         ElementSig *sig = (ElementSig *)signatures.get(id);
39         sig->setValue(value);
40 }
41
42 uint64_t SignatureEnc::getValue(Element *element){
43         ElementSig *sig = (ElementSig *)encoded.get((void *) element);
44         ASSERT(sig != NULL);
45         return sig->getValue();
46 }