From 65275e5ec0b495610fc450d01ced6bd095c9602a Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 12 Sep 2017 12:14:05 -0700 Subject: [PATCH] Keep sets sorted --- src/AST/mutableset.cc | 3 ++- src/AST/set.cc | 16 +++++++++++++++- src/csolver.cc | 6 +++--- src/csolver.h | 3 ++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/AST/mutableset.cc b/src/AST/mutableset.cc index 6b3f953..d6657c5 100644 --- a/src/AST/mutableset.cc +++ b/src/AST/mutableset.cc @@ -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; diff --git a/src/AST/set.cc b/src/AST/set.cc index 76d6713..54c6679 100644 --- a/src/AST/set.cc +++ b/src/AST/set.cc @@ -2,15 +2,29 @@ #include #include "csolver.h" #include "serializer.h" +#include "qsort.h" Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) { members = new Vector(); } +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(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 +} diff --git a/src/csolver.cc b/src/csolver.cc index 0eebb17..ea4b924 100644 --- a/src/csolver.cc +++ b/src/csolver.cc @@ -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(); diff --git a/src/csolver.h b/src/csolver.h index feec9e6..4807908 100644 --- a/src/csolver.h +++ b/src/csolver.h @@ -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 -- 2.34.1