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_consensus(
00020 mdd_manager *mgr,
00021 mdd_t *fn,
00022 array_t *mvars)
00023 {
00024 array_t *bdd_vars;
00025 int i, j, mv_no, num;
00026 mvar_type mv;
00027 mdd_t *top;
00028 bdd_t *tmp;
00029 array_t *mvar_list = mdd_ret_mvar_list(mgr);
00030
00031 bdd_vars = array_alloc(bdd_t *, 0);
00032
00033
00034 if ( mvars == NIL( array_t ) ) {
00035 printf("\nWARNING: Empty Array of Consensus Variables\n");
00036 array_free(bdd_vars);
00037 return ( mdd_dup(fn) ) ;
00038 }
00039
00040 else if ( array_n(mvars) == 0) {
00041 printf("\nWARNING: Empty Array of Consensus Variables\n");
00042 array_free(bdd_vars);
00043 return ( mdd_dup(fn) ) ;
00044 }
00045
00046
00047 for (i=0; i<array_n(mvars); i++) {
00048 mv_no = array_fetch(int, mvars, i);
00049 mv = array_fetch(mvar_type, mvar_list, mv_no);
00050 if (mv.status == MDD_BUNDLED) {
00051 (void) fprintf(stderr,
00052 "\nmdd_consensus: bundled variable %s used\n",mv.name);
00053 fail("");
00054 }
00055
00056 for (j = 0; j < mv.encode_length; j ++) {
00057 tmp = bdd_get_variable(mgr, (unsigned int) mdd_ret_bvar_id(&mv, j) );
00058 array_insert_last(bdd_t *, bdd_vars, tmp);
00059 }
00060 }
00061 top = bdd_consensus(fn, bdd_vars);
00062 num = array_n(bdd_vars);
00063 for(i=0; i<num; i++){
00064 bdd_free(array_fetch(bdd_t *, bdd_vars, i));
00065 }
00066 array_free(bdd_vars);
00067 return top;
00068 }
00069
00070
00071
00072
00073
00074
00075