void PDTNodeFree(PDTNode_p tree) { FunCode i; IntMapIter_p iter; ClausePos_p tmp; PDTNode_p subtree; iter = IntMapIterAlloc(tree->f_alternatives, 0, LONG_MAX); while((subtree = IntMapIterNext(iter, &i))) { assert(subtree); } IntMapIterFree(iter); for(i=1; i<=tree->max_var; i++) { subtree = PDArrayElementP(tree->v_alternatives, i); if(subtree) { PDTNodeFree(subtree); } } while(tree->entries) { tmp = PTreeExtractRootKey(&tree->entries); ClausePosCellFree(tmp); } pdtree_default_cell_free(tree); }
long ClauseSetUnfoldAllEqDefs(ClauseSet_p set, ClauseSet_p passive, ClauseSet_p archive, int min_arity, int eqdef_incrlimit) { ClausePos_p demod; long res = false; Clause_p start = NULL; while((demod = ClauseSetFindEqDefinition(set, min_arity, start))) { start = demod->clause->succ; if((TermStandardWeight(ClausePosGetOtherSide(demod))- TermStandardWeight(ClausePosGetSide(demod)))<=eqdef_incrlimit) { ClauseSetExtractEntry(demod->clause); ClauseSetUnfoldEqDef(set, demod); if(passive) { ClauseSetUnfoldEqDef(passive, demod); } if(BuildProofObject) { ClauseSetInsert(archive, demod->clause); } else { ClauseFree(demod->clause); } res++; } ClausePosCellFree(demod); } return res; }
static long delete_clause_entries(PTree_p *root, Clause_p clause) { long res = 0; PStack_p trav_stack; PStack_p store = PStackAlloc(); PTree_p handle; ClausePos_p pos; trav_stack = PTreeTraverseInit(*root); while((handle = PTreeTraverseNext(trav_stack))) { pos = handle->key; if(pos->clause == clause) { PStackPushP(store, pos); } } PTreeTraverseExit(trav_stack); while(!PStackEmpty(store)) { pos = PStackPopP(store); PTreeDeleteEntry(root, pos); ClausePosCellFree(pos); res++; } PStackFree(store); return res; }