Finish clone
[satune.git] / src / AST / set.cc
index 4b66dfe956d499d5a6a653ed25ab767c40fe1eae..b0e1d8aabb6aadde4dc755b0a67f7ed545a6035c 100644 (file)
@@ -1,5 +1,6 @@
 #include "set.h"
 #include <stddef.h>
+#include "csolver.h"
 
 Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) {
        members = new Vector<uint64_t>();
@@ -44,3 +45,16 @@ Set::~Set() {
        if (!isRange)
                delete members;
 }
+
+Set *Set::clone(CSolver *solver, CloneMap *map) {
+       Set *s = (Set *) map->get(this);
+       if (s != NULL)
+               return s;
+       if (isRange) {
+               s = solver->createRangeSet(type, low, high);
+       } else {
+               s = solver->createSet(type, members->expose(), members->getSize());
+       }
+       map->put(this, s);
+       return s;
+}