Fix memory errors detected by valgrind and inline functions
[satune.git] / src / Encoders / elementencoding.h
index eb20f2b865853a948626f3033e861a092b667df0..1af74beb9c92eb635e0a53c1a19b961c1a70ca09 100644 (file)
@@ -3,7 +3,7 @@
 #include "classlist.h"
 
 enum ElementEncodingType {
-       ONEHOT, UNARY, BINARYINDEX, ONEHOTBINARY, BINARYVAL
+       ELEM_UNASSIGNED, ONEHOT, UNARY, BINARYINDEX, ONEHOTBINARY, BINARYVAL
 };
 
 typedef enum ElementEncodingType ElementEncodingType;
@@ -11,11 +11,23 @@ typedef enum ElementEncodingType ElementEncodingType;
 struct ElementEncoding {
        ElementEncodingType type;
        Element * element;
-       Boolean ** variables; /* List Variables Use To Encode Element */
-       uint64_t * encodingArray; /* List the Variables in the appropriate order */
-       uint numVars; /* Number of variables */
+       Constraint ** 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 numVars;   /* Number of variables */
 };
 
-ElementEncoding * allocElementEncoding(ElementEncodingType type, Element *element);
-void deleteElementEncoding(ElementEncoding *this);
+void initElementEncoding(ElementEncoding *This, Element *element);
+void deleteElementEncoding(ElementEncoding *This);
+void baseBinaryIndexElementAssign(ElementEncoding *This);
+void allocEncodingArrayElement(ElementEncoding *This, uint size);
+void allocInUseArrayElement(ElementEncoding *This, uint size);
+
+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