cnf->maxsize=(uint)(((double)cnf->capacity)*LOAD_FACTOR);
cnf->enableMatching=true;
allocInlineDefVectorEdge(& cnf->constraints);
+ allocInlineDefVectorEdge(& cnf->args);
return cnf;
}
ourfree(n);
}
deleteVectorArrayEdge(& cnf->constraints);
+ deleteVectorArrayEdge(& cnf->args);
ourfree(cnf->node_array);
ourfree(cnf);
}
}
-CNFExpr* fillArgs(Edge e, bool isNeg, Edge * largestEdge, VectorEdge * args) {
- args.clear();
+CNFExpr* fillArgs(CNF *cnf, Edge e, bool isNeg, Edge * largestEdge) {
+ clearVectorEdge(&cnf->args);
*largestEdge = (void*) NULL;
CNFExpr* largest = NULL;
Node * narg = getNodePtrFromEdge(arg);
if (arg.isVar()) {
- args.push(arg);
+ pushVectorEdge(&cnf->args, arg);
continue;
}
* largestEdge = arg;
continue;
} else if (argExp->litSize > largest->litSize) {
- args.push(* largestEdge);
+ pushVectorEdge(&cnf->args, *largestEdge);
largest = argExp;
* largestEdge = arg;
continue;
}
}
}
- args.push(arg);
+ pushVectorEdge(&cnf->args, arg);
}
if (largest != NULL) {
CNFExpr * produceConjunction(CNF * cnf, Edge e) {
Edge largestEdge;
- CNFExpr* accum = fillArgs(e, false, largestEdge);
+
+ CNFExpr* accum = fillArgs(cnf, e, false, &largestEdge);
if (accum == NULL) accum = allocCNFExprBool(true);
- int i = _args.size();
+ int i = getSizeVectorEdge(&cnf->args);
while (i != 0) {
- Edge arg(_args[--i]);
+ Edge arg = getVectorEdge(&cnf->args, --i);
if (arg.isVar()) {
accum->conjoin(atomLit(arg));
} else {
CNFExpr* produceDisjunction(CNF *cnf, Edge e) {
Edge largestEdge;
- CNFExpr* accum = fillArgs(e, true, largestEdge);
+ CNFExpr* accum = fillArgs(cnf, e, true, &largestEdge);
if (accum == NULL)
accum = allocCNFExprBool(false);
if (accum->clauseSize() > CLAUSE_MAX)
accum = allocCNFExprLiteral(introProxy(cnf, largestEdge, accum, isNegEdge(largestEdge)));
- int i = _args.size();
+ int i = getSizeVectorEdge(&cnf->args);
while (i != 0) {
- Edge arg(_args[--i]);
+ Edge arg=getVectorEdge(&cnf->args, --i);
Node *narg=getNodePtrFromEdge(arg);
if (arg.isVar()) {
accum->disjoin(atomLit(arg));
Node ** node_array;
IncrementalSolver * solver;
VectorEdge constraints;
+ VectorEdge args;
};
typedef struct CNF CNF;
CNFExpr* produceDisjunction(CNF *cnf, Edge e);
bool propagate(CNF *cnf, CNFExpr * dest, CNFExpr * src, bool negate);
void saveCNF(CNF *cnf, CNFExpr* exp, Edge e, bool sign);
-CNFExpr* fillArgs(Edge e, bool isNeg, Edge * largestEdge, VectorEdge * args);
+CNFExpr* fillArgs(CNF * cnf, Edge e, bool isNeg, Edge * largestEdge);