#include "mdd.h"
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) |
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 }