3 * File: deserializer.cc
6 * Created on September 7, 2017, 6:08 PM
9 #include "deserializer.h"
14 Deserializer::Deserializer(const char* file):
17 filedesc = open(file, O_RDONLY);
24 Deserializer::~Deserializer() {
28 ssize_t Deserializer::myread(void* __buf, size_t __nbytes){
29 return read (filedesc, __buf, __nbytes);
32 CSolver * Deserializer::deserialize(){
34 while(myread(&nodeType, sizeof(ASTNodeType) ) >0){
37 deserializeBooleanEdge();
40 deserializeBooleanVar();
43 deserializeBooleanOrder();
58 void Deserializer::deserializeBooleanEdge(){
60 myread(&b, sizeof(Boolean*));
62 bool isNegated = tmp.isNegated();
63 ASSERT(map.contains(tmp.getBoolean()));
64 b = (Boolean*) map.get(tmp.getBoolean());
66 solver->addConstraint(isNegated?res.negate():res);
69 void Deserializer::deserializeBooleanVar(){
71 myread(&b, sizeof(BooleanVar*));
73 myread(&vtype, sizeof(VarType));
74 map.put(b, solver->getBooleanVar(vtype).getBoolean());
77 void Deserializer::deserializeBooleanOrder(){
79 myread(&bo_ptr, sizeof(BooleanOrder*));
81 myread(&optr, sizeof(Order*));
83 myread(&first, sizeof(uint64_t));
85 myread(&second, sizeof(uint64_t));
86 ASSERT(map.contains(optr));
87 Order* order = (Order*) map.get(optr);
88 map.put(bo_ptr, solver->orderConstraint(order, first, second).getBoolean());
91 void Deserializer::deserializeOrder(){
93 myread(&o_ptr, sizeof(Order*));
95 myread(&type, sizeof(OrderType));
97 myread(&set_ptr, sizeof(Set *));
98 ASSERT(map.contains(set_ptr));
99 Set* set = (Set*) map.get(set_ptr);
100 map.put(o_ptr, solver->createOrder(type, set));
103 void Deserializer::deserializeSet(){
105 myread(&s_ptr, sizeof(Set*));
107 myread(&type, sizeof(VarType));
109 myread(&isRange, sizeof(bool));
111 myread(&low, sizeof(uint64_t));
113 myread(&high, sizeof(uint64_t));
115 myread(&size, sizeof(uint));
116 Vector<uint64_t> members;
117 for(uint i=0; i<size; i++){
119 myread(&mem, sizeof(uint64_t));
122 Set *set = isRange? solver->createRangeSet(type, low, high):
123 solver->createSet(type, members.expose(), size);