src/mdd/mdd_bund.c File Reference

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

Go to the source code of this file.

Functions

int mdd_bundle_variables (mdd_manager *mgr, array_t *bundle_vars, char *mdd_var_name, int *mdd_id)

Function Documentation

int mdd_bundle_variables ( mdd_manager mgr,
array_t bundle_vars,
char *  mdd_var_name,
int *  mdd_id 
)

Definition at line 8 of file mdd_bund.c.

00013 {
00014         array_t *mvar_list, *bvar_list;
00015         mvar_type var_i, new_var;
00016         int i, var_i_id;
00017         bvar_type *bit_i_ptr;
00018         
00019         mvar_list = mdd_ret_mvar_list(mgr);
00020         bvar_list = mdd_ret_bvar_list(mgr);
00021 
00022         new_var.mvar_id = array_n(mvar_list);
00023         *mdd_id = new_var.mvar_id;
00024 
00025         new_var.name = ALLOC( char, MAX( (int) strlen(mdd_var_name),
00026                                          integer_get_num_of_digits(new_var.mvar_id) + 5 ) );
00027 
00028         if ( strcmp(mdd_var_name,"") != 0)  
00029                 strcpy(new_var.name, mdd_var_name);
00030         else {
00031                 strcpy(new_var.name,"");
00032                 sprintf(new_var.name,"mv_%d", new_var.mvar_id);
00033         };
00034 
00035         new_var.encode_length = array_n(bundle_vars);
00036         new_var.status = MDD_ACTIVE;
00037 
00038         new_var.encoding = ALLOC(int, new_var.encode_length);
00039         
00040         new_var.bvars = array_alloc(int, 0);
00041         new_var.values = 1;
00042 
00043         for(i=0; i<array_n(bundle_vars); i++){
00044                 var_i_id = array_fetch(int, bundle_vars, i);
00045                 var_i = array_fetch(mvar_type, mvar_list, var_i_id);
00046                 array_append(new_var.bvars, var_i.bvars);
00047                 new_var.values *= var_i.values;
00048                 if ( var_i.values != (int) pow(2.0, (double)var_i.encode_length) ) 
00049                         printf("WARNING: Variable %s has %d values which is not a power of 2 \nmdd_bundle_variables: Bundling is ambiguous \n",var_i.name, var_i.values);
00050                 var_i.status = MDD_BUNDLED;
00051         }
00052 
00053         array_insert_last( mvar_type, mvar_list, new_var);
00054 
00055         for(i=0; i< array_n(new_var.bvars); i++) {
00056                 bit_i_ptr = array_fetch_p( bvar_type, bvar_list, mdd_ret_bvar_id(&new_var, i) );
00057                 bit_i_ptr->mvar_id = new_var.mvar_id;
00058         }
00059 
00060         return TRUE;
00061 
00062 }


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