| 
					
					
						
							
						
					
					
				 | 
				@ -577,6 +577,68 @@ Cudd_SharingSize( | 
			
		
		
	
		
			
				 | 
				 | 
				  Cudd_PrintDebug Cudd_CountPath | 
				 | 
				 | 
				  Cudd_PrintDebug Cudd_CountPath | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				*/ | 
				 | 
				 | 
				*/ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//double | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//Cudd_CountMinterm( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//  DdManager * manager, | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//  DdNode * node, | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//  int  nvars) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//{ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    double	max; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    DdHashTable	*table; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    double	res; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    CUDD_VALUE_TYPE epsilon; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				// | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    /* Scale the maximum number of minterm.  This is done in an attempt | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//     * to deal with functions that depend on more than 1023, but less | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//     * than 2044 variables and don't have too many minterms. | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//     */ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    printf("vars: %i, min_exp: %.400f, %i\n", nvars, DBL_MIN_EXP, DBL_MIN_EXP); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    printf("1: %f, 2: %i \n", (double)(nvars + DBL_MIN_EXP), (nvars + DBL_MIN_EXP)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    max = pow(2.0,(double)(nvars + DBL_MIN_EXP)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    printf("max: %f, DD_PLUS_INF_VAL: %.50f\n", max, DD_PLUS_INF_VAL); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    if (max >= DD_PLUS_INF_VAL) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        return((double)CUDD_OUT_OF_MEM); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    table = cuddHashTableInit(manager,1,2); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    if (table == NULL) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//	return((double)CUDD_OUT_OF_MEM); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    /* Temporarily set epsilon to 0 to avoid rounding errors. */ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    epsilon = Cudd_ReadEpsilon(manager); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    Cudd_SetEpsilon(manager,(CUDD_VALUE_TYPE)0.0); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    res = ddCountMintermAux(manager,node,max,table); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    cuddHashTableQuit(table); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    Cudd_SetEpsilon(manager,epsilon); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    if (res == (double)CUDD_OUT_OF_MEM) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        return((double)CUDD_OUT_OF_MEM); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    } else if (res >= pow(2.0,(double)(DBL_MAX_EXP + DBL_MIN_EXP))) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        /* Minterm count is too large to be scaled back. */ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        return(DD_PLUS_INF_VAL); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    } else { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        printf("in third case: %.400f\n", res); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        /* Undo the scaling. */ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        res *= pow(2.0,(double)-DBL_MIN_EXP); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        printf("after rescaling: %f\n", res); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//        return(res); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//    } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				// | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				//} /* end of Cudd_CountMinterm */ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				/**Function******************************************************************** | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 Synopsis    [Counts the number of minterms of a DD.] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 Description [Counts the number of minterms of a DD. The function is | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 assumed to depend on nvars variables. The minterm count is | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 represented as a double, to allow for a larger number of variables. | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 Returns the number of minterms of the function rooted at node if | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 successful; (double) CUDD_OUT_OF_MEM otherwise.] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 SideEffects [None] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 SeeAlso     [Cudd_PrintDebug Cudd_CountPath] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				 ******************************************************************************/ | 
			
		
		
	
		
			
				 | 
				 | 
				double | 
				 | 
				 | 
				double | 
			
		
		
	
		
			
				 | 
				 | 
				Cudd_CountMinterm( | 
				 | 
				 | 
				Cudd_CountMinterm( | 
			
		
		
	
		
			
				 | 
				 | 
				                  DdManager * manager, | 
				 | 
				 | 
				                  DdManager * manager, | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -588,38 +650,21 @@ Cudd_CountMinterm( | 
			
		
		
	
		
			
				 | 
				 | 
				    double	res; | 
				 | 
				 | 
				    double	res; | 
			
		
		
	
		
			
				 | 
				 | 
				    CUDD_VALUE_TYPE epsilon; | 
				 | 
				 | 
				    CUDD_VALUE_TYPE epsilon; | 
			
		
		
	
		
			
				 | 
				 | 
				     | 
				 | 
				 | 
				     | 
			
		
		
	
		
			
				 | 
				 | 
				    /* Scale the maximum number of minterm.  This is done in an attempt | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				     * to deal with functions that depend on more than 1023, but less | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				     * than 2044 variables and don't have too many minterms. | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				     */ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    max = pow(2.0,(double)(nvars + DBL_MIN_EXP)); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    if (max >= DD_PLUS_INF_VAL) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        return((double)CUDD_OUT_OF_MEM); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    max = pow(2.0,(double)nvars); | 
			
		
		
	
		
			
				 | 
				 | 
				    table = cuddHashTableInit(manager,1,2); | 
				 | 
				 | 
				    table = cuddHashTableInit(manager,1,2); | 
			
		
		
	
		
			
				 | 
				 | 
				    if (table == NULL) { | 
				 | 
				 | 
				    if (table == NULL) { | 
			
		
		
	
		
			
				 | 
				 | 
				        return((double)CUDD_OUT_OF_MEM); | 
				 | 
				 | 
				        return((double)CUDD_OUT_OF_MEM); | 
			
		
		
	
		
			
				 | 
				 | 
				    } | 
				 | 
				 | 
				    } | 
			
		
		
	
		
			
				 | 
				 | 
				    /* Temporarily set epsilon to 0 to avoid rounding errors. */ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    epsilon = Cudd_ReadEpsilon(manager); | 
				 | 
				 | 
				    epsilon = Cudd_ReadEpsilon(manager); | 
			
		
		
	
		
			
				 | 
				 | 
				    Cudd_SetEpsilon(manager,(CUDD_VALUE_TYPE)0.0); | 
				 | 
				 | 
				    Cudd_SetEpsilon(manager,(CUDD_VALUE_TYPE)0.0); | 
			
		
		
	
		
			
				 | 
				 | 
				    res = ddCountMintermAux(manager,node,max,table); | 
				 | 
				 | 
				    res = ddCountMintermAux(manager,node,max,table); | 
			
		
		
	
		
			
				 | 
				 | 
				    cuddHashTableQuit(table); | 
				 | 
				 | 
				    cuddHashTableQuit(table); | 
			
		
		
	
		
			
				 | 
				 | 
				    Cudd_SetEpsilon(manager,epsilon); | 
				 | 
				 | 
				    Cudd_SetEpsilon(manager,epsilon); | 
			
		
		
	
		
			
				 | 
				 | 
				    if (res == (double)CUDD_OUT_OF_MEM) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        return((double)CUDD_OUT_OF_MEM); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    } else if (res >= pow(2.0,(double)(DBL_MAX_EXP + DBL_MIN_EXP))) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        /* Minterm count is too large to be scaled back. */ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        return(DD_PLUS_INF_VAL); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    } else { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        /* Undo the scaling. */ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        res *= pow(2.0,(double)-DBL_MIN_EXP); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				     | 
			
		
		
	
		
			
				 | 
				 | 
				    return(res); | 
				 | 
				 | 
				    return(res); | 
			
		
		
	
		
			
				 | 
				 | 
				    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				     | 
				 | 
				 | 
				     | 
			
		
		
	
		
			
				 | 
				 | 
				} /* end of Cudd_CountMinterm */ | 
				 | 
				 | 
				} /* end of Cudd_CountMinterm */ | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				/** | 
				 | 
				 | 
				/** | 
			
		
		
	
		
			
				 | 
				 | 
				  @brief Counts the paths of a %DD. | 
				 | 
				 | 
				  @brief Counts the paths of a %DD. | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |