After resolving conflicts
[satune.git] / src / AST / set.cc
index 5c07ac5ce49ef59b37a431bd19d5e613e7759daf..52494e393ca9ef682fbd5d20bce9e52041d31665 100644 (file)
@@ -5,11 +5,11 @@
 #include "qsort.h"
 
 int intcompare(const void *p1, const void *p2) {
-       uint64_t a=*(uint64_t const *) p1;
-       uint64_t b=*(uint64_t const *) p2;
+       uint64_t a = *(uint64_t const *) p1;
+       uint64_t b = *(uint64_t const *) p2;
        if (a < b)
                return -1;
-       else if (a==b)
+       else if (a == b)
                return 0;
        else
                return 1;
@@ -34,18 +34,18 @@ bool Set::exists(uint64_t element) {
                return element >= low && element <= high;
        } else {
                //Use Binary Search
-               uint low=0;
-               uint high=members->getSize()-1;
-               while(true) {
-                       uint middle=(low+high)/2;
-                       uint64_t val=members->get(middle);
+               uint low = 0;
+               uint high = members->getSize() - 1;
+               while (true) {
+                       uint middle = (low + high) / 2;
+                       uint64_t val = members->get(middle);
                        if (element < val) {
-                               high=middle-1;
-                               if (middle<=low)
+                               high = middle - 1;
+                               if (middle <= low)
                                        return false;
                        } else if (element > val) {
-                               low=middle+1;
-                               if (middle>=high)
+                               low = middle + 1;
+                               if (middle >= high)
                                        return false;
                        } else {
                                return true;
@@ -103,32 +103,40 @@ uint Set::getUnionSize(Set *s) {
        uint sum = 0;
        uint64_t sValue = s->getElement(sIndex);
        uint64_t thisValue = getElement(thisIndex);
-       while(thisIndex < thisSize && sIndex < sSize) {
+       while (thisIndex < thisSize && sIndex < sSize) {
                if (sValue < thisValue) {
-                       sValue = s->getElement(++sIndex);
+                       sIndex++;
+                       if (sIndex < sSize)
+                               sValue = s->getElement(sIndex);
                        sum++;
                } else if (thisValue < sValue) {
-                       thisValue = getElement(++thisIndex);
+                       thisIndex++;
+                       if (thisIndex < thisSize)
+                               thisValue = getElement(thisIndex);
                        sum++;
                } else {
-                       thisValue = getElement(++thisIndex);
-                       sValue = s->getElement(++sIndex);
+                       thisIndex++;
+                       sIndex++;
+                       if (sIndex < sSize)
+                               sValue = s->getElement(sIndex);
+                       if (thisIndex < thisSize)
+                               thisValue = getElement(thisIndex);
                        sum++;
                }
        }
        sum += (thisSize - thisIndex) + (sSize - sIndex);
-       
+
        return sum;
 }
 
-void Set::serialize(Serializer* serializer){
-       if(serializer->isSerialized(this))
+void Set::serialize(Serializer *serializer) {
+       if (serializer->isSerialized(this))
                return;
        serializer->addObject(this);
        ASTNodeType asttype = SETTYPE;
        serializer->mywrite(&asttype, sizeof(ASTNodeType));
-       SetThis = this;
-       serializer->mywrite(&This, sizeof(Set*));
+       Set *This = this;
+       serializer->mywrite(&This, sizeof(Set *));
        serializer->mywrite(&type, sizeof(VarType));
        serializer->mywrite(&isRange, sizeof(bool));
         bool isMutable = isMutableSet();
@@ -146,17 +154,17 @@ void Set::serialize(Serializer* serializer){
         }
 }
 
-void Set::print(){
+void Set::print() {
        model_print("{Set:");
-        if(isRange){
-                model_print("Range: low=%lu, high=%lu}\n\n", low, high);
-        } else {
-                uint size = members->getSize();
-                model_print("Members: ");
-                for(uint i=0; i<size; i++){
-                        uint64_t mem = members->get(i);
-                        model_print("%lu, ", mem);
-                }
-                model_println("}\n");
-        }
+       if (isRange) {
+               model_print("Range: low=%lu, high=%lu}", low, high);
+       } else {
+               uint size = members->getSize();
+               model_print("Members: ");
+               for (uint i = 0; i < size; i++) {
+                       uint64_t mem = members->get(i);
+                       model_print("%lu, ", mem);
+               }
+               model_print("}");
+       }
 }