src/mdd/mdd_andsmoot.c File Reference

#include "mdd.h"
Include dependency graph for mdd_andsmoot.c:

Go to the source code of this file.

Functions

mdd_tmdd_and_smooth (mdd_manager *mgr, mdd_t *f, mdd_t *g, array_t *mvars)
mdd_tmdd_and_smooth_with_limit (mdd_manager *mgr, mdd_t *f, mdd_t *g, array_t *mvars, unsigned int limit)

Function Documentation

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 }


Generated on Tue Jan 12 13:57:25 2010 for glu-2.2 by  doxygen 1.6.1