00001 #include "mdd.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 mdd_t *
00019 mdd_smooth(
00020 mdd_manager *mgr,
00021 mdd_t *fn,
00022 array_t *mvars)
00023 {
00024 array_t *bdd_vars;
00025 int i, j, mv_no;
00026 mvar_type mv;
00027 mdd_t *top;
00028 bdd_t *temp;
00029 array_t *mvar_list = mdd_ret_mvar_list(mgr);
00030
00031
00032 if ( mvars == NIL(array_t) ) {
00033 top = bdd_dup(fn);
00034 printf("\nWARNING: Empty Array of Smoothing Variables\n");
00035 return top;
00036 }
00037 else if ( array_n(mvars) == 0) {
00038 top = bdd_dup(fn);
00039 printf("\nWARNING: Empty Array of Smoothing Variables\n");
00040 return top;
00041 }
00042
00043
00044 bdd_vars = array_alloc(bdd_t *, 0);
00045 for (i=0; i<array_n(mvars); i++) {
00046 mv_no = array_fetch(int, mvars, i);
00047 mv = array_fetch(mvar_type, mvar_list, mv_no);
00048 if (mv.status == MDD_BUNDLED) {
00049 (void) fprintf(stderr,
00050 "\nmdd_smooth: bundled variable %s used\n",mv.name);
00051 fail("");
00052 }
00053
00054 for (j=0; j<mv.encode_length; j++) {
00055 temp = bdd_get_variable(mgr, mdd_ret_bvar_id(&mv,j) );
00056 array_insert_last(bdd_t *, bdd_vars, temp);
00057 }
00058 }
00059
00060 top = bdd_smooth(fn, bdd_vars);
00061
00062 for (i=0; i<array_n(bdd_vars); i++) {
00063 temp = array_fetch(bdd_t *, bdd_vars, i);
00064 bdd_free(temp);
00065 }
00066 array_free(bdd_vars);
00067
00068 return top;
00069 }
00070
00071
00072
00073
00074