From 40b96a454dfeaad7852e335f2805d9ad13b1523c Mon Sep 17 00:00:00 2001 From: Hamed Date: Tue, 12 Sep 2017 20:14:24 -0700 Subject: [PATCH] Adding support for (de)serializing MutableSet --- src/AST/mutableset.h | 1 + src/AST/set.cc | 2 ++ src/AST/set.h | 1 + src/Serialize/deserializer.cc | 19 ++++++++++++++++--- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/AST/mutableset.h b/src/AST/mutableset.h index 568678f..c608f3f 100644 --- a/src/AST/mutableset.h +++ b/src/AST/mutableset.h @@ -7,6 +7,7 @@ public: MutableSet(VarType t); void addElementMSet(uint64_t element); Set *clone(CSolver *solver, CloneMap *map); + bool isMutableSet() {return true;} CMEMALLOC; }; #endif diff --git a/src/AST/set.cc b/src/AST/set.cc index 54c6679..fc8bf15 100644 --- a/src/AST/set.cc +++ b/src/AST/set.cc @@ -95,6 +95,8 @@ void Set::serialize(Serializer* serializer){ serializer->mywrite(&isRange, sizeof(bool)); serializer->mywrite(&low, sizeof(uint64_t)); serializer->mywrite(&high, sizeof(uint64_t)); + bool isMutable = isMutableSet(); + serializer->mywrite(&isMutable, sizeof(bool)); uint size = members->getSize(); serializer->mywrite(&size, sizeof(uint)); for(uint i=0; i members; for(uint i=0; iaddElementMSet(mem); + }else { + members.push(mem); + } + } + if(!isMutable){ + set = isRange? solver->createRangeSet(type, low, high): + solver->createSet(type, members.expose(), size); } - Set *set = isRange? solver->createRangeSet(type, low, high): - solver->createSet(type, members.expose(), size); map.put(s_ptr, set); } -- 2.34.1