1 #include "signatureenc.h"
5 #include "interpreter.h"
7 SignatureEnc::SignatureEnc(Interpreter *inter) :
13 SignatureEnc::~SignatureEnc() {
14 for (uint i = 0; i < signatures.getSize(); i++) {
15 Signature *s = signatures.get(i);
20 void SignatureEnc::updateMaxValue(Set *set) {
21 for (uint i = 0; i < set->getSize(); i++) {
22 if (set->getElement(i) > maxValue) {
23 maxValue = set->getElement(i);
28 ValuedSignature *SignatureEnc::getBooleanSignature(Boolean *bvar) {
29 ValuedSignature *bsig = (ValuedSignature *)encoded.get((void *)bvar);
31 bsig = interpreter->getBooleanSignature(getUniqueSigID());
32 encoded.put(bvar, bsig);
33 signatures.push(bsig);
34 interpreter->writeToFile(bsig->getSignature());
39 ValuedSignature *SignatureEnc::getElementSignature(Element *element) {
40 ValuedSignature *esig = (ValuedSignature *)encoded.get((void *)element);
42 Set *set = element->getRange();
43 Signature *ssig = (Signature *)encoded.get((void *)set);
45 ssig = interpreter->getSetSignature(getUniqueSigID(), set);
46 encoded.put(set, ssig);
47 signatures.push(ssig);
48 interpreter->writeToFile(ssig->getSignature());
51 esig = interpreter->getElementSignature(getUniqueSigID(), ssig);
52 encoded.put(element, esig);
53 signatures.push(esig);
54 interpreter->writeToFile(esig->getSignature());
60 void SignatureEnc::setValue(uint id, uint value) {
61 ValuedSignature *sig = getValuedSignature(id);
66 int SignatureEnc::getValue(void *astnode) {
67 ValuedSignature *sig = (ValuedSignature *)encoded.get(astnode);
69 return sig->getValue();