scratch of (de)serializing
[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                         default:
43                                 ASSERT(0);
44                 }
45         }
46         return solver;
47 }
48
49 void Deserializer::deserializeBooleanEdge(){
50         Boolean *b;
51         myread(&b, sizeof(Boolean*));
52         BooleanEdge tmp(b);
53         bool isNegated = tmp.isNegated();
54         ASSERT(map.contains(tmp.getBoolean()));
55         b = (Boolean*) map.get(tmp.getBoolean());
56         BooleanEdge res(b);
57         solver->addConstraint(isNegated?res.negate():res);
58 }