enum PredicateType {TABLEPRED, OPERATORPRED};
typedef enum PredicateType PredicateType;
-enum ASTNodeType {ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, BOOLCONST, ELEMSET, ELEMFUNCRETURN, ELEMCONST, BOOLEANEDGE, ORDERTYPE, SETTYPE};
+enum ASTNodeType {ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, BOOLCONST, ELEMSET, ELEMFUNCRETURN, ELEMCONST,
+ BOOLEANEDGE, ORDERTYPE, SETTYPE, PREDTABLETYPE, PREDOPERTYPE, TABLETYPE, FUNCTABLETYPE, FUNCOPTYPE};
typedef enum ASTNodeType ASTNodeType;
enum Polarity {P_UNDEFINED=0, P_TRUE=1, P_FALSE=2, P_BOTHTRUEFALSE=3};
}
void BooleanPredicate::serialize(Serializer* serializer){
- ASSERT(0);
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ predicate->serialize(serializer);
+ uint size = inputs.getSize();
+ for(uint i=0; i<size; i++){
+ Element* input = inputs.get(i);
+ input->serialize(serializer);
+ }
+ serializeBooleanEdge(serializer, undefStatus);
+
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ BooleanPredicate* This = this;
+ serializer->mywrite(&This, sizeof(BooleanPredicate*));
+ serializer->mywrite(&predicate, sizeof(Predicate *));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Element *input = inputs.get(i);
+ serializer->mywrite(&input, sizeof(Element *));
+ }
+ Boolean* undefStat = undefStatus.getRaw();
+ serializer->mywrite(&undefStat, sizeof(Boolean*));
}
void BooleanLogic::serialize(Serializer* serializer){
- ASSERT(0);
-}
\ No newline at end of file
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+ uint size = inputs.getSize();
+ for(uint i=0; i<size; i++){
+ BooleanEdge input = inputs.get(i);
+ serializeBooleanEdge(serializer, input);
+ }
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ BooleanLogic* This = this;
+ serializer->mywrite(&This, sizeof(BooleanLogic*));
+ serializer->mywrite(&op, sizeof(LogicOp));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Boolean* input = inputs.get(i).getRaw();
+ serializer->mywrite(&input, sizeof(Boolean*));
+ }
+}
+
#include "astnode.h"
#include "functionencoding.h"
#include "constraint.h"
-#include "serializable.h"
#include "serializer.h"
-class Boolean : public ASTNode, public Serializable {
+class Boolean : public ASTNode {
public:
Boolean(ASTNodeType _type);
virtual ~Boolean() {}
Set * ElementFunction::getRange() {
return function->getRange();
}
+
+void ElementSet::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ set->serialize(serializer);
+
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ ElementSet *This = this;
+ serializer->mywrite(&This, sizeof(ElementSet*));
+ serializer->mywrite(&set, sizeof(Set*));
+}
+
+void ElementConst::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ set->serialize(serializer);
+
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ ElementSet *This = this;
+ serializer->mywrite(&This, sizeof(ElementSet*));
+ VarType type = set->getType();
+ serializer->mywrite(&type, sizeof(VarType));
+ serializer->mywrite(&value, sizeof(uint64_t));
+}
+
+void ElementFunction::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ function->serialize(serializer);
+ uint size = inputs.getSize();
+ for(uint i=0; i<size; i++){
+ Element *input = inputs.get(i);
+ input->serialize(serializer);
+ }
+ serializeBooleanEdge(serializer, overflowstatus);
+
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ ElementFunction *This = this;
+ serializer->mywrite(&This, sizeof(ElementFunction *));
+ serializer->mywrite(&function, sizeof(Function *));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Element* input = inputs.get(i);
+ serializer->mywrite(&input, sizeof(Element*));
+ }
+ Boolean* overflowstat = overflowstatus.getRaw();
+ serializer->mywrite(&overflowstat, sizeof(Boolean*));
+}
+
Vector<ASTNode *> parents;
ElementEncoding encoding;
virtual Element *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;};
+ virtual void serialize(Serializer* serializer) =0;
virtual void updateParents() {}
virtual Set * getRange() = 0;
CMEMALLOC;
ElementSet(ASTNodeType type, Set *s);
ElementSet(Set *s);
virtual Element *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serializer);
CMEMALLOC;
Set *getRange() {return set;}
- private:
+ protected:
Set *set;
};
public:
ElementConst(uint64_t value, Set *_set);
uint64_t value;
+ virtual void serialize(Serializer* serializer);
Element *clone(CSolver *solver, CloneMap *map);
CMEMALLOC;
};
BooleanEdge overflowstatus;
FunctionEncoding functionencoding;
Element *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serializer);
Set * getRange();
void updateParents();
CMEMALLOC;
#include "table.h"
#include "set.h"
#include "csolver.h"
+#include "serializer.h"
FunctionOperator::FunctionOperator(ArithOp _op, Set **domain, uint numDomain, Set *_range, OverFlowBehavior _overflowbehavior) :
Function(OPERATORFUNC),
Set * FunctionTable::getRange() {
return table->getRange();
}
+
+void FunctionTable::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ table->serialize(serializer);
+
+ ASTNodeType type = FUNCTABLETYPE;
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ FunctionTable* This = this;
+ serializer->mywrite(&This, sizeof(FunctionTable*));
+ serializer->mywrite(&table, sizeof(Table *));
+ serializer->mywrite(&undefBehavior, sizeof(UndefinedBehavior));
+
+}
+
+void FunctionOperator::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ uint size = domains.getSize();
+ for(uint i=0; i<size; i++){
+ Set* domain = domains.get(i);
+ domain->serialize(serializer);
+ }
+ range->serialize(serializer);
+
+ ASTNodeType nodeType = FUNCOPTYPE;
+ serializer->mywrite(&nodeType, sizeof(ASTNodeType));
+ FunctionOperator* This = this;
+ serializer->mywrite(&This, sizeof(FunctionOperator*));
+ serializer->mywrite(&op, sizeof(ArithOp));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Set *domain = domains.get(i);
+ serializer->mywrite(&domain, sizeof(Set *));
+ }
+ serializer->mywrite(&range, sizeof(Set *));
+ serializer->mywrite(&overflowbehavior, sizeof(OverFlowBehavior));
+}
\ No newline at end of file
FunctionType type;
virtual ~Function() {}
virtual Function *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;}
+ virtual void serialize(Serializer* serialiezr) =0;
virtual Set * getRange() = 0;
CMEMALLOC;
};
uint64_t applyFunctionOperator(uint numVals, uint64_t *values);
bool isInRangeFunction(uint64_t val);
Function *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serialiezr);
Set * getRange() {return range;}
CMEMALLOC;
};
UndefinedBehavior undefBehavior;
FunctionTable (Table *table, UndefinedBehavior behavior);
Function *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serialiezr);
Set * getRange();
CMEMALLOC;
};
#include "orderencoding.h"
#include "boolean.h"
#include "orderpair.h"
-#include "serializable.h"
-class Order : public Serializable {
+class Order{
public:
Order(OrderType type, Set *set);
virtual ~Order();
map->put(this, p);
return p;
}
+
+void PredicateTable::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ table->serialize(serializer);
+
+ ASTNodeType type = PREDTABLETYPE;
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ PredicateTable* This = this;
+ serializer->mywrite(&This, sizeof(PredicateTable*));
+ serializer->mywrite(&table, sizeof(Table *));
+ serializer->mywrite(&undefinedbehavior, sizeof(UndefinedBehavior));
+}
+
+void PredicateOperator::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ uint size = domains.getSize();
+ for(uint i=0; i<size; i++){
+ Set* domain = domains.get(i);
+ domain->serialize(serializer);
+ }
+
+ ASTNodeType type = PREDOPERTYPE;
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ PredicateOperator* This = this;
+ serializer->mywrite(&This, sizeof(PredicateOperator*));
+ serializer->mywrite(&op, sizeof(CompOp));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Set* domain = domains.get(i);
+ serializer->mywrite(&domain, sizeof(Set*));
+ }
+}
+
Predicate(PredicateType _type) : type(_type) {}
virtual ~Predicate() {}
virtual Predicate *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;}
+ virtual void serialize(Serializer* serializer) = 0;
PredicateType type;
CMEMALLOC;
};
PredicateOperator(CompOp op, Set **domain, uint numDomain);
bool evalPredicateOperator(uint64_t *inputs);
Predicate *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serializer);
CompOp op;
Array<Set *> domains;
CMEMALLOC;
public:
PredicateTable(Table *table, UndefinedBehavior undefBehavior);
Predicate *clone(CSolver *solver, CloneMap *map);
+ virtual void serialize(Serializer* serializer);
Table *table;
UndefinedBehavior undefinedbehavior;
CMEMALLOC;
#include "classlist.h"
#include "structs.h"
#include "mymemory.h"
-#include "serializable.h"
-class Set : public Serializable {
+class Set {
public:
Set(VarType t);
Set(VarType t, uint64_t *elements, uint num);
#include "set.h"
#include "mutableset.h"
#include "csolver.h"
+#include "serializer.h"
Table::Table(Set **_domains, uint numDomain, Set *_range) :
domains(_domains, numDomain),
delete entries;
}
+
+
+void Table::serialize(Serializer* serializer){
+ if(serializer->isSerialized(this))
+ return;
+ serializer->addObject(this);
+
+ uint size = domains.getSize();
+ for(uint i=0; i<size; i++){
+ Set* domain = domains.get(i);
+ domain->serialize(serializer);
+ }
+ range->serialize(serializer);
+
+ ASTNodeType type = TABLETYPE;
+ serializer->mywrite(&type, sizeof(ASTNodeType));
+ Table* This = this;
+ serializer->mywrite(&This, sizeof(Table*));
+ serializer->mywrite(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ Set* domain = domains.get(i);
+ serializer->mywrite(&domain, sizeof(Set*));
+ }
+ serializer->mywrite(&range, sizeof(Set*));
+ size = entries->getSize();
+ serializer->mywrite(&size, sizeof(uint));
+ SetIteratorTableEntry* iterator = getEntries();
+ while(iterator->hasNext()){
+ TableEntry* entry = iterator->next();
+ serializer->mywrite(&entry->output, sizeof(uint64_t));
+ serializer->mywrite(&entry->inputSize, sizeof(uint));
+ serializer->mywrite(entry->inputs, sizeof(uint64_t) * entry->inputSize);
+ ASSERT(0);
+ }
+}
+
+
void addNewTableEntry(uint64_t *inputs, uint inputSize, uint64_t result);
TableEntry *getTableEntry(uint64_t *inputs, uint inputSize);
Table *clone(CSolver *solver, CloneMap *map);
+ void serialize(Serializer *serializer);
~Table();
Set * getRange() {return range;}
#include "csolver.h"
#include "unistd.h"
#include "fcntl.h"
+#include "predicate.h"
+#include "table.h"
+#include "element.h"
Deserializer::Deserializer(const char* file):
solver(new CSolver())
case SETTYPE:
deserializeSet();
break;
+ case LOGICOP:
+ deserializeBooleanLogic();
+ break;
+ case PREDICATEOP:
+ deserializeBooleanPredicate();
+ break;
+ case PREDTABLETYPE:
+ deserializePredicateTable();
+ break;
+ case PREDOPERTYPE:
+ deserializePredicateOperator();
+ break;
+ case TABLETYPE:
+ deserializeTable();
+ break;
+ case ELEMSET:
+ deserializeElementSet();
+ break;
+ case ELEMCONST:
+ deserializeElementConst();
+ break;
+ case ELEMFUNCRETURN:
+ deserializeElementFunction();
+ break;
+ case FUNCOPTYPE:
+ deserializeFunctionOperator();
+ break;
+ case FUNCTABLETYPE:
+ deserializeFunctionTable();
+ break;
default:
ASSERT(0);
}
solver->createSet(type, members.expose(), size);
map.put(s_ptr, set);
}
+
+void Deserializer::deserializeBooleanLogic(){
+ BooleanLogic *bl_ptr;
+ myread(&bl_ptr, sizeof(BooleanLogic *));
+ LogicOp op;
+ myread(&op, sizeof(LogicOp));
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<BooleanEdge> members;
+ for(uint i=0; i<size; i++){
+
+ }
+ map.put(bl_ptr, solver->applyLogicalOperation(op, members.expose(), size).getBoolean());
+}
+
+void Deserializer::deserializeBooleanPredicate(){
+ BooleanPredicate *bp_ptr;
+ myread(&bp_ptr, sizeof(BooleanPredicate *));
+ Predicate* predicate;
+ myread(&predicate, sizeof(Predicate*));
+ ASSERT(map.contains(predicate));
+ predicate = (Predicate*) map.get(predicate);
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<Element*> members;
+ for(uint i=0; i<size; i++){
+ Element* input;
+ myread(&input, sizeof(Element *));
+ ASSERT(map.contains(input));
+ input = (Element*) map.get(input);
+ members.push(input);
+ }
+
+ Boolean* stat_ptr;
+ myread(&stat_ptr, sizeof(Boolean *));
+ BooleanEdge tmp(stat_ptr);
+ bool isNegated = tmp.isNegated();
+ ASSERT(map.contains(tmp.getBoolean()));
+ stat_ptr = (Boolean*) map.get(tmp.getBoolean());
+ BooleanEdge res(stat_ptr);
+ BooleanEdge undefStatus = isNegated?res.negate():res;
+
+ map.put(bp_ptr, solver->applyPredicateTable(predicate, members.expose(), size, undefStatus).getBoolean());
+}
+
+void Deserializer::deserializePredicateTable(){
+ PredicateTable *pt_ptr;
+ myread(&pt_ptr, sizeof(PredicateTable *));
+ Table* table;
+ myread(&table, sizeof(Table*));
+ ASSERT(map.contains(table));
+ table = (Table*) map.get(table);
+ UndefinedBehavior undefinedbehavior;
+ myread(&undefinedbehavior, sizeof(UndefinedBehavior));
+
+ map.put(pt_ptr, solver->createPredicateTable(table, undefinedbehavior));
+}
+
+void Deserializer::deserializePredicateOperator(){
+ PredicateOperator *po_ptr;
+ myread(&po_ptr, sizeof(PredicateOperator *));
+ CompOp op;
+ myread(&op, sizeof(CompOp));
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<Set*> domains;
+ for(uint i=0; i<size; i++){
+ Set* domain;
+ myread(&domain, sizeof(Set*));
+ ASSERT(map.contains(domain));
+ domain = (Set*) map.get(domain);
+ domains.push(domain);
+ }
+
+ map.put(po_ptr, solver->createPredicateOperator(op, domains.expose(), size));
+}
+
+void Deserializer::deserializeTable(){
+ Table *t_ptr;
+ myread(&t_ptr, sizeof(Table *));
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<Set*> domains;
+ for(uint i=0; i<size; i++){
+ Set* domain;
+ myread(&domain, sizeof(Set*));
+ ASSERT(map.contains(domain));
+ domain = (Set*) map.get(domain);
+ domains.push(domain);
+ }
+ Set* range;
+ myread(&range, sizeof(Set*));
+ ASSERT(map.contains(range));
+ range = (Set*) map.get(range);
+ Table* table = solver->createTable(domains.expose(), size, range);
+ myread(&size, sizeof(uint));
+ for(uint i=0; i<size; i++){
+ uint64_t output;
+ myread(&output, sizeof(uint64_t));
+ uint inputSize;
+ myread(&inputSize, sizeof(uint));
+ Vector<uint64_t> inputs;
+ inputs.setSize(inputSize);
+ myread(inputs.expose(), sizeof(uint64_t)*inputSize);
+ ASSERT(0);
+ table->addNewTableEntry(inputs.expose(), inputSize, output);
+ }
+
+ map.put(t_ptr, table);
+}
+
+
+void Deserializer::deserializeElementSet(){
+ ElementSet* es_ptr;
+ myread(&es_ptr, sizeof(ElementSet*));
+ Set * set;
+ myread(&set, sizeof(Set *));
+ ASSERT(map.contains(set));
+ set = (Set*) map.get(set);
+ map.put(es_ptr, solver->getElementVar(set));
+}
+
+void Deserializer::deserializeElementConst(){
+ ElementSet* es_ptr;
+ myread(&es_ptr, sizeof(ElementSet*));
+ VarType type;
+ myread(&type, sizeof(VarType));
+ uint64_t value;
+ myread(&value, sizeof(uint64_t));
+ map.put(es_ptr, solver->getElementConst(type, value));
+}
+
+void Deserializer::deserializeElementFunction(){
+ ElementFunction *ef_ptr;
+ myread(&ef_ptr, sizeof(ElementFunction *));
+ Function *function;
+ myread(&function, sizeof(Function*));
+ ASSERT(map.contains(function));
+ function = (Function*) map.get(function);
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<Element*> members;
+ for(uint i=0; i<size; i++){
+ Element* input;
+ myread(&input, sizeof(Element *));
+ ASSERT(map.contains(input));
+ input = (Element*) map.get(input);
+ members.push(input);
+ }
+
+ Boolean* overflowstatus;
+ myread(&overflowstatus, sizeof(Boolean *));
+ BooleanEdge tmp(overflowstatus);
+ bool isNegated = tmp.isNegated();
+ ASSERT(map.contains(tmp.getBoolean()));
+ 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 Deserializer::deserializeFunctionOperator(){
+ FunctionOperator *fo_ptr;
+ myread(&fo_ptr, sizeof(FunctionOperator *));
+ ArithOp op;
+ myread(&op, sizeof(ArithOp));
+ uint size;
+ myread(&size, sizeof(uint));
+ Vector<Set*> domains;
+ for(uint i=0; i<size; i++){
+ Set* domain;
+ myread(&domain, sizeof(Set*));
+ ASSERT(map.contains(domain));
+ domain = (Set*) map.get(domain);
+ domains.push(domain);
+ }
+ Set* range;
+ myread(&range, sizeof(Set*));
+ ASSERT(map.contains(range));
+ range = (Set*) map.get(range);
+ OverFlowBehavior overflowbehavior;
+ myread(&overflowbehavior, sizeof(OverFlowBehavior));
+ map.put(fo_ptr, solver->createFunctionOperator(op, domains.expose(), size, range, overflowbehavior));
+}
+
+void Deserializer::deserializeFunctionTable(){
+ FunctionTable *ft_ptr;
+ myread(&ft_ptr, sizeof(FunctionTable *));
+ Table* table;
+ myread(&table, sizeof(Table*));
+ ASSERT(map.contains(table));
+ table = (Table*) map.get(table);
+ UndefinedBehavior undefinedbehavior;
+ myread(&undefinedbehavior, sizeof(UndefinedBehavior));
+
+ map.put(ft_ptr, solver->completeTable(table, undefinedbehavior));
+}
\ No newline at end of file
void deserializeBooleanOrder();
void deserializeOrder();
void deserializeSet();
+ void deserializeBooleanLogic();
+ void deserializeBooleanPredicate();
+ void deserializePredicateTable();
+ void deserializePredicateOperator();
+ void deserializeTable();
+ void deserializeElementSet();
+ void deserializeElementConst();
+ void deserializeElementFunction();
+ void deserializeFunctionOperator();
+ void deserializeFunctionTable();
CSolver *solver;
int filedesc;
CloneMap map;
+++ /dev/null
-
-/*
- * File: serializable.h
- * Author: hamed
- *
- * Created on September 7, 2017, 3:39 PM
- */
-
-#ifndef SERIALIZABLE_H
-#define SERIALIZABLE_H
-
-class Serializable{
- virtual void serialize(Serializer* ) = 0;
-};
-
-#endif /* SERIALIZABLE_H */
-
}
-void serializeBooleanEdge(Serializer* serializer, BooleanEdge& be){
+void serializeBooleanEdge(Serializer* serializer, BooleanEdge be){
be.getBoolean()->serialize(serializer);
ASTNodeType type = BOOLEANEDGE;
serializer->mywrite(&type, sizeof(ASTNodeType));
-void serializeBooleanEdge(Serializer* serializer, BooleanEdge& be);
+void serializeBooleanEdge(Serializer* serializer, BooleanEdge be);
#endif /* SERIALIZER_H */
Element *inputs2 [] = {e4, e3};
BooleanEdge pred = solver->applyPredicate(equal2, inputs2, 2);
solver->addConstraint(pred);
-// solver->serialize();
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 " \n", solver->getElementValue(e1), solver->getElementValue(e2));
else
Element *inputs[] = {e1, e2};
BooleanEdge b = solver->applyPredicate(equals, inputs, 2);
solver->addConstraint(b);
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 "\n", solver->getElementValue(e1), solver->getElementValue(e2));
Element *inputs[] = {e1, e2};
BooleanEdge b = solver->applyPredicate(equals, inputs, 2);
solver->addConstraint(b);
-
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 "\n", solver->getElementValue(e1), solver->getElementValue(e2));
else
Element *inputs2 [] = {e7, e6};
BooleanEdge pred = solver->applyPredicate(gt, inputs2, 2);
solver->addConstraint(pred);
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 " e7=%" PRIu64 "\n",
solver->addConstraint(solver->applyLogicalOperation(SATC_OR, barray4, 2));
BooleanEdge barray5[] = {b1, b4};
solver->addConstraint(solver->applyLogicalOperation(SATC_XOR, barray5, 2));
+ solver->serialize();
if (solver->solve() == 1)
printf("b1=%d b2=%d b3=%d b4=%d\n",
solver->getBooleanValue(b1), solver->getBooleanValue(b2),
Element *inputs2[] = {e1, e2};
BooleanEdge b = solver->applyPredicate(lt, inputs2, 2);
solver->addConstraint(b);
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 "\n", solver->getElementValue(e1), solver->getElementValue(e2));
else
BooleanEdge array12[] = {o58, o81};
solver->addConstraint(solver->applyLogicalOperation(SATC_AND, array12, 2) );
-
+ solver->serialize();
/* if (solver->solve() == 1)
printf("SAT\n");
else
Element *inputs2 [] = {e4, e3};
BooleanEdge pred = solver->applyPredicate(lte, inputs2, 2);
solver->addConstraint(pred);
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 " e3=%" PRIu64 " e4=%" PRIu64 " overFlow:%d\n",
Element *tmparray2[] = {e1, e2};
BooleanEdge pred2 = solver->applyPredicate(eq, tmparray2, 2);
solver->addConstraint(pred2);
+ solver->serialize();
if (solver->solve() == 1)
printf("e1=%" PRIu64 " e2=%" PRIu64 " e3=%" PRIu64 " undefFlag:%d\n",