#include "mdd.h"
Go to the source code of this file.
Functions | |
mdd_t * | mdd_consensus (mdd_manager *mgr, mdd_t *fn, array_t *mvars) |
mdd_t* mdd_consensus | ( | mdd_manager * | mgr, | |
mdd_t * | fn, | |||
array_t * | mvars | |||
) |
Definition at line 19 of file mdd_consensus.c.
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 }