void bdd_markcount(int i, int *cou) { BddNode *node; if (i < 2) return; node = &bddnodes[i]; if (MARKEDp(node) || LOWp(node) == -1) return; SETMARKp(node); *cou += 1; bdd_markcount(LOWp(node), cou); bdd_markcount(HIGHp(node), cou); }
int bdd_save(FILE *ofile, BDD r) { int err, n=0; if (r < 2) { fprintf(ofile, "0 0 %d\n", r); return 0; } bdd_markcount(r, &n); bdd_unmark(r); fprintf(ofile, "%d %d\n", n, bddvarnum); for (n=0 ; n<bddvarnum ; n++) fprintf(ofile, "%d ", bddvar2level[n]); fprintf(ofile, "\n"); err = bdd_save_rec(ofile, r); bdd_unmark(r); return err; }