X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FAST%2Felement.cc;h=f575a9034c2565695ac2f1696d0a5af2541c5e21;hp=2617022b9abcdfdef75bbcf33fc20552932c1dd3;hb=77f32c79afdf12f29c040d511cd84f15d703ceb9;hpb=3c0ccc94fed7aeec6c3de6c27708e31807a56021 diff --git a/src/AST/element.cc b/src/AST/element.cc index 2617022..f575a90 100644 --- a/src/AST/element.cc +++ b/src/AST/element.cc @@ -23,10 +23,10 @@ ElementSet::ElementSet(ASTNodeType _type, Set *s) : ElementFunction::ElementFunction(Function *_function, Element **array, uint numArrays, BooleanEdge _overflowstatus) : Element(ELEMFUNCRETURN), - function(_function), inputs(array, numArrays), overflowstatus(_overflowstatus), - functionencoding(this) { + functionencoding(this), + function(_function) { } ElementConst::ElementConst(uint64_t _value, Set *_set) : @@ -57,64 +57,87 @@ Element *ElementFunction::clone(CSolver *solver, CloneMap *map) { } void ElementFunction::updateParents() { - for(uint i=0;i < inputs.getSize(); i++) inputs.get(i)->parents.push(this); + for (uint i = 0; i < inputs.getSize(); i++) inputs.get(i)->parents.push(this); } -Set * ElementFunction::getRange() { +Set *ElementFunction::getRange() { return function->getRange(); } -void ElementSet::serialize(Serializer* serializer){ - if(serializer->isSerialized(this)) +void ElementSet::serialize(Serializer *serializer) { + if (serializer->isSerialized(this)) return; serializer->addObject(this); - + set->serialize(serializer); - + serializer->mywrite(&type, sizeof(ASTNodeType)); ElementSet *This = this; - serializer->mywrite(&This, sizeof(ElementSet*)); - serializer->mywrite(&set, sizeof(Set*)); + serializer->mywrite(&This, sizeof(ElementSet *)); + serializer->mywrite(&set, sizeof(Set *)); +} + +void ElementSet::print() { + model_print("{ElementSet:"); + set->print(); + model_print(" %p ", this); + getElementEncoding()->print(); + model_print("}"); } -void ElementConst::serialize(Serializer* serializer){ - if(serializer->isSerialized(this)) +void ElementConst::serialize(Serializer *serializer) { + if (serializer->isSerialized(this)) return; serializer->addObject(this); - + set->serialize(serializer); - + serializer->mywrite(&type, sizeof(ASTNodeType)); ElementSet *This = this; - serializer->mywrite(&This, sizeof(ElementSet*)); + serializer->mywrite(&This, sizeof(ElementSet *)); VarType type = set->getType(); serializer->mywrite(&type, sizeof(VarType)); serializer->mywrite(&value, sizeof(uint64_t)); } -void ElementFunction::serialize(Serializer* serializer){ - if(serializer->isSerialized(this)) +void ElementConst::print() { + model_print("{ElementConst: %" PRIu64 "}\n", value); +} + +void ElementFunction::serialize(Serializer *serializer) { + if (serializer->isSerialized(this)) return; serializer->addObject(this); function->serialize(serializer); uint size = inputs.getSize(); - for(uint i=0; iserialize(serializer); } serializeBooleanEdge(serializer, overflowstatus); - + serializer->mywrite(&type, sizeof(ASTNodeType)); ElementFunction *This = this; serializer->mywrite(&This, sizeof(ElementFunction *)); serializer->mywrite(&function, sizeof(Function *)); serializer->mywrite(&size, sizeof(uint)); - for(uint i=0; imywrite(&input, sizeof(Element*)); + for (uint i = 0; i < size; i++) { + Element *input = inputs.get(i); + serializer->mywrite(&input, sizeof(Element *)); } - Boolean* overflowstat = overflowstatus.getRaw(); - serializer->mywrite(&overflowstat, sizeof(Boolean*)); + Boolean *overflowstat = overflowstatus.getRaw(); + serializer->mywrite(&overflowstat, sizeof(Boolean *)); } +void ElementFunction::print() { + model_print("{ElementFunction:\n"); + function->print(); + model_print("Elements:\n"); + uint size = inputs.getSize(); + for (uint i = 0; i < size; i++) { + Element *input = inputs.get(i); + input->print(); + } + model_print("}\n"); +}