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 ssize_t t = read (filedesc, __buf, __nbytes);
30 write (1, __buf, __nbytes);
31 model_print("read\n");
35 CSolver * Deserializer::deserialize(){
37 while(myread(&nodeType, sizeof(ASTNodeType) ) >0){
40 deserializeBooleanEdge();
43 deserializeBooleanVar();
52 void Deserializer::deserializeBooleanEdge(){
54 myread(&b, sizeof(Boolean*));
56 bool isNegated = tmp.isNegated();
57 ASSERT(map.contains(tmp.getBoolean()));
58 b = (Boolean*) map.get(tmp.getBoolean());
60 solver->addConstraint(isNegated?res.negate():res);
63 void Deserializer::deserializeBooleanVar(){
65 myread(&b, sizeof(BooleanVar*));
67 myread(&vtype, sizeof(VarType));
68 map.put(b, solver->getBooleanVar(vtype).getBoolean());
71 void Deserializer::deserializeBooleanOrder(){
73 myread(&bo_ptr, sizeof(BooleanOrder*));
75 myread(&optr, sizeof(Order*));
77 myread(&first, sizeof(uint64_t));
79 myread(&second, sizeof(uint64_t));
80 ASSERT(map.contains(optr));
81 Order* order = (Order*) map.get(optr);
82 map.put(bo_ptr, solver->orderConstraint(order, first, second).getBoolean());