}
Deserializer::~Deserializer() {
- delete solver;
-
if (-1 == close(filedesc)) {
exit(-1);
}
}
void Deserializer::deserializeBooleanEdge() {
- Boolean *b;
- myread(&b, sizeof(Boolean *));
- BooleanEdge tmp(b);
+ Boolean *b_ptr;
+ myread(&b_ptr, sizeof(Boolean *));
+ BooleanEdge tmp(b_ptr);
bool isNegated = tmp.isNegated();
ASSERT(map.contains(tmp.getBoolean()));
- b = (Boolean *) map.get(tmp.getBoolean());
- BooleanEdge res(b);
- solver->addConstraint(isNegated ? res.negate() : res);
+ b_ptr = (Boolean *) map.get(tmp.getBoolean());
+ BooleanEdge res(b_ptr);
+ bool isTopLevel;
+ myread(&isTopLevel, sizeof(bool));
+ if(isTopLevel){
+ solver->addConstraint(isNegated ? res.negate() : res);
+ }
}
void Deserializer::deserializeBooleanVar() {
overflowstatus = (Boolean *) map.get(tmp.getBoolean());
BooleanEdge res(overflowstatus);
BooleanEdge undefStatus = isNegated ? res.negate() : res;
-
map.put(ef_ptr, solver->applyFunction(function, members.expose(), size, undefStatus));
}
}
-void serializeBooleanEdge(Serializer *serializer, BooleanEdge be) {
- if (be == BooleanEdge(NULL))
- return;
+void serializeBooleanEdge(Serializer *serializer, BooleanEdge be, bool isTopLevel) {
+ if (be == BooleanEdge(NULL)){
+ Boolean* boolean = NULL;
+ serializer->mywrite(&boolean, sizeof(Boolean *));
+ return;
+ }
be.getBoolean()->serialize(serializer);
ASTNodeType type = BOOLEANEDGE;
serializer->mywrite(&type, sizeof(ASTNodeType));
Boolean *boolean = be.getRaw();
serializer->mywrite(&boolean, sizeof(Boolean *));
+ serializer->mywrite(&isTopLevel, sizeof(bool));
}
\ No newline at end of file
-void serializeBooleanEdge(Serializer *serializer, BooleanEdge be);
+void serializeBooleanEdge(Serializer *serializer, BooleanEdge be, bool isTopLevel=false);
#endif/* SERIALIZER_H */
+++ /dev/null
-#include "csolver.h"
-
-
-int main(int argc, char ** argv){
- if(argc != 2){
- printf("You only specify the name of the file ...");
- exit(-1);
- }
- CSolver* solver = CSolver::deserialize(argv[1]);
- solver->printConstraints();
- return 1;
-
-}
--- /dev/null
+#include "csolver.h"
+
+
+int main(int argc, char ** argv){
+ if(argc != 2){
+ printf("You only specify the name of the file ...");
+ exit(-1);
+ }
+ CSolver* solver = CSolver::deserialize(argv[1]);
+ solver->printConstraints();
+ delete solver;
+ return 1;
+
+}
void CSolver::serialize() {
model_print("serializing ...\n");
+ printConstraints();
Serializer serializer("dump");
SetIteratorBooleanEdge *it = getConstraints();
while (it->hasNext()) {
BooleanEdge b = it->next();
- serializeBooleanEdge(&serializer, b);
+ serializeBooleanEdge(&serializer, b, true);
}
delete it;
}
#ifdef TRACE_DEBUG
model_println("****New Constraint******");
#endif
+ if(constraint.isNegated())
+ model_print("!");
+ constraint.getBoolean()->print();
if (isTrue(constraint))
return;
else if (isFalse(constraint)) {
EncodingGraph eg(this);
eg.buildGraph();
eg.encode();
- printConstraints();
+// printConstraints();
naiveEncodingDecision(this);
satEncoder->encodeAllSATEncoder(this);
model_print("Is problem UNSAT after encoding: %d\n", unsat);