src/mdd/mdd_substit.c File Reference

#include "mdd.h"
Include dependency graph for mdd_substit.c:

Go to the source code of this file.

Functions

array_tmdd_substitute_array (mdd_manager *mgr, array_t *fn_array, array_t *old_mvars, array_t *new_mvars)
mdd_tmdd_substitute (mdd_manager *mgr, mdd_t *fn, array_t *old_mvars, array_t *new_mvars)

Function Documentation

mdd_t* mdd_substitute ( mdd_manager mgr,
mdd_t fn,
array_t old_mvars,
array_t new_mvars 
)

Definition at line 39 of file mdd_substit.c.

00044 {
00045     array_t             *old_bdd_vars, *new_bdd_vars;
00046     int                 i, j, old_mv_no, new_mv_no, no_mvar;
00047     mvar_type           old_mv, new_mv;
00048     mdd_t               *top;
00049     array_t             *mvar_list = mdd_ret_mvar_list(mgr);
00050     bdd_t               *varBdd;
00051 
00052     old_bdd_vars = array_alloc( bdd_t *, 0);
00053     new_bdd_vars = array_alloc( bdd_t *, 0);
00054 
00055     no_mvar = array_n(old_mvars);
00056     if (no_mvar != array_n(new_mvars)) 
00057         fail("mdd_substitute: arrays contains different no. of mvars.\n");
00058 
00059     for (i=0; i<no_mvar; i++) {
00060         old_mv_no = array_fetch(int, old_mvars, i);
00061         old_mv = array_fetch(mvar_type, mvar_list, old_mv_no);
00062         if (old_mv.status == MDD_BUNDLED) {
00063                 (void) fprintf(stderr, 
00064                    "\nmdd_substitute: bundled variable %s used\n",old_mv.name);
00065                 fail("");
00066         }
00067 
00068         new_mv_no = array_fetch(int, new_mvars, i);
00069         new_mv = array_fetch(mvar_type, mvar_list, new_mv_no);
00070         if (new_mv.status == MDD_BUNDLED) {
00071                 (void) fprintf(stderr, 
00072                    "\nmdd_substitute: bundled variable %s used\n",new_mv.name);
00073                 fail("");
00074         }
00075 
00076         if (old_mv.values != new_mv.values) 
00077             fail("mdd_substitute: mvars have different no. of values\n");
00078 
00079         for (j=0; j<old_mv.encode_length; j++) {        
00080             varBdd = bdd_get_variable( mgr, mdd_ret_bvar_id(&old_mv,j) );
00081             array_insert_last( bdd_t *, old_bdd_vars, varBdd );
00082 
00083             varBdd = bdd_get_variable( mgr, mdd_ret_bvar_id(&new_mv, j) );
00084             array_insert_last( bdd_t *, new_bdd_vars, varBdd);
00085         }
00086     }
00087     top = bdd_substitute(fn, old_bdd_vars, new_bdd_vars);
00088 
00089     for(j=0; j<array_n(old_bdd_vars); j++) {
00090         varBdd = array_fetch(bdd_t*,old_bdd_vars,j);
00091         bdd_free(varBdd);
00092     }
00093     array_free(old_bdd_vars);
00094     for(j=0; j<array_n(new_bdd_vars); j++) {
00095         varBdd = array_fetch(bdd_t*,new_bdd_vars,j);
00096         bdd_free(varBdd);
00097     }
00098     array_free(new_bdd_vars);
00099 
00100     return top;
00101 }

array_t* mdd_substitute_array ( mdd_manager mgr,
array_t fn_array,
array_t old_mvars,
array_t new_mvars 
)

Definition at line 19 of file mdd_substit.c.

00024 {
00025     array_t     *new_fn_array;
00026     mdd_t       *new_fn, *fn;
00027     int         i;
00028 
00029     new_fn_array = array_alloc(mdd_t *, 0);
00030     arrayForEachItem(mdd_t *, fn_array, i, fn) {
00031         new_fn = mdd_substitute(mgr, fn, old_mvars, new_mvars);
00032         array_insert(mdd_t *, new_fn_array, i, new_fn);
00033     }
00034 
00035     return(new_fn_array);
00036 }


Generated on Tue Jan 12 13:57:26 2010 for glu-2.2 by  doxygen 1.6.1