X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FEncoders%2Felementencoding.h;h=1d41940fcf4493b039ea2e46d14deb83c9a81455;hb=7ab5516d0205e463969af92c1b200a316d4a08f0;hp=385f5c27d1fe66a4408987cc13a1995f2479119b;hpb=4c14a10504b2532103daf0c1f2d42cfa36864455;p=satune.git diff --git a/src/Encoders/elementencoding.h b/src/Encoders/elementencoding.h index 385f5c2..1d41940 100644 --- a/src/Encoders/elementencoding.h +++ b/src/Encoders/elementencoding.h @@ -10,31 +10,54 @@ enum ElementEncodingType { typedef enum ElementEncodingType ElementEncodingType; -struct ElementEncoding { +class ElementEncoding { +public: + ElementEncoding(Element *element); + ElementEncodingType getElementEncodingType() {return type;} + ~ElementEncoding(); + void setElementEncodingType(ElementEncodingType type); + void deleteElementEncoding(); + void allocEncodingArrayElement(uint size); + void allocInUseArrayElement(uint size); + uint numEncodingVars() {return numVars;} + bool isinUseElement(uint offset) { return (inUseArray[(offset >> 6)] >> (offset & 63)) & 0x1;} + void setInUseElement(uint offset) {inUseArray[(offset >> 6)] |= 1 << (offset & 63);} + void encodingArrayInitialization(); + uint getSizeEncodingArray(uint setSize) { + switch (type) { + case BINARYINDEX: + return NEXTPOW2(setSize); + case ONEHOT: + case UNARY: + return setSize; + default: + ASSERT(0); + } + return -1; + } + + ElementEncodingType type; - Element * element; - Edge * variables;/* List Variables Used To Encode Element */ - uint64_t * encodingArray; /* List the Variables in the appropriate order */ - uint64_t * inUseArray;/* Bitmap to track variables in use */ - uint encArraySize; + Element *element; + Edge *variables;/* List Variables Used To Encode Element */ + union { + struct { + uint64_t *encodingArray; /* List the Variables in the appropriate order */ + uint64_t *inUseArray; /* Bitmap to track variables in use */ + uint encArraySize; + }; + struct { + uint64_t offset;/* Value = offset + encoded number (interpretted according to isBinaryValSigned) */ + uint64_t low;/* Lowest value to encode */ + uint64_t high;/* High value to encode. If low > high, we assume wrap around to include 0. */ + uint numBits; + bool isBinaryValSigned; + }; + }; uint numVars; /* Number of variables */ + MEMALLOC; }; -void initElementEncoding(ElementEncoding *This, Element *element); -static inline ElementEncodingType getElementEncodingType(ElementEncoding * This) {return This->type;} -void setElementEncodingType(ElementEncoding* This, ElementEncodingType type); -void deleteElementEncoding(ElementEncoding *This); -void allocEncodingArrayElement(ElementEncoding *This, uint size); -void allocInUseArrayElement(ElementEncoding *This, uint size); -void generateBinaryIndexEncodingVars(SATEncoder* encode, ElementEncoding* This); -void generateElementEncodingVariables(SATEncoder* encoder, ElementEncoding* This); - -static inline bool isinUseElement(ElementEncoding *This, uint offset) { - return (This->inUseArray[(offset>>6)] >> (offset & 63)) &0x1; -} - -static inline void setInUseElement(ElementEncoding *This, uint offset) { - This->inUseArray[(offset>>6)] |= 1 << (offset & 63); -} + #endif