towards cloning
[satune.git] / src / AST / set.cc
index 4b66dfe956d499d5a6a653ed25ab767c40fe1eae..d5b9c34f360924270cf383252d88b2d88620bf8c 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=map->set.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->set.put(this, s);
+       return s;
+}