Keep sets sorted
authorbdemsky <bdemsky@uci.edu>
Tue, 12 Sep 2017 19:14:05 +0000 (12:14 -0700)
committerbdemsky <bdemsky@uci.edu>
Tue, 12 Sep 2017 19:14:05 +0000 (12:14 -0700)
src/AST/mutableset.cc
src/AST/set.cc
src/csolver.cc
src/csolver.h

index 6b3f953..d6657c5 100644 (file)
@@ -14,7 +14,8 @@ Set *MutableSet::clone(CSolver *solver, CloneMap *map) {
                return s;
        s = solver->createMutableSet(type);
        for (uint i = 0; i < members->getSize(); i++) {
-               solver->addItem((MutableSet *) s, members->get(i));
+               ((MutableSet *)s)->addElementMSet(members->get(i));
+               //              solver->addItem((MutableSet *) s, members->get(i));
        }
        map->put(this, s);
        return s;
index 76d6713..54c6679 100644 (file)
@@ -2,15 +2,29 @@
 #include <stddef.h>
 #include "csolver.h"
 #include "serializer.h"
+#include "qsort.h"
 
 Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) {
        members = new Vector<uint64_t>();
 }
 
+int intcompare(const void *p1, const void *p2) {
+       uint64_t a=*(uint64_t const *) p1;
+       uint64_t b=*(uint64_t const *) p2;
+       if (a < b)
+               return -1;
+       else if (a==b)
+               return 0;
+       else
+               return 1;
+}
+
 Set::Set(VarType t, uint64_t *elements, uint num) : type(t), isRange(false), low(0), high(0) {
        members = new Vector<uint64_t>(num, elements);
+       bsdqsort(members->expose(), members->getSize(), sizeof(uint64_t), intcompare);
 }
 
+
 Set::Set(VarType t, uint64_t lowrange, uint64_t highrange) : type(t), isRange(true), low(lowrange), high(highrange), members(NULL) {
 }
 
@@ -87,4 +101,4 @@ void Set::serialize(Serializer* serializer){
                uint64_t mem = members->get(i);
                serializer->mywrite(&mem, sizeof(uint64_t));
        }
-}
\ No newline at end of file
+}
index 0eebb17..ea4b924 100644 (file)
@@ -128,9 +128,9 @@ MutableSet *CSolver::createMutableSet(VarType type) {
        return set;
 }
 
-void CSolver::addItem(MutableSet *set, uint64_t element) {
-       set->addElementMSet(element);
-}
+//void CSolver::addItem(MutableSet *set, uint64_t element) {
+//     set->addElementMSet(element);
+//}
 
 uint64_t CSolver::createUniqueItem(MutableSet *set) {
        uint64_t element = set->getNewUniqueItem();
index feec9e6..4807908 100644 (file)
@@ -26,7 +26,8 @@ public:
 
        /** This function adds a new item to a set. */
 
-       void addItem(MutableSet *set, uint64_t element);
+       //Deprecating this unless we need it...
+       //      void addItem(MutableSet *set, uint64_t element);
 
        /** This function adds a new unique item to the set and returns it.
            This function cannot be used in conjunction with manually adding