static int bdd_loaddata(FILE *ifile) { int key,var,low,high,root=0,n; for (n=0 ; n<lh_nodenum ; n++) { if (fscanf(ifile,"%d %d %d %d", &key, &var, &low, &high) != 4) return bdd_error(BDD_FORMAT); if (low >= 2) low = loadhash_get(low); if (high >= 2) high = loadhash_get(high); if (low<0 || high<0 || var<0) return bdd_error(BDD_FORMAT); root = bdd_addref( bdd_ite(bdd_ithvar(var), high, low) ); loadhash_add(key, root); } return root; }
/* ML type: bdd -> bdd -> bdd -> bdd */ EXTERNML value mlbdd_bdd_ite(value x, value y, value z) /* ML */ { return mlbdd_make(bdd_ite(Bdd_val(x), Bdd_val(y), Bdd_val(z))); }