#include <stdio.h>
#include <math.h>
#include "util.h"
#include "mdd.h"
Go to the source code of this file.
#define mddGetVarById | ( | mgr, | |||
id | ) | array_fetch(mvar_type, mdd_ret_mvar_list((mgr)),(id)) |
Definition at line 26 of file mdd_util.c.
void clear_all_marks | ( | mdd_manager * | mgr | ) |
Definition at line 182 of file mdd_util.c.
00183 { 00184 int i, j; 00185 mvar_type mv; 00186 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00187 00188 00189 for (i=0; i<array_n(mvar_list); i++) { 00190 mv = array_fetch(mvar_type, mvar_list, i); 00191 for (j=0; j<mv.encode_length; j++) 00192 mv.encoding[j] = 2; 00193 } 00194 }
mvar_type find_mvar | ( | mdd_manager * | mgr, | |
char * | name | |||
) |
Definition at line 249 of file mdd_util.c.
00250 { 00251 int i; 00252 mvar_type mv; 00253 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00254 00255 for (i=0; i<array_n(mvar_list); i++) { 00256 mv = array_fetch(mvar_type, mvar_list, i); 00257 if (strcmp(mv.name, name) == 0) return mv; 00258 } 00259 fail("find_mvar: cannot find name in mvar_list\n"); 00260 return mv; 00261 }
mvar_type find_mvar_id | ( | mdd_manager * | mgr, | |
unsigned short | id | |||
) |
Definition at line 165 of file mdd_util.c.
00166 { 00167 mvar_type mv; 00168 bvar_type bv; 00169 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00170 array_t *bvar_list = mdd_ret_bvar_list(mgr); 00171 00172 if (id >= array_n(bvar_list)) 00173 fail("find_mvar_id: invalid parameter range for id\n"); 00174 bv = array_fetch(bvar_type, bvar_list, id); 00175 if ((bv.mvar_id < 0) || (bv.mvar_id >= array_n(mvar_list))) 00176 fail("find_mvar_id: bvar contains invalid mvar_id\n"); 00177 mv = array_fetch(mvar_type, mvar_list, bv.mvar_id); 00178 return mv; 00179 }
int mdd_check_support | ( | mdd_manager * | mddMgr, | |
mdd_t * | mdd, | |||
array_t * | supportIdArray | |||
) |
Definition at line 1332 of file mdd_util.c.
01336 { 01337 int i, mddId; 01338 st_table *supportTable = st_init_table(st_numcmp, st_numhash); 01339 array_t *tmpIdArray; 01340 int allSupportFlag = 1; 01341 01342 for (i = 0; i < array_n(supportIdArray); i++) { 01343 mddId = array_fetch(int, supportIdArray, i); 01344 st_insert(supportTable, (char *)(long)mddId, NULL); 01345 } 01346 01347 tmpIdArray = mdd_get_support(mddMgr, mdd); 01348 for (i = 0; i < array_n(tmpIdArray); i++) { 01349 mddId = array_fetch(int, tmpIdArray, i); 01350 if (!st_lookup(supportTable, (char *)(long)mddId, NULL)) { 01351 allSupportFlag = 0; 01352 break; 01353 } 01354 } 01355 01356 st_free_table(supportTable); 01357 array_free(tmpIdArray); 01358 return(allSupportFlag); 01359 }
double mdd_count_onset | ( | mdd_manager * | mddMgr, | |
mdd_t * | aMdd, | |||
array_t * | mddIdArr | |||
) |
Definition at line 332 of file mdd_util.c.
00336 { 00337 bdd_t *onvalBdd, *aOnvalBdd, *onsetBdd, *tmpBdd; 00338 double onsetNum; 00339 array_t *bddVarArr; 00340 int i, arrSize, mddId; 00341 00342 arrSize = array_n( mddIdArr ); 00343 onvalBdd = bdd_one( mddMgr ); 00344 00345 for ( i = 0 ; i < arrSize ; i++ ) { 00346 mddId = array_fetch( int, mddIdArr, i ); 00347 aOnvalBdd = mddRetOnvalBdd( mddMgr, mddId ); 00348 00349 tmpBdd = bdd_and( onvalBdd, aOnvalBdd, 1, 1 ); 00350 bdd_free( onvalBdd ); 00351 bdd_free( aOnvalBdd ); 00352 onvalBdd = tmpBdd; 00353 } 00354 onsetBdd = bdd_and( onvalBdd, aMdd, 1, 1 ); 00355 bdd_free( onvalBdd ); 00356 00357 bddVarArr = mdd_id_array_to_bdd_array( mddMgr, mddIdArr ); 00358 onsetNum = bdd_count_onset( onsetBdd, bddVarArr ); 00359 bdd_free( onsetBdd ); 00360 mddFreeBddArr( bddVarArr ); 00361 return( onsetNum ); 00362 } /* mdd_count_onset */
mdd_t* mdd_cproject | ( | mdd_manager * | mgr, | |
mdd_t * | T, | |||
array_t * | mvars | |||
) |
Definition at line 558 of file mdd_util.c.
00562 { 00563 mdd_t *care_set, *new_T, *T_proj; 00564 array_t *bdd_vars; 00565 int i, j, mv_no; 00566 mvar_type mv; 00567 bdd_t *temp; 00568 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00569 00570 00571 care_set = mdd_get_care_set(mgr); 00572 new_T = bdd_and(T,care_set,1,1); 00573 bdd_free(care_set); 00574 00575 if ( mvars == NIL(array_t) ) { 00576 T_proj = bdd_dup(T); 00577 printf("\nWARNING: Empty Array of Smoothing Variables\n"); 00578 return T_proj; 00579 } 00580 else if ( array_n(mvars) == 0) { 00581 T_proj = bdd_dup(T); 00582 printf("\nWARNING: Empty Array of Smoothing Variables\n"); 00583 return T_proj; 00584 } 00585 00586 00587 bdd_vars = array_alloc(bdd_t*, 0); 00588 for (i=0; i<array_n(mvars); i++) { 00589 mv_no = array_fetch(int, mvars, i); 00590 mv = array_fetch(mvar_type, mvar_list, mv_no); 00591 if (mv.status == MDD_BUNDLED) { 00592 (void) fprintf(stderr, 00593 "\nmdd_smooth: bundled variable %s used\n",mv.name); 00594 fail(""); 00595 } 00596 00597 for (j = 0;j < mv.encode_length; j ++) { 00598 temp = bdd_get_variable(mgr, mdd_ret_bvar_id(&mv,j) ); 00599 array_insert_last(bdd_t *, bdd_vars, temp); 00600 } 00601 } 00602 00603 00604 T_proj = bdd_cproject(new_T,bdd_vars); 00605 bdd_free(new_T); 00606 00607 for (i=0; i<array_n(bdd_vars); i++) { 00608 temp = array_fetch(bdd_t *, bdd_vars, i); 00609 bdd_free(temp); 00610 } 00611 array_free(bdd_vars); 00612 00613 00614 return T_proj; 00615 }
int mdd_epd_count_onset | ( | mdd_manager * | mddMgr, | |
mdd_t * | aMdd, | |||
array_t * | mddIdArr, | |||
EpDouble * | epd | |||
) |
Definition at line 391 of file mdd_util.c.
00396 { 00397 bdd_t *onvalBdd, *aOnvalBdd, *onsetBdd, *tmpBdd; 00398 array_t *bddVarArr; 00399 int i, arrSize, mddId; 00400 int status; 00401 00402 arrSize = array_n( mddIdArr ); 00403 onvalBdd = bdd_one( mddMgr ); 00404 00405 for ( i = 0 ; i < arrSize ; i++ ) { 00406 mddId = array_fetch( int, mddIdArr, i ); 00407 aOnvalBdd = mddRetOnvalBdd( mddMgr, mddId ); 00408 00409 tmpBdd = bdd_and( onvalBdd, aOnvalBdd, 1, 1 ); 00410 bdd_free( onvalBdd ); 00411 bdd_free( aOnvalBdd ); 00412 onvalBdd = tmpBdd; 00413 } 00414 onsetBdd = bdd_and( onvalBdd, aMdd, 1, 1 ); 00415 bdd_free( onvalBdd ); 00416 00417 bddVarArr = mdd_id_array_to_bdd_array( mddMgr, mddIdArr ); 00418 status = bdd_epd_count_onset( onsetBdd, bddVarArr, epd ); 00419 if (status) 00420 return(status); 00421 bdd_free( onsetBdd ); 00422 mddFreeBddArr( bddVarArr ); 00423 return(0); 00424 } /* mdd_epd_count_onset */
Definition at line 1363 of file mdd_util.c.
01364 { 01365 mdd_t *tmpMdd1, *tmpMdd2; 01366 mdd_t *careSet; 01367 int i; 01368 boolean result; 01369 01370 if (mdd_equal(aSet, bSet)) 01371 return 1; 01372 01373 arrayForEachItem(mdd_t *, careSetArray, i, careSet) { 01374 tmpMdd1 = mdd_and(aSet, careSet, 1, 1); 01375 tmpMdd2 = mdd_and(bSet, careSet, 1, 1); 01376 01377 result = mdd_equal(tmpMdd1, tmpMdd2); 01378 mdd_free(tmpMdd1); 01379 mdd_free(tmpMdd2); 01380 if (result == 1) 01381 return 1; 01382 } 01383 01384 return 0; 01385 }
array_t* mdd_fn_array_to_bdd_fn_array | ( | mdd_manager * | mddManager, | |
int | mddId, | |||
array_t * | mddFnArray | |||
) |
Function********************************************************************
Synopsis [Given an Mvf representing the functionality of a multi-valued variable, it returns an array of Bdd's representing the characteristic function of the relation of the various bits of the multi-valued variable.]
Description [Suppose y is a k-valued variable and takes values 0,1,..,k-1. Then the input to this function is an array with k Mdds each representing the onset of the respective value of the variable (the ith Mdd representing the onset when y takes the value (i-1). Suppose m bits are needed to encode the k values of y. Then internally y is represented as y_0, y_1, ..., y_(m-1). Now the functionality of each bit of y can be computed by proper boolean operation on the functions representing the onsets of various values of y. For instance if y is a 4-valued variable. To achieve that we do the following: For each bit b{ relation = 0; For each value j of the variable{ Ej = Encoding function of the jth value Fj = Onset function of the jth value If (b appears in the positive phase in Ej) then relation += b * Fj else if (b appears in the negative phase in Ej) then relation += b'* Fj else if (b does not appear in Ej) then relation += Fj } } Note that the above algorithm does not handle the case when a bit appears in both phases in the encoding of any value of the variable. Hence the assumption behind the above algorithm is that the values are encoded as cubes. The case when the encoding are functions can be handled by more complex algorithm. In that case, we will not be able to build the relation for each bit separately. Something to be dealt with in the later work. ] SideEffects []
Definition at line 1139 of file mdd_util.c.
01143 { 01144 array_t *bddFunctionArray, *mddLiteralArray, *valueArray, *bddArray; 01145 mvar_type mddVar; 01146 int i, j, numValues, numEncodingBits; 01147 bdd_t *bdd, *bddFunction, *bddNot; 01148 bdd_t *onSet, *offSet, *dcSet, *lower, *upper; 01149 bdd_t *mddFn, *posCofactor, *negCofactor, *tmp; 01150 mdd_t *mddLiteral; 01151 array_t *mvar_list; 01152 01153 numValues = array_n(mddFnArray); 01154 /* simple binary case */ 01155 if (numValues == 2) { 01156 bddFunctionArray = array_alloc(bdd_t *, 0); 01157 mddFn = array_fetch(mdd_t *, mddFnArray, 1); 01158 bddFunction = mdd_dup(mddFn); 01159 array_insert_last(bdd_t *, bddFunctionArray, bddFunction); 01160 return bddFunctionArray; 01161 } 01162 mvar_list = mdd_ret_mvar_list(mddManager); 01163 mddVar = array_fetch(mvar_type, mvar_list, mddId); 01164 assert(mddVar.values == numValues); 01165 01166 /* 01167 * The following is to check whether each encoding is cube or not. 01168 * Since Berkeley MDD package always does the cube encoding this checking has 01169 * been turned off currently. 01170 */ 01171 01172 valueArray = array_alloc(int, 1); 01173 mddLiteralArray = array_alloc(mdd_t*, 0); 01174 for (i=0; i<numValues; i++){ 01175 array_insert(int, valueArray, 0, i); 01176 /* Form the Mdd corresponding to this value */ 01177 mddLiteral = mdd_literal(mddManager, mddId, valueArray); 01178 /* Check if this is a cube */ 01179 if (bdd_is_cube(mddLiteral) == FALSE) { 01180 fprintf(stderr, 01181 "The encoding of the variable %s for the value %d isnot a cube.\n", 01182 mddVar.name, i); 01183 fprintf(stderr, "It can result in wrong answers.\n"); 01184 } 01185 array_insert_last(mdd_t*, mddLiteralArray, mddLiteral); 01186 } 01187 array_free(valueArray); 01188 01189 bddFunctionArray = array_alloc(bdd_t*, 0); 01190 numEncodingBits = mddVar.encode_length; 01191 bddArray = mdd_id_to_bdd_array(mddManager, mddId); 01192 for (i=0; i<numEncodingBits; i++) { 01193 onSet = bdd_zero((bdd_manager *)mddManager); 01194 offSet = bdd_zero((bdd_manager *)mddManager); 01195 dcSet = bdd_zero((bdd_manager *)mddManager); 01196 bdd = array_fetch(bdd_t*, bddArray, i); 01197 bddNot = bdd_not(bdd); 01198 for (j=0; j<numValues; j++) { 01199 mddLiteral = array_fetch(mdd_t*, mddLiteralArray, j); 01200 posCofactor = bdd_cofactor(mddLiteral, bdd); 01201 mddFn = array_fetch(mdd_t*, mddFnArray, j); 01202 01203 if (bdd_is_tautology(posCofactor, 0)) { 01204 tmp = bdd_or(offSet, mddFn, 1, 1); 01205 bdd_free(offSet); 01206 offSet = tmp; 01207 bdd_free(posCofactor); 01208 continue; 01209 } 01210 01211 negCofactor = bdd_cofactor(mddLiteral, bddNot); 01212 if (bdd_is_tautology(negCofactor, 0)) { 01213 tmp = bdd_or(onSet, mddFn, 1, 1); 01214 bdd_free(onSet); 01215 onSet = tmp; 01216 bdd_free(posCofactor); 01217 bdd_free(negCofactor); 01218 continue; 01219 } 01220 01221 assert(bdd_equal(posCofactor, negCofactor)); 01222 bdd_free(posCofactor); 01223 bdd_free(negCofactor); 01224 01225 tmp = bdd_or(dcSet, mddFn, 1, 1); 01226 bdd_free(dcSet); 01227 dcSet = tmp; 01228 } 01229 bdd_free(bdd); 01230 bdd_free(bddNot); 01231 lower = bdd_and(onSet, offSet, 1, 0); 01232 bdd_free(offSet); 01233 upper = bdd_or(onSet, dcSet, 1, 1); 01234 bdd_free(onSet); 01235 bdd_free(dcSet); 01236 bddFunction = bdd_between(lower, upper); 01237 bdd_free(lower); 01238 bdd_free(upper); 01239 array_insert_last(bdd_t*, bddFunctionArray, bddFunction); 01240 } 01241 /* Free stuff */ 01242 mdd_array_free(mddLiteralArray); 01243 array_free(bddArray); 01244 return bddFunctionArray; 01245 }
array_t* mdd_fn_array_to_bdd_rel_array | ( | mdd_manager * | mddManager, | |
int | mddId, | |||
array_t * | mddFnArray | |||
) |
Function********************************************************************
Synopsis [Given an Mvf representing the functionality of a multi-valued variable, it returns an array of Bdd's representing the characteristic function of the relation of the various bits of the multi-valued variable.]
Description [Suppose y is a k-valued variable and takes values 0,1,..,k-1. Then the input to this function is an array with k Mdds each representing the onset of the respective value of the variable (the ith Mdd representing the onset when y takes the value (i-1). Suppose m bits are needed to encode the k values of y. Then internally y is represented as y_0, y_1, ..., y_(m-1). Now the functionality of each bit of y can be computed by proper boolean operation on the functions representing the onsets of various values of y. For instance if y is a 4-valued variable. To achieve that we do the following: For each bit b{ relation = 0; For each value j of the variable{ Ej = Encoding function of the jth value Fj = Onset function of the jth value If (b appears in the positive phase in Ej) then relation += b * Fj else if (b appears in the negative phase in Ej) then relation += b'* Fj else if (b does not appear in Ej) then relation += Fj } } Note that the above algorithm does not handle the case when a bit appears in both phases in the encoding of any value of the variable. Hence the assumption behind the above algorithm is that the values are encoded as cubes. The case when the encoding are functions can be handled by more complex algorithm. In that case, we will not be able to build the relation for each bit separately. Something to be dealt with in the later work. ] SideEffects []
Definition at line 997 of file mdd_util.c.
01001 { 01002 array_t *bddRelationArray, *mddLiteralArray, *valueArray, *bddArray; 01003 mvar_type mddVar; 01004 int i, j, numValues, numEncodingBits; 01005 bdd_t *bdd, *bddRelation, *bddNot; 01006 bdd_t *mddFn, *posCofactor, *negCofactor, *tmpBddRelation; 01007 mdd_t *mddLiteral, *literalRelation; 01008 array_t *mvar_list; 01009 01010 numValues = array_n(mddFnArray); 01011 /* simple binary case */ 01012 if (numValues == 2) { 01013 bdd_t *onRelation, *offRelation; 01014 01015 bddArray = mdd_id_to_bdd_array(mddManager, mddId); 01016 bdd = array_fetch(bdd_t *, bddArray, 0); 01017 array_free(bddArray); 01018 mddFn = array_fetch(mdd_t *, mddFnArray, 0); 01019 offRelation = bdd_and(bdd, mddFn, 0, 1); 01020 mddFn = array_fetch(mdd_t *, mddFnArray, 1); 01021 onRelation = bdd_and(bdd, mddFn, 1, 1); 01022 bdd_free(bdd); 01023 bddRelation = bdd_or(onRelation, offRelation, 1, 1); 01024 bdd_free(onRelation); 01025 bdd_free(offRelation); 01026 bddRelationArray = array_alloc(bdd_t *, 0); 01027 array_insert_last(bdd_t *, bddRelationArray, bddRelation); 01028 return bddRelationArray; 01029 } 01030 mvar_list = mdd_ret_mvar_list(mddManager); 01031 mddVar = array_fetch(mvar_type, mvar_list, mddId); 01032 assert(mddVar.values == numValues); 01033 01034 /* 01035 * The following is to check whether each encoding is cube or not. 01036 * Since Berkeley MDD package always does the cube encoding this checking has 01037 * been turned off currently. 01038 */ 01039 01040 valueArray = array_alloc(int, 1); 01041 mddLiteralArray = array_alloc(mdd_t*, 0); 01042 for (i=0; i<numValues; i++){ 01043 array_insert(int, valueArray, 0, i); 01044 /* Form the Mdd corresponding to this value */ 01045 mddLiteral = mdd_literal(mddManager, mddId, valueArray); 01046 /* Check if this is a cube */ 01047 if (bdd_is_cube(mddLiteral) == FALSE){ 01048 fprintf(stderr, 01049 "The encoding of the variable %s for the value %d isnot a cube.\n", 01050 mddVar.name, i); 01051 fprintf(stderr, "It can result in wrong answers.\n"); 01052 } 01053 array_insert_last(mdd_t*, mddLiteralArray, mddLiteral); 01054 } 01055 array_free(valueArray); 01056 01057 bddRelationArray = array_alloc(bdd_t*, 0); 01058 numEncodingBits = mddVar.encode_length; 01059 bddArray = mdd_id_to_bdd_array(mddManager, mddId); 01060 for (i=0; i<numEncodingBits; i++) { 01061 bddRelation = bdd_zero((bdd_manager *)mddManager); 01062 bdd = array_fetch(bdd_t*, bddArray, i); 01063 bddNot = bdd_not(bdd); 01064 for (j=0; j<numValues; j++){ 01065 mddLiteral = array_fetch(mdd_t*, mddLiteralArray, j); 01066 mddFn = array_fetch(mdd_t*, mddFnArray, j); 01067 posCofactor = bdd_cofactor(mddLiteral, bdd); 01068 if (bdd_is_tautology(posCofactor, 0)) { 01069 literalRelation = bdd_and(bddNot, mddFn, 1, 1); 01070 bdd_free(posCofactor); 01071 } else { 01072 negCofactor = bdd_cofactor(mddLiteral, bddNot); 01073 if (bdd_is_tautology(negCofactor, 0)) { 01074 literalRelation = bdd_and(bdd, mddFn, 1, 1); 01075 } else { 01076 assert(bdd_equal(posCofactor, negCofactor)); 01077 literalRelation = bdd_dup(mddFn); 01078 } 01079 bdd_free(posCofactor); 01080 bdd_free(negCofactor); 01081 } 01082 tmpBddRelation = bdd_or(bddRelation, literalRelation, 1, 1); 01083 bdd_free(literalRelation); 01084 bdd_free(bddRelation); 01085 bddRelation = tmpBddRelation; 01086 } 01087 array_insert_last(bdd_t*, bddRelationArray, bddRelation); 01088 bdd_free(bdd); 01089 bdd_free(bddNot); 01090 } 01091 /* Free stuff */ 01092 mdd_array_free(mddLiteralArray); 01093 array_free(bddArray); 01094 return bddRelationArray; 01095 }
static mdd_t* mdd_get_care_set | ( | mdd_manager * | mdd_mgr | ) | [static] |
Definition at line 509 of file mdd_util.c.
00510 { 00511 mdd_t *temp; 00512 mvar_type mv; 00513 mdd_manager *bdd_mgr; 00514 00515 int mvar_id,i,j,val_j,value; 00516 array_t *mvar_list; 00517 bdd_t *care_set, *care_val, *care_cube,*bit_j; 00518 00519 mvar_list = mdd_ret_mvar_list(mdd_mgr); 00520 bdd_mgr = mdd_mgr; 00521 00522 care_set = bdd_one(bdd_mgr); 00523 00524 for (mvar_id =0; mvar_id < array_n(mvar_list); mvar_id++) 00525 { 00526 mv = array_fetch(mvar_type, mvar_list, mvar_id); 00527 care_val = bdd_zero(bdd_mgr); 00528 00529 for (i=0; i< (mv.values); i++) 00530 { 00531 value = i; 00532 care_cube = bdd_one(bdd_mgr); 00533 for(j=0; j< mv.encode_length; j++ ) 00534 { 00535 bit_j = bdd_get_variable(bdd_mgr,mdd_ret_bvar_id(&mv, j)); 00536 val_j = value % 2; 00537 value = value/2; 00538 temp = care_cube; 00539 care_cube = bdd_and(temp,bit_j,1,val_j); 00540 bdd_free(temp); 00541 } 00542 temp = care_val; 00543 care_val = bdd_or(temp,care_cube,1,1); 00544 bdd_free(temp); 00545 bdd_free(care_cube); 00546 } 00547 temp = care_set; 00548 care_set = bdd_and(temp,care_val,1,1); 00549 bdd_free(care_val); 00550 bdd_free(temp); 00551 } 00552 return care_set; 00553 }
int mdd_get_number_of_bdd_support | ( | mdd_manager * | mddManager, | |
mdd_t * | f | |||
) |
Function********************************************************************
Synopsis [Returns the number of bdd support of a mdd.]
Description [Returns the number of bdd support of a mdd.]
SideEffects []
Definition at line 938 of file mdd_util.c.
00939 { 00940 array_t *bvar_list = mdd_ret_bvar_list(mddManager); 00941 var_set_t *vset; 00942 int i, number = 0; 00943 00944 vset = bdd_get_support(f); 00945 for (i = 0; i < array_n(bvar_list); i++) { 00946 if (var_set_get_elt(vset, i) == 1) { 00947 number++; 00948 } 00949 } 00950 00951 (void) var_set_free(vset); 00952 return number; 00953 }
int mdd_get_number_of_bdd_vars | ( | mdd_manager * | mddManager, | |
array_t * | mddIdArray | |||
) |
Function********************************************************************
Synopsis [Returns the number of bdd variables from mdd id array.]
Description [Returns the number of bdd variables from mdd id array.]
SideEffects []
Definition at line 912 of file mdd_util.c.
00913 { 00914 int i, n; 00915 00916 n = 0; 00917 for (i=0; i<array_n(mddIdArray); i++){ 00918 int mddId; 00919 array_t *tmpBddIdArray; 00920 mddId = array_fetch(int, mddIdArray, i); 00921 tmpBddIdArray = mdd_id_to_bdd_id_array(mddManager, mddId); 00922 n += array_n(tmpBddIdArray); 00923 array_free(tmpBddIdArray); 00924 } 00925 return n; 00926 }
mvar_type mdd_get_var_by_id | ( | mdd_manager * | mddMgr, | |
int | id | |||
) |
Definition at line 1324 of file mdd_util.c.
01325 { 01326 return(mddGetVarById(mddMgr, id)); 01327 }
array_t* mdd_id_array_to_bdd_array | ( | mdd_manager * | mddManager, | |
array_t * | mddIdArray | |||
) |
Function********************************************************************
Synopsis [Returns an array of binary vars(bdd_t *) for a given mdd id array.]
Description []
SideEffects []
Definition at line 803 of file mdd_util.c.
00804 { 00805 array_t *bddArray; 00806 int i, j; 00807 int id, size; 00808 mvar_type mddVar; 00809 00810 bddArray = array_alloc(bdd_t*, 0); 00811 size = array_n(mddIdArray); 00812 00813 for (i = 0; i < size; i++) { 00814 id = array_fetch(int, mddIdArray, i); 00815 mddVar = mddGetVarById(mddManager, id); 00816 for (j = 0; j < mddVar.encode_length; j++) { 00817 id = mdd_ret_bvar_id(&mddVar, j); 00818 array_insert_last(bdd_t *, bddArray, bdd_get_variable(mddManager, id)); 00819 } 00820 } 00821 return bddArray; 00822 }
mdd_t* mdd_id_array_to_bdd_cube | ( | mdd_manager * | mddManager, | |
array_t * | mddIdArray | |||
) |
Function********************************************************************
Synopsis [Returns a bdd cube from a given mdd id array.]
Description []
SideEffects []
Definition at line 865 of file mdd_util.c.
00866 { 00867 int i, j; 00868 int id, size; 00869 mvar_type mddVar; 00870 mdd_t *cube, *var, *tmp; 00871 int nVars; 00872 char *vars; 00873 00874 size = array_n(mddIdArray); 00875 nVars = bdd_num_vars(mddManager); 00876 vars = ALLOC(char, sizeof(char) * nVars); 00877 memset(vars, 0, sizeof(char) * nVars); 00878 00879 for (i = 0; i < size; i++) { 00880 id = array_fetch(int, mddIdArray, i); 00881 mddVar = mddGetVarById(mddManager, id); 00882 for (j = 0; j < mddVar.encode_length; j++) { 00883 id = mdd_ret_bvar_id(&mddVar, j); 00884 vars[bdd_get_level_from_id(mddManager, id)] = 1; 00885 } 00886 } 00887 cube = mdd_one(mddManager); 00888 for (i = nVars - 1; i >= 0; i--) { 00889 if (vars[i] == 0) 00890 continue; 00891 id = (int)bdd_get_id_from_level(mddManager, (long)i); 00892 var = bdd_get_variable(mddManager, id); 00893 tmp = mdd_and(cube, var, 1, 1); 00894 mdd_free(cube); 00895 mdd_free(var); 00896 cube = tmp; 00897 } 00898 FREE(vars); 00899 return cube; 00900 }
array_t* mdd_id_array_to_bdd_id_array | ( | mdd_manager * | mddManager, | |
array_t * | mddIdArray | |||
) |
Function********************************************************************
Synopsis [Returns an array of bddId's corresponding to an array of Mdd ids.]
Description [This function takes an array of MddId's. For each MddId it returns an array of bddId's corresponding to the bits. These arrays of bddId's are concatenated together and returned.]
SideEffects []
Definition at line 837 of file mdd_util.c.
00838 { 00839 array_t *bddIdArray; 00840 int i; 00841 00842 bddIdArray = array_alloc(int, 0); 00843 for (i=0; i<array_n(mddIdArray); i++){ 00844 int mddId; 00845 array_t *tmpBddIdArray; 00846 mddId = array_fetch(int, mddIdArray, i); 00847 tmpBddIdArray = mdd_id_to_bdd_id_array(mddManager, mddId); 00848 array_append(bddIdArray, tmpBddIdArray); 00849 array_free(tmpBddIdArray); 00850 } 00851 return bddIdArray; 00852 }
array_t* mdd_id_to_bdd_array | ( | mdd_manager * | mddManager, | |
int | mddId | |||
) |
Function********************************************************************
Synopsis [Returns an array of Bdd_t's corresponding to a Mdd variable.]
Description [This function takes an MddId. It returns an array of bdd_t's corresponding to the bits.]
SideEffects []
Definition at line 775 of file mdd_util.c.
00776 { 00777 array_t *bddArray; 00778 mvar_type mddVar; 00779 int i, id; 00780 00781 mddVar = mddGetVarById(mddManager, mddId); 00782 bddArray = array_alloc(bdd_t*, mddVar.encode_length); 00783 00784 for (i = 0; i < mddVar.encode_length; i++) { 00785 id = mdd_ret_bvar_id(&mddVar, i); 00786 array_insert_last(bdd_t*, bddArray, bdd_get_variable(mddManager, id)); 00787 } 00788 return bddArray; 00789 }
array_t* mdd_id_to_bdd_id_array | ( | mdd_manager * | mddManager, | |
int | mddId | |||
) |
Function********************************************************************
Synopsis [Returns an array of BDD ids corresponding to a MDD variable.]
Description [This function takes an MddId. It returns an array of BDD ids corresponding to the bits.]
SideEffects []
Definition at line 746 of file mdd_util.c.
00747 { 00748 array_t *bddIdArray; 00749 mvar_type mddVar; 00750 array_t *mvar_list; 00751 int i, j; 00752 00753 mvar_list = mdd_ret_mvar_list(mddManager); 00754 mddVar = array_fetch(mvar_type, mvar_list, mddId); 00755 bddIdArray = array_alloc(int, mddVar.encode_length); 00756 00757 for (i=0; i<mddVar.encode_length; i++){ 00758 j = mdd_ret_bvar_id(&mddVar, i); 00759 array_insert_last(int, bddIdArray, j); 00760 } 00761 return bddIdArray; 00762 }
boolean mdd_lequal_mod_care_set_array | ( | mdd_t * | aSet, | |
mdd_t * | bSet, | |||
boolean | aPhase, | |||
boolean | bPhase, | |||
array_t * | careSetArray | |||
) |
Definition at line 1389 of file mdd_util.c.
01392 { 01393 mdd_t *tmpMdd, *careSet; 01394 int i, result; 01395 01396 if (mdd_lequal(aSet, bSet, aPhase, bPhase)) 01397 return 1; 01398 01399 arrayForEachItem(mdd_t *, careSetArray, i, careSet) { 01400 tmpMdd = mdd_and(aSet, careSet, aPhase, 1); 01401 01402 result = mdd_lequal(tmpMdd, bSet, 1, bPhase); 01403 mdd_free(tmpMdd); 01404 if (result == 1) 01405 return 1; 01406 } 01407 01408 return 0; 01409 }
void mdd_mark | ( | mdd_manager * | mgr, | |
bdd_t * | top, | |||
int | phase | |||
) |
top | ** was bdd_node *bnode; --- changed by Serdar ** |
Definition at line 197 of file mdd_util.c.
00201 { 00202 int i, top_id, found = 0; 00203 int bit_position = 0; /* initialize for lint */ 00204 mvar_type mv; 00205 00206 top_id = bdd_top_var_id(top); 00207 mv = find_mvar_id(mgr, top_id); 00208 00209 for (i=0; i<(mv.encode_length); i++){ 00210 if ( mdd_ret_bvar_id( &mv, i) == top_id ){ 00211 bit_position = i; 00212 found = 1; 00213 break; 00214 }; 00215 }; 00216 00217 00218 if (found == 0) 00219 fail("mdd_mark: interleaving error\n"); 00220 00221 mv.encoding[bit_position] = phase; 00222 00223 }
mdd_t* mdd_onset_bdd | ( | mdd_manager * | mddMgr, | |
mdd_t * | aMdd, | |||
array_t * | mddIdArr | |||
) |
Definition at line 365 of file mdd_util.c.
00369 { 00370 bdd_t *onvalBdd, *aOnvalBdd, *onsetBdd, *tmpBdd; 00371 int i, arrSize, mddId; 00372 00373 arrSize = array_n( mddIdArr ); 00374 onvalBdd = bdd_one( mddMgr ); 00375 00376 for ( i = 0 ; i < arrSize ; i++ ) { 00377 mddId = array_fetch( int, mddIdArr, i ); 00378 aOnvalBdd = mddRetOnvalBdd( mddMgr, mddId ); 00379 00380 tmpBdd = bdd_and( onvalBdd, aOnvalBdd, 1, 1 ); 00381 bdd_free( onvalBdd ); 00382 bdd_free( aOnvalBdd ); 00383 onvalBdd = tmpBdd; 00384 } 00385 onsetBdd = bdd_and( onvalBdd, aMdd, 1, 1 ); 00386 bdd_free( onvalBdd ); 00387 return( onsetBdd ); 00388 } /* mdd_onset_bdd */
array_t* mdd_pick_arbitrary_minterms | ( | mdd_manager * | mddMgr, | |
mdd_t * | aMdd, | |||
array_t * | mddIdArr, | |||
int | n | |||
) |
Definition at line 1249 of file mdd_util.c.
01254 { 01255 bdd_t *onvalBdd, *aOnvalBdd, *onsetBdd, *tmpBdd; 01256 array_t *bddVarArr; 01257 int i, arrSize, mddId; 01258 array_t *mintermArray; 01259 01260 arrSize = array_n( mddIdArr ); 01261 onvalBdd = bdd_one( mddMgr ); 01262 01263 for ( i = 0 ; i < arrSize ; i++ ) { 01264 mddId = array_fetch( int, mddIdArr, i ); 01265 aOnvalBdd = mddRetOnvalBdd( mddMgr, mddId ); 01266 01267 tmpBdd = bdd_and( onvalBdd, aOnvalBdd, 1, 1 ); 01268 bdd_free( onvalBdd ); 01269 bdd_free( aOnvalBdd ); 01270 onvalBdd = tmpBdd; 01271 } 01272 onsetBdd = bdd_and( onvalBdd, aMdd, 1, 1 ); 01273 bdd_free( onvalBdd ); 01274 01275 bddVarArr = mdd_id_array_to_bdd_array(mddMgr, mddIdArr); 01276 mintermArray = bdd_bdd_pick_arbitrary_minterms(onsetBdd, bddVarArr, 01277 array_n(bddVarArr), n); 01278 bdd_free(onsetBdd); 01279 mddFreeBddArr(bddVarArr); 01280 return(mintermArray); 01281 }
void mdd_print_support | ( | mdd_t * | f | ) |
Definition at line 618 of file mdd_util.c.
00619 { 00620 mdd_manager *mgr = bdd_get_manager(f); 00621 array_t *support_list = mdd_get_support(mgr, f); 00622 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00623 int nSupports = array_n(support_list); 00624 int i, j; 00625 mvar_type mv; 00626 int id; 00627 00628 for (i = 0; i < nSupports; i++) { 00629 id = array_fetch(int, support_list, i); 00630 mv = array_fetch(mvar_type, mvar_list, id); 00631 if (id == mv.mvar_id) 00632 printf("[%d] = %s\n", i, mv.name); 00633 else { /* needs to be checked */ 00634 for (j = 0; j < array_n(mvar_list); j++) { 00635 mv = array_fetch(mvar_type, mvar_list, j); 00636 if (id == mv.mvar_id) { 00637 printf(" [%d] = %s\n", i, mv.name); 00638 break; 00639 } 00640 } 00641 } 00642 } 00643 00644 array_free(support_list); 00645 }
void mdd_print_support_to_file | ( | FILE * | fout, | |
char * | format, | |||
mdd_t * | f | |||
) |
Definition at line 648 of file mdd_util.c.
00649 { 00650 mdd_manager *mgr = bdd_get_manager(f); 00651 array_t *support_list = mdd_get_support(mgr, f); 00652 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00653 int nSupports = array_n(support_list); 00654 int i, j; 00655 mvar_type mv; 00656 int id; 00657 00658 for (i = 0; i < nSupports; i++) { 00659 id = array_fetch(int, support_list, i); 00660 mv = array_fetch(mvar_type, mvar_list, id); 00661 if (id == mv.mvar_id) 00662 fprintf(fout, format, mv.name); 00663 else { /* needs to be checked */ 00664 for (j = 0; j < array_n(mvar_list); j++) { 00665 mv = array_fetch(mvar_type, mvar_list, j); 00666 if (id == mv.mvar_id) { 00667 fprintf(fout, format, mv.name); 00668 break; 00669 } 00670 } 00671 } 00672 } 00673 00674 array_free(support_list); 00675 }
mdd_t* mdd_range_mdd | ( | mdd_manager * | mgr, | |
array_t * | support | |||
) |
Definition at line 1415 of file mdd_util.c.
01419 { 01420 int var, varIndex; /* iterates over support */ 01421 mdd_t *range; 01422 01423 range = mdd_one(mgr); 01424 arrayForEachItem(int, support, varIndex, var){ 01425 mdd_t *rangeForVar; 01426 mdd_t *tmp; 01427 01428 rangeForVar = mddRetOnvalBdd(mgr, var); 01429 tmp = mdd_and( rangeForVar, range, 1, 1); 01430 mdd_free(rangeForVar); 01431 mdd_free(range); 01432 range = tmp; 01433 } 01434 01435 return range; 01436 }
int mdd_read_mdd_id | ( | mdd_t * | f | ) |
Definition at line 716 of file mdd_util.c.
00717 { 00718 mdd_manager *mgr; 00719 array_t *support_list; 00720 int id; 00721 00722 if (bdd_size(f) != 2) { 00723 fprintf(stderr, 00724 "** mdd error: mdd_read_mdd_id can be called for a variable\n"); 00725 return(0); 00726 } 00727 00728 mgr = bdd_get_manager(f); 00729 support_list = mdd_get_support(mgr, f); 00730 id = array_fetch(int, support_list, 0); 00731 array_free(support_list); 00732 return(id); 00733 }
char* mdd_read_var_name | ( | mdd_t * | f | ) |
Definition at line 678 of file mdd_util.c.
00679 { 00680 mdd_manager *mgr; 00681 array_t *support_list; 00682 array_t *mvar_list; 00683 int i, id; 00684 mvar_type mv; 00685 00686 if (bdd_size(f) != 2) { 00687 fprintf(stderr, 00688 "** mdd error: mdd_read_var_name can be called for a variable\n"); 00689 return(NIL(char)); 00690 } 00691 00692 mgr = bdd_get_manager(f); 00693 support_list = mdd_get_support(mgr, f); 00694 mvar_list = mdd_ret_mvar_list(mgr); 00695 00696 id = array_fetch(int, support_list, 0); 00697 mv = array_fetch(mvar_type, mvar_list, id); 00698 if (id == mv.mvar_id) { 00699 array_free(support_list); 00700 return(mv.name); 00701 } else { /* needs to be checked */ 00702 for (i = 0; i < array_n(mvar_list); i++) { 00703 mv = array_fetch(mvar_type, mvar_list, i); 00704 if (id == mv.mvar_id) { 00705 array_free(support_list); 00706 return(mv.name); 00707 } 00708 } 00709 } 00710 00711 array_free(support_list); 00712 return(NIL(char)); 00713 }
Definition at line 316 of file mdd_util.c.
00317 { 00318 int bvar_id; 00319 00320 bvar_id = array_fetch(int, mvar_ptr->bvars, i); 00321 00322 return array_fetch(bvar_type, bvar_list, bvar_id); 00323 }
int mdd_ret_bvar_id | ( | mvar_type * | mvar_ptr, | |
int | i | |||
) |
Definition at line 309 of file mdd_util.c.
00310 { 00311 00312 return ( array_fetch(int, mvar_ptr->bvars, i) ); 00313 }
array_t* mdd_ret_bvar_list | ( | mdd_manager * | mgr | ) |
Definition at line 286 of file mdd_util.c.
00287 { 00288 bdd_external_hooks *hook; 00289 array_t *bvar_list; 00290 00291 hook = bdd_get_external_hooks(mgr); 00292 bvar_list = ((mdd_hook_type *)(hook->mdd))->bvar_list; 00293 00294 return bvar_list; 00295 }
Definition at line 501 of file mdd_util.c.
00502 { 00503 return mvar_ptr->bvars; 00504 }
array_t* mdd_ret_mvar_list | ( | mdd_manager * | mgr | ) |
Definition at line 264 of file mdd_util.c.
00265 { 00266 bdd_external_hooks *hook; 00267 array_t *mvar_list; 00268 00269 hook = bdd_get_external_hooks(mgr); 00270 mvar_list = ((mdd_hook_type *)(hook->mdd))->mvar_list; 00271 00272 return mvar_list; 00273 }
void mdd_set_bvar_list | ( | mdd_manager * | mgr, | |
array_t * | bvar_list | |||
) |
Definition at line 299 of file mdd_util.c.
00300 { 00301 bdd_external_hooks *hook; 00302 00303 hook = bdd_get_external_hooks(mgr); 00304 ((mdd_hook_type *)(hook->mdd))->bvar_list = bvar_list; 00305 }
void mdd_set_mvar_list | ( | mdd_manager * | mgr, | |
array_t * | mvar_list | |||
) |
Definition at line 276 of file mdd_util.c.
00277 { 00278 bdd_external_hooks *hook; 00279 00280 hook = bdd_get_external_hooks(mgr); 00281 ((mdd_hook_type *)(hook->mdd))->mvar_list = mvar_list; 00282 }
mdd_t* mdd_subset_with_mask_vars | ( | mdd_manager * | mddMgr, | |
mdd_t * | aMdd, | |||
array_t * | mddIdArr, | |||
array_t * | maskIdArr | |||
) |
Definition at line 1285 of file mdd_util.c.
01290 { 01291 bdd_t *onvalBdd, *aOnvalBdd, *onsetBdd, *tmpBdd; 01292 array_t *bddVarArr, *maskVarArr; 01293 int i, arrSize, mddId; 01294 mdd_t *subset; 01295 01296 arrSize = array_n( mddIdArr ); 01297 onvalBdd = bdd_one( mddMgr ); 01298 01299 for ( i = 0 ; i < arrSize ; i++ ) { 01300 mddId = array_fetch( int, mddIdArr, i ); 01301 aOnvalBdd = mddRetOnvalBdd( mddMgr, mddId ); 01302 01303 tmpBdd = bdd_and( onvalBdd, aOnvalBdd, 1, 1 ); 01304 bdd_free( onvalBdd ); 01305 bdd_free( aOnvalBdd ); 01306 onvalBdd = tmpBdd; 01307 } 01308 onsetBdd = bdd_and( onvalBdd, aMdd, 1, 1 ); 01309 bdd_free( onvalBdd ); 01310 01311 bddVarArr = mdd_id_array_to_bdd_array(mddMgr, mddIdArr); 01312 maskVarArr = mdd_id_array_to_bdd_array(mddMgr, maskIdArr); 01313 01314 subset = bdd_subset_with_mask_vars(onsetBdd, bddVarArr, maskVarArr); 01315 bdd_free(onsetBdd); 01316 mddFreeBddArr(bddVarArr); 01317 mddFreeBddArr(maskVarArr); 01318 return(subset); 01319 }
void mdd_unmark | ( | mdd_manager * | mgr, | |
bdd_t * | top | |||
) |
Definition at line 226 of file mdd_util.c.
00227 { 00228 int i, top_id, found = 0; 00229 int bit_position = 0; /* initialize for lint */ 00230 mvar_type mv; 00231 00232 00233 top_id = bdd_top_var_id(top); 00234 mv = find_mvar_id(mgr, top_id); 00235 00236 for (i=0; i<mv.encode_length; i++) 00237 if ( mdd_ret_bvar_id( &mv, i) == top_id ){ 00238 bit_position = i; 00239 found = 1; 00240 break; 00241 }; 00242 00243 if (found == 0) 00244 fail("mdd_unmark: interleaving error\n"); 00245 mv.encoding[bit_position] = 2; 00246 }
static void mddFreeBddArr | ( | array_t * | bddArr | ) | [static] |
Definition at line 490 of file mdd_util.c.
00491 { 00492 int i, arrSize; 00493 00494 arrSize = array_n( bddArr ); 00495 for ( i = 0 ; i < arrSize ; i++ ) 00496 bdd_free( array_fetch( bdd_t *, bddArr, i ) ); 00497 array_free( bddArr ); 00498 } /* mddFreeBddArr */
static bdd_t * mddIntRetOnvalBdd | ( | mdd_manager * | mddMgr, | |
int | valNum, | |||
int | low, | |||
int | hi, | |||
int | level, | |||
array_t * | bddVarArr | |||
) | [static] |
Definition at line 454 of file mdd_util.c.
00461 { 00462 int mid; 00463 bdd_t *curVar, *recBdd; 00464 bdd_t *onvalBdd = NIL(bdd_t); /* initialized for lint */ 00465 00466 mid = (low + hi) / 2; 00467 curVar = array_fetch( bdd_t *, bddVarArr, level ); 00468 00469 if ( valNum > mid ) { 00470 recBdd = mddIntRetOnvalBdd( mddMgr, valNum, mid, hi, 00471 level+1, bddVarArr ); 00472 onvalBdd = bdd_or( recBdd, curVar, 1, 0 ); 00473 bdd_free( recBdd ); 00474 } 00475 else if ( valNum < mid ) { 00476 recBdd = mddIntRetOnvalBdd( mddMgr, valNum, low, mid, 00477 level+1, bddVarArr ); 00478 onvalBdd = bdd_and( recBdd, curVar, 1, 0 ); 00479 bdd_free( recBdd ); 00480 } 00481 else if ( valNum == mid ) 00482 onvalBdd = bdd_not( curVar ); 00483 return( onvalBdd ); 00484 } /* mddIntRetOnvalBdd */
static bdd_t * mddRetOnvalBdd | ( | mdd_manager * | mddMgr, | |
int | mddId | |||
) | [static] |
Definition at line 428 of file mdd_util.c.
00431 { 00432 bdd_t *onvalBdd; 00433 mvar_type mVar; 00434 int valNum, high; 00435 array_t *bddVarArr; 00436 00437 mVar = mddGetVarById( mddMgr, mddId ); 00438 valNum = mVar.values; 00439 high = (int) pow( (double) 2, (double) mVar.encode_length ); 00440 assert( (valNum == 1) || ( (valNum <= high) && (valNum > high/2) )); 00441 if ( valNum == high ) 00442 onvalBdd = bdd_one( mddMgr ); 00443 else { 00444 bddVarArr = mdd_id_to_bdd_array( mddMgr, mddId ); 00445 onvalBdd = mddIntRetOnvalBdd( mddMgr, valNum, 0, high, 00446 0, bddVarArr ); 00447 mddFreeBddArr( bddVarArr ); 00448 } 00449 return( onvalBdd ); 00450 } /* mddRetOnvalBdd */
int no_bit_encode | ( | int | n | ) |
Definition at line 44 of file mdd_util.c.
void print_bdd | ( | bdd_manager * | mgr, | |
bdd_t * | top | |||
) |
Definition at line 124 of file mdd_util.c.
00125 { 00126 00127 int is_complemented; 00128 bdd_t *child, *top_uncomp; 00129 00130 if (bdd_is_tautology(top,1)) { 00131 (void) printf("ONE "); 00132 return; 00133 } 00134 if (bdd_is_tautology(top,0)) { 00135 (void) printf("ZERO "); 00136 return; 00137 } 00138 (void)bdd_get_node(top, &is_complemented); 00139 if (is_complemented != 0) (void) printf("!"); 00140 (void) printf("%d ", bdd_top_var_id(top)); 00141 (void) printf("v "); 00142 (void) printf("< "); 00143 00144 if (is_complemented) top_uncomp = bdd_not(top); 00145 else top_uncomp = mdd_dup(top); 00146 00147 child = bdd_then(top); 00148 00149 print_bdd(mgr, child); 00150 (void) printf("> "); 00151 00152 mdd_free(child); 00153 child = bdd_else(top); 00154 00155 print_bdd(mgr, child); 00156 (void) printf("^ "); 00157 00158 mdd_free(top_uncomp); 00159 mdd_free(child); 00160 00161 return; 00162 }
void print_bdd_list_id | ( | array_t * | bdd_list | ) |
Definition at line 91 of file mdd_util.c.
00092 { 00093 bdd_t *b; 00094 int i, is_complemented; 00095 00096 (void) printf("bdd_list id's: "); 00097 for (i=0; i<array_n(bdd_list); i++) { 00098 b = array_fetch(bdd_t *, bdd_list, i); 00099 (void)bdd_get_node(b, &is_complemented); 00100 if (is_complemented) (void) printf("!"); 00101 (void) printf("%d ", bdd_top_var_id(b)); 00102 } 00103 (void) printf("\n"); 00104 }
void print_bvar_list_id | ( | mdd_manager * | mgr | ) |
Definition at line 107 of file mdd_util.c.
00108 { 00109 bvar_type bv; 00110 int i, is_complemented; 00111 array_t *bvar_list = mdd_ret_bvar_list(mgr); 00112 00113 (void) printf("bvar_list id's: "); 00114 for (i=0; i<array_n(bvar_list); i++) { 00115 bv = array_fetch(bvar_type, bvar_list, i); 00116 (void)bdd_get_node(bv.node,&is_complemented); 00117 if (is_complemented) (void) printf("!"); 00118 (void) printf("%d ", bdd_top_var_id(bv.node)); 00119 } 00120 (void) printf("\n"); 00121 }
void print_mvar_list | ( | mdd_manager * | mgr | ) |
Definition at line 59 of file mdd_util.c.
00060 { 00061 mvar_type mv; 00062 int i; 00063 int no_mvar; 00064 array_t *mvar_list = mdd_ret_mvar_list(mgr); 00065 00066 no_mvar = array_n(mvar_list); 00067 printf("print_mvar_list:\n"); 00068 printf("id\tname\tvalues\tbits\tstride\tstart_vertex\n"); 00069 for (i=0; i<no_mvar; i++) { 00070 mv = array_fetch(mvar_type, mvar_list, i); 00071 (void) printf("%d\t%s\t%d\t%d\n", 00072 mv.mvar_id, mv.name, mv.values, 00073 mv.encode_length); 00074 } 00075 }
void print_strides | ( | array_t * | mvar_strides | ) |
Definition at line 78 of file mdd_util.c.
00079 { 00080 int i, s; 00081 00082 (void) printf("mvar_strides: "); 00083 for (i=0; i<array_n(mvar_strides); i++) { 00084 s = array_fetch(int, mvar_strides, i); 00085 (void) printf("%d ", s); 00086 } 00087 (void) printf("\n"); 00088 }
int toggle | ( | int | x | ) |
Definition at line 31 of file mdd_util.c.
00032 { 00033 if (x == 0) return 1; 00034 else { 00035 if (x == 1) return 0; 00036 else { 00037 fail("toggle: invalid boolean value\n"); 00038 return -1; 00039 } 00040 } 00041 }