More bugs
[satune.git] / src / ASTTransform / integerencodingrecord.cc
index 7085cf7f9c5e7d916d2c92d941122f28dc6ba133..6c8ba2fff73f0daf7afd1ba648d715dbfa634586 100644 (file)
@@ -1,7 +1,7 @@
-/* 
+/*
  * File:   integerencodingrecord.cpp
  * Author: hamed
- * 
+ *
  * Created on August 26, 2017, 6:19 PM
  */
 
@@ -9,25 +9,31 @@
 #include "csolver.h"
 #include "orderelement.h"
 
-IntegerEncodingRecord::IntegerEncodingRecord(Set* _set):
+IntegerEncodingRecord::IntegerEncodingRecord(Set *_set) :
        secondarySet(_set)
 {
-       elementTable = new HashsetOrderElement();
+       elementSet = new HashsetOrderElement();
 }
 
-IntegerEncodingRecord::~IntegerEncodingRecord(){
-       if (elementTable != NULL) {
-               delete elementTable;
+IntegerEncodingRecord::~IntegerEncodingRecord() {
+       SetIteratorOrderElement *oiterator = elementSet->iterator();
+       while (oiterator->hasNext()) {
+               OrderElement *oe = oiterator->next();
+               delete oe;
        }
+       delete oiterator;
+       delete elementSet;
 }
 
-Element * IntegerEncodingRecord::getOrderIntegerElement(CSolver *This, uint64_t item) {
+Element *IntegerEncodingRecord::getOrderIntegerElement(CSolver *This, uint64_t item, bool create) {
        OrderElement oelement(item, NULL);
-       if ( !elementTable->contains(&oelement)) {
+       if ( elementSet->contains(&oelement)) {
+               return elementSet->get(&oelement)->getElement();
+       } else if (create) {
                Element *elem = This->getElementVar(secondarySet);
-               elementTable->add(new OrderElement(item, elem));
+               elementSet->add(new OrderElement(item, elem));
                return elem;
-       } else
-               return elementTable->get(&oelement)->getElement();
+       }
+       return NULL;
 }