#include "mdd.h"
Go to the source code of this file.
Functions | |
array_t * | mdd_substitute_array (mdd_manager *mgr, array_t *fn_array, array_t *old_mvars, array_t *new_mvars) |
mdd_t * | mdd_substitute (mdd_manager *mgr, mdd_t *fn, array_t *old_mvars, array_t *new_mvars) |
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 }