X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FEncoders%2Felementencoding.cc;h=02d4898e3515959b969e869494ff2f4d23a27aa8;hb=8be75c0cf932afdf2a48422b6a3c53c3d9733557;hp=69036a1f2a7baf210340db31711d0ecec9dd6862;hpb=cd2da835188cf0bbe3502c61dc66cc803f26cbfa;p=satune.git diff --git a/src/Encoders/elementencoding.cc b/src/Encoders/elementencoding.cc index 69036a1..02d4898 100644 --- a/src/Encoders/elementencoding.cc +++ b/src/Encoders/elementencoding.cc @@ -5,13 +5,18 @@ #include "satencoder.h" #include "set.h" +const char *elemEncTypeNames[] = {"UNASSIGNED", "ONEHOT", "UNARY", "BINARYINDEX", "BINARYVAL"}; + ElementEncoding::ElementEncoding(Element *_element) : type(ELEM_UNASSIGNED), element(_element), variables(NULL), encodingArray(NULL), inUseArray(NULL), + edgeArray(NULL), + polarityArray(NULL), encArraySize(0), + encoding(EENC_UNKNOWN), numVars(0) { } @@ -22,6 +27,10 @@ ElementEncoding::~ElementEncoding() { ourfree(encodingArray); if (inUseArray != NULL) ourfree(inUseArray); + if (edgeArray != NULL) + ourfree(edgeArray); + if (polarityArray != NULL) + ourfree(polarityArray); } void ElementEncoding::allocEncodingArrayElement(uint size) { @@ -30,7 +39,7 @@ void ElementEncoding::allocEncodingArrayElement(uint size) { } void ElementEncoding::allocInUseArrayElement(uint size) { - uint bytes = ((size + ((1 << 9) - 1)) >> 6) & ~7;//Depends on size of inUseArray + uint bytes = ((size + 63) >> 3) & ~7; //Depends on size of inUseArray inUseArray = (uint64_t *) ourcalloc(1, bytes); } @@ -39,14 +48,27 @@ void ElementEncoding::setElementEncodingType(ElementEncodingType _type) { } void ElementEncoding::encodingArrayInitialization() { - Set *set = getElementSet(element); - ASSERT(!set->isRange); - uint size = set->members->getSize(); + Set *set = element->getRange(); + uint size = set->getSize(); uint encSize = getSizeEncodingArray(size); allocEncodingArrayElement(encSize); allocInUseArrayElement(encSize); for (uint i = 0; i < size; i++) { - encodingArray[i] = set->members->get(i); + encodingArray[i] = set->getElement(i); setInUseElement(i); } } + +void ElementEncoding::print() { + model_print("%s ", elemEncTypeNames[type]); + if (type == BINARYINDEX) { + for (uint i = 0; i < encArraySize; i++) { + if (i != 0) + model_print(", "); + if (isinUseElement(i)) + model_print("%" PRIu64 "", encodingArray[i]); + else + model_print("_"); + } + } +}