#include "ordergraph.h"
#include "orderedge.h"
#include "orderanalysis.h"
+#include "elementopt.h"
#include <time.h>
#include <stdarg.h>
return element;
}
+void CSolver::mustHaveValue(Element *element){
+ element->getElementEncoding()->anyValue = true;
+}
+
Set *CSolver::getElementRange (Element *element) {
return element->getRange();
}
}
}
-Function *CSolver::createFunctionOperator(ArithOp op, Set **domain, uint numDomain, Set *range,OverFlowBehavior overflowbehavior) {
- Function *function = new FunctionOperator(op, domain, numDomain, range, overflowbehavior);
+Function *CSolver::createFunctionOperator(ArithOp op, Set *range, OverFlowBehavior overflowbehavior) {
+ Function *function = new FunctionOperator(op, range, overflowbehavior);
allFunctions.push(function);
return function;
}
-Predicate *CSolver::createPredicateOperator(CompOp op, Set **domain, uint numDomain) {
- Predicate *predicate = new PredicateOperator(op, domain,numDomain);
+Predicate *CSolver::createPredicateOperator(CompOp op) {
+ Predicate *predicate = new PredicateOperator(op);
allPredicates.push(predicate);
return predicate;
}
return predicate;
}
-Table *CSolver::createTable(Set **domains, uint numDomain, Set *range) {
- Table *table = new Table(domains,numDomain,range);
+Table *CSolver::createTable(Set *range) {
+ Table *table = new Table(range);
allTables.push(table);
return table;
}
-Table *CSolver::createTableForPredicate(Set **domains, uint numDomain) {
- return createTable(domains, numDomain, NULL);
+Table *CSolver::createTableForPredicate() {
+ return createTable(NULL);
}
void CSolver::addTableEntry(Table *table, uint64_t *inputs, uint inputSize, uint64_t result) {
return applyLogicalOperation(op, array, 1);
}
-static int ptrcompares(const void *p1, const void *p2) {
- uintptr_t b1 = *(uintptr_t const *) p1;
- uintptr_t b2 = *(uintptr_t const *) p2;
+static int booleanEdgeCompares(const void *p1, const void *p2) {
+ BooleanEdge be1 = *(BooleanEdge const *) p1;
+ BooleanEdge be2 = *(BooleanEdge const *) p2;
+ uint64_t b1 = be1->id;
+ uint64_t b2 = be2->id;
if (b1 < b2)
return -1;
else if (b1 == b2)
} else if (newindex == 1) {
return newarray[0];
} else {
- bsdqsort(newarray, newindex, sizeof(BooleanEdge), ptrcompares);
+ bsdqsort(newarray, newindex, sizeof(BooleanEdge), booleanEdgeCompares);
array = newarray;
asize = newindex;
}
IntegerEncodingTransform iet(this);
iet.doTransform();
+ ElementOpt eop(this);
+ eop.doTransform();
+
EncodingGraph eg(this);
eg.buildGraph();
eg.encode();
// }
// va_end(args);
// return createSet(set->getType(), members, newSize);
-//}
\ No newline at end of file
+//}