void bdd_unmark(int i) { BddNode *node; if (i < 2) return; node = &bddnodes[i]; if (!MARKEDp(node) || LOWp(node) == -1) return; UNMARKp(node); bdd_unmark(LOWp(node)); bdd_unmark(HIGHp(node)); }
void bdd_fprintdot(FILE* ofile, BDD r) { fprintf(ofile, "digraph G {\n"); fprintf(ofile, "0 [shape=box, label=\"0\", style=filled, shape=box, height=0.3, width=0.3];\n"); fprintf(ofile, "1 [shape=box, label=\"1\", style=filled, shape=box, height=0.3, width=0.3];\n"); bdd_fprintdot_rec(ofile, r); fprintf(ofile, "}\n"); bdd_unmark(r); }
extern int bdd_markwidth(int bdd, int var1, int var2) { int level; int seenTerminals[2]; int ret; seenTerminals[0] = 0; seenTerminals[1] = 0; level = bdd_var2level(var1); if(bdd_var2level(var2) > level) level = bdd_var2level(var2); ret = bdd_markwidth_rec(bdd, level, seenTerminals); bdd_unmark(bdd); return ret; }
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; }
extern void getShape( int bdd, int shape[] ) { bdd_markshape(bdd, shape); bdd_unmark(bdd); }