(de)serializer: BooleanOrder + BooleanVar
[satune.git] / src / Serialize / deserializer.cc
1
2 /* 
3  * File:   deserializer.cc
4  * Author: hamed
5  * 
6  * Created on September 7, 2017, 6:08 PM
7  */
8
9 #include "deserializer.h"
10 #include "csolver.h"
11 #include "unistd.h"
12 #include "fcntl.h"
13
14 Deserializer::Deserializer(const char* file):
15         solver(new CSolver())
16 {
17         filedesc = open(file, O_RDONLY);
18  
19         if (filedesc < 0) {
20                 exit(-1);
21         }
22 }
23
24 Deserializer::~Deserializer() {
25         delete solver;
26 }
27
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");
32         return t;
33 }
34
35 CSolver * Deserializer::deserialize(){
36         ASTNodeType nodeType;
37         while(myread(&nodeType, sizeof(ASTNodeType) ) >0){
38                 switch(nodeType){
39                         case BOOLEANEDGE:
40                                 deserializeBooleanEdge();
41                                 break;
42                         case BOOLEANVAR:
43                                 deserializeBooleanVar();
44                                 break;
45                         default:
46                                 ASSERT(0);
47                 }
48         }
49         return solver;
50 }
51
52 void Deserializer::deserializeBooleanEdge(){
53         Boolean *b;
54         myread(&b, sizeof(Boolean*));
55         BooleanEdge tmp(b);
56         bool isNegated = tmp.isNegated();
57         ASSERT(map.contains(tmp.getBoolean()));
58         b = (Boolean*) map.get(tmp.getBoolean());
59         BooleanEdge res(b);
60         solver->addConstraint(isNegated?res.negate():res);
61 }
62
63 void Deserializer::deserializeBooleanVar(){
64         BooleanVar *b;
65         myread(&b, sizeof(BooleanVar*));
66         VarType vtype;
67         myread(&vtype, sizeof(VarType));
68         map.put(b, solver->getBooleanVar(vtype).getBoolean());
69 }
70
71 void Deserializer::deserializeBooleanOrder(){
72         BooleanOrder* bo_ptr;
73         myread(&bo_ptr, sizeof(BooleanOrder*));
74         Order* optr;
75         myread(&optr, sizeof(Order*));
76         uint64_t first;
77         myread(&first, sizeof(uint64_t));
78         uint64_t second;
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());
83 }