#include "mdd.h"
Go to the source code of this file.
Functions | |
mdd_t * | mdd_and_smooth (mdd_manager *mgr, mdd_t *f, mdd_t *g, array_t *mvars) |
mdd_t * | mdd_and_smooth_with_limit (mdd_manager *mgr, mdd_t *f, mdd_t *g, array_t *mvars, unsigned int limit) |
mdd_t* mdd_and_smooth | ( | mdd_manager * | mgr, | |
mdd_t * | f, | |||
mdd_t * | g, | |||
array_t * | mvars | |||
) |
Definition at line 19 of file mdd_andsmoot.c.
00024 { 00025 int i, j, mv_no; 00026 mvar_type mv; 00027 mdd_t *top; 00028 bdd_t *temp; 00029 00030 array_t *bdd_vars = array_alloc(bdd_t *, 0); 00031 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00032 00033 00034 if ( mvars == NIL( array_t ) || array_n(mvars) == 0) { 00035 printf("\nWARNING: Empty Array of Smoothing Variables\n"); 00036 array_free(bdd_vars); 00037 return ( bdd_and(f, g, 1, 1) ) ; 00038 } 00039 00040 for (i=0; i<array_n(mvars); i++) { 00041 mv_no = array_fetch(int, mvars, i); 00042 mv = array_fetch(mvar_type, mvar_list, mv_no); 00043 if (mv.status == MDD_BUNDLED) { 00044 (void) fprintf(stderr, 00045 "\nmdd_andsmooth: bundled variable %s used\n",mv.name); 00046 fail(""); 00047 } 00048 00049 for (j = 0; j < mv.encode_length; j++) { 00050 temp = bdd_get_variable(mgr, mdd_ret_bvar_id(&mv,j) ); 00051 array_insert_last(bdd_t *, bdd_vars, temp); 00052 } 00053 } 00054 00055 assert( array_n(bdd_vars) != 0 ); 00056 top = bdd_and_smooth(f, g, bdd_vars); 00057 00058 for (i = 0; i < array_n(bdd_vars); i++) { 00059 temp = array_fetch(bdd_t *, bdd_vars, i); 00060 bdd_free(temp); 00061 } 00062 array_free(bdd_vars); 00063 00064 return top; 00065 }
mdd_t* mdd_and_smooth_with_limit | ( | mdd_manager * | mgr, | |
mdd_t * | f, | |||
mdd_t * | g, | |||
array_t * | mvars, | |||
unsigned int | limit | |||
) |
Definition at line 69 of file mdd_andsmoot.c.
00075 { 00076 int i, j, mv_no; 00077 mvar_type mv; 00078 mdd_t *top; 00079 bdd_t *temp; 00080 00081 array_t *bdd_vars = array_alloc(bdd_t *, 0); 00082 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00083 00084 00085 if ( mvars == NIL( array_t ) ) { 00086 printf("\nWARNING: Empty Array of Smoothing Variables\n"); 00087 array_free(bdd_vars); 00088 return ( bdd_and_with_limit(f, g, 1, 1, limit) ) ; 00089 } 00090 else if ( array_n(mvars) == 0) { 00091 printf("\nWARNING: Empty Array of Smoothing Variables\n"); 00092 array_free(bdd_vars); 00093 return ( bdd_and_with_limit(f, g, 1, 1, limit) ) ; 00094 } 00095 00096 for (i=0; i<array_n(mvars); i++) { 00097 mv_no = array_fetch(int, mvars, i); 00098 mv = array_fetch(mvar_type, mvar_list, mv_no); 00099 if (mv.status == MDD_BUNDLED) { 00100 (void) fprintf(stderr, 00101 "\nmdd_andsmooth: bundled variable %s used\n",mv.name); 00102 fail(""); 00103 } 00104 00105 for (j = 0; j < mv.encode_length; j++) { 00106 temp = bdd_get_variable(mgr, mdd_ret_bvar_id(&mv,j) ); 00107 array_insert_last(bdd_t *, bdd_vars, temp); 00108 } 00109 } 00110 00111 assert( array_n(bdd_vars) != 0 ); 00112 top = bdd_and_smooth_with_limit(f, g, bdd_vars, limit); 00113 00114 for (i = 0; i < array_n(bdd_vars); i++) { 00115 temp = array_fetch(bdd_t *, bdd_vars, i); 00116 bdd_free(temp); 00117 } 00118 array_free(bdd_vars); 00119 00120 return top; 00121 }