CAMLprim value wrapper_bdd_load(value in) { CAMLparam1(in); CAMLlocal1(r); BDD x; if (bdd_load(stream_of_channel(in,"r"), &x) != 0) { caml_raise_constant(*caml_named_value("buddy_exn_IOError")); } _makebdd(&r, x); CAMLreturn(r); }
/* NAME {* bdd\_load *} EXTRA {* bdd\_fnload *} SECTION {* fileio *} SHORT {* loads a BDD from a file *} PROTO {* int bdd_fnload(char *fname, BDD *r) int bdd_load(FILE *ifile, BDD *r) *} DESCR {* Loads a BDD from a file into the BDD pointed to by {\tt r}. The file can either be the file {\tt ifile} which must be opened for reading or the file named {\tt fname} which will be opened automatically for reading. The input file format consists of integers arranged in the following manner. First the number of nodes $N$ used by the BDD and then the number of variables $V$ allocated and the variable ordering in use at the time the BDD was saved. If $N$ and $V$ are both zero then the BDD is either the constant true or false BDD, indicated by a $1$ or a $0$ as the next integer. In any other case the next $N$ sets of $4$ integers will describe the nodes used by the BDD. Each set consists of first the node number, then the variable number and then the low and high nodes. The nodes {\it must} be saved in a order such that any low or high node must be defined before it is mentioned. *} ALSO {* bdd\_save *} RETURN {* Zero on succes, otherwise an error code from {\tt bdd.h}. *} */ int bdd_fnload(char *fname, BDD *root) { FILE *ifile; int ok; if ((ifile=fopen(fname,"r")) == NULL) return bdd_error(BDD_FILE); ok = bdd_load(ifile, root); fclose(ifile); return ok; }
/* NAME {* bdd\_load *} EXTRA {* bdd\_fnload *} SECTION {* fileio *} SHORT {* loads a BDD from a file *} PROTO {* int bdd_fnload(char *fname, BDD *r) int bdd_load(FILE *ifile, BDD *r) *} DESCR {* Loads a BDD from a file into the BDD pointed to by {\tt r}. The file can either be the file {\tt ifile} which must be opened for reading or the file named {\tt fname} which will be opened automatically for reading. The input file format consists of integers arranged in the following manner. First the number of nodes $N$ used by the BDD and then the number of variables $V$ allocated and the variable ordering in use at the time the BDD was saved. If $N$ and $V$ are both zero then the BDD is either the constant true or false BDD, indicated by a $1$ or a $0$ as the next integer. In any other case the next $N$ sets of $4$ integers will describe the nodes used by the BDD. Each set consists of first the node number, then the variable number and then the low and high nodes. The nodes {\it must} be saved in a order such that any low or high node must be defined before it is mentioned. *} ALSO {* bdd\_save *} RETURN {* Zero on succes, otherwise an error code from {\tt bdd.h}. *} */ int bdd_fnload(char *fname, BDD *root) { FILE *ifile; int ok; BUDDY_PROLOGUE; ADD_ARG1(T_CHAR_PTR,fname); if ((ifile=fopen(fname,"r")) == NULL) { ADD_ARG1(T_BDD_LOAD,*root); RETURN(bdd_error(BDD_FILE)); } ok = bdd_load(ifile, root); ADD_ARG1(T_BDD_LOAD,*root); fclose(ifile); RETURN(ok); }