You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							1076 lines
						
					
					
						
							52 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							1076 lines
						
					
					
						
							52 KiB
						
					
					
				| /**CHeaderFile***************************************************************** | |
|  | |
|   FileName    [cudd.h] | |
|  | |
|   PackageName [cudd] | |
|  | |
|   Synopsis    [The University of Colorado decision diagram package.] | |
|  | |
|   Description [External functions and data strucures of the CUDD package. | |
|   <ul> | |
|   <li> To turn on the gathering of statistics, define DD_STATS. | |
|   <li> To link with mis, define DD_MIS. | |
|   </ul> | |
|   Modified by Abelardo Pardo to interface it to VIS. | |
|   ] | |
|  | |
|   SeeAlso     [] | |
|  | |
|   Author      [Fabio Somenzi] | |
|  | |
|   Copyright   [Copyright (c) 1995-2012, Regents of the University of Colorado | |
|  | |
|   All rights reserved. | |
|  | |
|   Redistribution and use in source and binary forms, with or without | |
|   modification, are permitted provided that the following conditions | |
|   are met: | |
|  | |
|   Redistributions of source code must retain the above copyright | |
|   notice, this list of conditions and the following disclaimer. | |
|  | |
|   Redistributions in binary form must reproduce the above copyright | |
|   notice, this list of conditions and the following disclaimer in the | |
|   documentation and/or other materials provided with the distribution. | |
|  | |
|   Neither the name of the University of Colorado nor the names of its | |
|   contributors may be used to endorse or promote products derived from | |
|   this software without specific prior written permission. | |
|  | |
|   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
|   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
|   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | |
|   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | |
|   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
|   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |
|   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
|   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
|   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
|   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |
|   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
|   POSSIBILITY OF SUCH DAMAGE.] | |
|  | |
|   Revision    [$Id: cudd.h,v 1.180 2012/02/05 01:07:18 fabio Exp $] | |
|  | |
| ******************************************************************************/ | |
| 
 | |
| #ifndef _CUDD | |
| #define _CUDD | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Nested includes                                                           */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| #include "mtr.h" | |
| #include "epd.h" | |
|  | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Constant declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| #define CUDD_VERSION "2.5.0" | |
|  | |
| #ifndef SIZEOF_VOID_P | |
| #define SIZEOF_VOID_P 4 | |
| #endif | |
| #ifndef SIZEOF_INT | |
| #define SIZEOF_INT 4 | |
| #endif | |
| #ifndef SIZEOF_LONG | |
| #define SIZEOF_LONG 4 | |
| #endif | |
|  | |
| #define CUDD_TRUE 1 | |
| #define CUDD_FALSE 0 | |
|  | |
| #define CUDD_VALUE_TYPE		double | |
| #define CUDD_OUT_OF_MEM		-1 | |
| /* The sizes of the subtables and the cache must be powers of two. */ | |
| #define CUDD_UNIQUE_SLOTS	256	/* initial size of subtables */ | |
| #define CUDD_CACHE_SLOTS	262144	/* default size of the cache */ | |
|  | |
| /* Constants for residue functions. */ | |
| #define CUDD_RESIDUE_DEFAULT	0 | |
| #define CUDD_RESIDUE_MSB	1 | |
| #define CUDD_RESIDUE_TC		2 | |
|  | |
| /* CUDD_MAXINDEX is defined in such a way that on 32-bit and 64-bit | |
| ** machines one can cast an index to (int) without generating a negative | |
| ** number. | |
| */ | |
| #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 | |
| #define CUDD_MAXINDEX		(((DdHalfWord) ~0) >> 1) | |
| #else | |
| #define CUDD_MAXINDEX		((DdHalfWord) ~0) | |
| #endif | |
|  | |
| /* CUDD_CONST_INDEX is the index of constant nodes.  Currently this | |
| ** is a synonim for CUDD_MAXINDEX. */ | |
| #define CUDD_CONST_INDEX	CUDD_MAXINDEX | |
|  | |
| /* These constants define the digits used in the representation of | |
| ** arbitrary precision integers.  The configurations tested use 8, 16, | |
| ** and 32 bits for each digit.  The typedefs should be in agreement | |
| ** with these definitions. | |
| */ | |
| #if SIZEOF_LONG == 8 | |
| #define DD_APA_BITS	32 | |
| #define DD_APA_BASE	(1L << DD_APA_BITS) | |
| #define DD_APA_HEXPRINT	"%08x" | |
| #else | |
| #define DD_APA_BITS	16 | |
| #define DD_APA_BASE	(1 << DD_APA_BITS) | |
| #define DD_APA_HEXPRINT	"%04x" | |
| #endif | |
| #define DD_APA_MASK	(DD_APA_BASE - 1) | |
|  | |
| /*---------------------------------------------------------------------------*/ | |
| /* Stucture declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Type declarations                                                         */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type of reordering algorithm.] | |
|  | |
|   Description [Type of reordering algorithm.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_REORDER_SAME, | |
|     CUDD_REORDER_NONE, | |
|     CUDD_REORDER_RANDOM, | |
|     CUDD_REORDER_RANDOM_PIVOT, | |
|     CUDD_REORDER_SIFT, | |
|     CUDD_REORDER_SIFT_CONVERGE, | |
|     CUDD_REORDER_SYMM_SIFT, | |
|     CUDD_REORDER_SYMM_SIFT_CONV, | |
|     CUDD_REORDER_WINDOW2, | |
|     CUDD_REORDER_WINDOW3, | |
|     CUDD_REORDER_WINDOW4, | |
|     CUDD_REORDER_WINDOW2_CONV, | |
|     CUDD_REORDER_WINDOW3_CONV, | |
|     CUDD_REORDER_WINDOW4_CONV, | |
|     CUDD_REORDER_GROUP_SIFT, | |
|     CUDD_REORDER_GROUP_SIFT_CONV, | |
|     CUDD_REORDER_ANNEALING, | |
|     CUDD_REORDER_GENETIC, | |
|     CUDD_REORDER_LINEAR, | |
|     CUDD_REORDER_LINEAR_CONVERGE, | |
|     CUDD_REORDER_LAZY_SIFT, | |
|     CUDD_REORDER_EXACT | |
| } Cudd_ReorderingType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type of aggregation methods.] | |
|  | |
|   Description [Type of aggregation methods.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_NO_CHECK, | |
|     CUDD_GROUP_CHECK, | |
|     CUDD_GROUP_CHECK2, | |
|     CUDD_GROUP_CHECK3, | |
|     CUDD_GROUP_CHECK4, | |
|     CUDD_GROUP_CHECK5, | |
|     CUDD_GROUP_CHECK6, | |
|     CUDD_GROUP_CHECK7, | |
|     CUDD_GROUP_CHECK8, | |
|     CUDD_GROUP_CHECK9 | |
| } Cudd_AggregationType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type of hooks.] | |
|  | |
|   Description [Type of hooks.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_PRE_GC_HOOK, | |
|     CUDD_POST_GC_HOOK, | |
|     CUDD_PRE_REORDERING_HOOK, | |
|     CUDD_POST_REORDERING_HOOK | |
| } Cudd_HookType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Type of error codes.] | |
|  | |
|   Description [Type of  error codes.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_NO_ERROR, | |
|     CUDD_MEMORY_OUT, | |
|     CUDD_TOO_MANY_NODES, | |
|     CUDD_MAX_MEM_EXCEEDED, | |
|     CUDD_TIMEOUT_EXPIRED, | |
|     CUDD_INVALID_ARG, | |
|     CUDD_INTERNAL_ERROR | |
| } Cudd_ErrorType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Group type for lazy sifting.] | |
|  | |
|   Description [Group type for lazy sifting.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_LAZY_NONE, | |
|     CUDD_LAZY_SOFT_GROUP, | |
|     CUDD_LAZY_HARD_GROUP, | |
|     CUDD_LAZY_UNGROUP | |
| } Cudd_LazyGroupType; | |
| 
 | |
| 
 | |
| /**Enum************************************************************************ | |
|  | |
|   Synopsis    [Variable type.] | |
|  | |
|   Description [Variable type. Currently used only in lazy sifting.] | |
|  | |
| ******************************************************************************/ | |
| typedef enum { | |
|     CUDD_VAR_PRIMARY_INPUT, | |
|     CUDD_VAR_PRESENT_STATE, | |
|     CUDD_VAR_NEXT_STATE | |
| } Cudd_VariableType; | |
| 
 | |
| 
 | |
| #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 | |
| typedef unsigned int   DdHalfWord; | |
| #else | |
| typedef unsigned short DdHalfWord; | |
| #endif | |
|  | |
| typedef struct DdNode DdNode; | |
| 
 | |
| typedef struct DdChildren { | |
|     struct DdNode *T; | |
|     struct DdNode *E; | |
| } DdChildren; | |
| 
 | |
| /* The DdNode structure is the only one exported out of the package */ | |
| struct DdNode { | |
|     DdHalfWord index; | |
|     DdHalfWord ref;		/* reference count */ | |
|     DdNode *next;		/* next pointer for unique table */ | |
|     union { | |
| 	CUDD_VALUE_TYPE value;	/* for constant nodes */ | |
| 	DdChildren kids;	/* for internal nodes */ | |
|     } type; | |
| }; | |
| 
 | |
| typedef struct DdManager DdManager; | |
| 
 | |
| typedef struct DdGen DdGen; | |
| 
 | |
| /* These typedefs for arbitrary precision arithmetic should agree with | |
| ** the corresponding constant definitions above. */ | |
| #if SIZEOF_LONG == 8 | |
| typedef unsigned int DdApaDigit; | |
| typedef unsigned long int DdApaDoubleDigit; | |
| #else | |
| typedef unsigned short int DdApaDigit; | |
| typedef unsigned int DdApaDoubleDigit; | |
| #endif | |
| typedef DdApaDigit * DdApaNumber; | |
| 
 | |
| /* Return type for function computing two-literal clauses. */ | |
| typedef struct DdTlcInfo DdTlcInfo; | |
| 
 | |
| /* Type of hook function. */ | |
| typedef int (*DD_HFP)(DdManager *, const char *, void *); | |
| /* Type of priority function */ | |
| typedef DdNode * (*DD_PRFP)(DdManager * , int, DdNode **, DdNode **, | |
| 			    DdNode **); | |
| /* Type of apply operator. */ | |
| typedef DdNode * (*DD_AOP)(DdManager *, DdNode **, DdNode **); | |
| /* Type of monadic apply operator. */ | |
| typedef DdNode * (*DD_MAOP)(DdManager *, DdNode *); | |
| /* Types of cache tag functions. */ | |
| typedef DdNode * (*DD_CTFP)(DdManager *, DdNode *, DdNode *); | |
| typedef DdNode * (*DD_CTFP1)(DdManager *, DdNode *); | |
| /* Type of memory-out function. */ | |
| typedef void (*DD_OOMFP)(long); | |
| /* Type of comparison function for qsort. */ | |
| typedef int (*DD_QSFP)(const void *, const void *); | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Variable declarations                                                     */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Macro declarations                                                        */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns 1 if the node is a constant node.] | |
|  | |
|   Description  [Returns 1 if the node is a constant node (rather than an | |
|   internal node). All constant nodes have the same index | |
|   (CUDD_CONST_INDEX). The pointer passed to Cudd_IsConstant may be either | |
|   regular or complemented.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_IsConstant(node) ((Cudd_Regular(node))->index == CUDD_CONST_INDEX) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Complements a DD.] | |
|  | |
|   Description  [Complements a DD by flipping the complement attribute of | |
|   the pointer (the least significant bit).] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_NotCond] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_Not(node) ((DdNode *)((long)(node) ^ 01)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Complements a DD if a condition is true.] | |
|  | |
|   Description  [Complements a DD if condition c is true; c should be | |
|   either 0 or 1, because it is used directly (for efficiency). If in | |
|   doubt on the values c may take, use "(c) ? Cudd_Not(node) : node".] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_Not] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_NotCond(node,c) ((DdNode *)((long)(node) ^ (c))) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the regular version of a pointer.] | |
|  | |
|   Description  [] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_Complement Cudd_IsComplement] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_Regular(node) ((DdNode *)((unsigned long)(node) & ~01)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the complemented version of a pointer.] | |
|  | |
|   Description  [] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_Regular Cudd_IsComplement] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_Complement(node) ((DdNode *)((unsigned long)(node) | 01)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns 1 if a pointer is complemented.] | |
|  | |
|   Description  [] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_Regular Cudd_Complement] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_IsComplement(node)	((int) ((long) (node) & 01)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the then child of an internal node.] | |
|  | |
|   Description  [Returns the then child of an internal node. If | |
|   <code>node</code> is a constant node, the result is unpredictable.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_E Cudd_V] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_T(node) ((Cudd_Regular(node))->type.kids.T) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the else child of an internal node.] | |
|  | |
|   Description  [Returns the else child of an internal node. If | |
|   <code>node</code> is a constant node, the result is unpredictable.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_T Cudd_V] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_E(node) ((Cudd_Regular(node))->type.kids.E) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the value of a constant node.] | |
|  | |
|   Description  [Returns the value of a constant node. If | |
|   <code>node</code> is an internal node, the result is unpredictable.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_T Cudd_E] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_V(node) ((Cudd_Regular(node))->type.value) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Returns the current position in the order of variable | |
|   index.] | |
|  | |
|   Description [Returns the current position in the order of variable | |
|   index. This macro is obsolete and is kept for compatibility. New | |
|   applications should use Cudd_ReadPerm instead.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_ReadPerm] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_ReadIndex(dd,index) (Cudd_ReadPerm(dd,index)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Iterates over the cubes of a decision diagram.] | |
|  | |
|   Description  [Iterates over the cubes of a decision diagram f. | |
|   <ul> | |
|   <li> DdManager *manager; | |
|   <li> DdNode *f; | |
|   <li> DdGen *gen; | |
|   <li> int *cube; | |
|   <li> CUDD_VALUE_TYPE value; | |
|   </ul> | |
|   Cudd_ForeachCube allocates and frees the generator. Therefore the | |
|   application should not try to do that. Also, the cube is freed at the | |
|   end of Cudd_ForeachCube and hence is not available outside of the loop.<p> | |
|   CAUTION: It is assumed that dynamic reordering will not occur while | |
|   there are open generators. It is the user's responsibility to make sure | |
|   that dynamic reordering does not occur. As long as new nodes are not created | |
|   during generation, and dynamic reordering is not called explicitly, | |
|   dynamic reordering will not occur. Alternatively, it is sufficient to | |
|   disable dynamic reordering. It is a mistake to dispose of a diagram | |
|   on which generation is ongoing.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_ForeachNode Cudd_FirstCube Cudd_NextCube Cudd_GenFree | |
|   Cudd_IsGenEmpty Cudd_AutodynDisable] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_ForeachCube(manager, f, gen, cube, value)\ | |
|     for((gen) = Cudd_FirstCube(manager, f, &cube, &value);\ | |
| 	Cudd_IsGenEmpty(gen) ? Cudd_GenFree(gen) : CUDD_TRUE;\ | |
| 	(void) Cudd_NextCube(gen, &cube, &value)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Iterates over the primes of a Boolean function.] | |
|  | |
|   Description  [Iterates over the primes of a Boolean function producing | |
|   a prime and irredundant cover. | |
|   <ul> | |
|   <li> DdManager *manager; | |
|   <li> DdNode *l; | |
|   <li> DdNode *u; | |
|   <li> DdGen *gen; | |
|   <li> int *cube; | |
|   </ul> | |
|   The Boolean function is described by an upper bound and a lower bound.  If | |
|   the function is completely specified, the two bounds coincide. | |
|   Cudd_ForeachPrime allocates and frees the generator.  Therefore the | |
|   application should not try to do that.  Also, the cube is freed at the | |
|   end of Cudd_ForeachPrime and hence is not available outside of the loop.<p> | |
|   CAUTION: It is a mistake to change a diagram on which generation is ongoing.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_ForeachCube Cudd_FirstPrime Cudd_NextPrime Cudd_GenFree | |
|   Cudd_IsGenEmpty] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_ForeachPrime(manager, l, u, gen, cube)\ | |
|     for((gen) = Cudd_FirstPrime(manager, l, u, &cube);\ | |
| 	Cudd_IsGenEmpty(gen) ? Cudd_GenFree(gen) : CUDD_TRUE;\ | |
| 	(void) Cudd_NextPrime(gen, &cube)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Iterates over the nodes of a decision diagram.] | |
|  | |
|   Description  [Iterates over the nodes of a decision diagram f. | |
|   <ul> | |
|   <li> DdManager *manager; | |
|   <li> DdNode *f; | |
|   <li> DdGen *gen; | |
|   <li> DdNode *node; | |
|   </ul> | |
|   The nodes are returned in a seemingly random order. | |
|   Cudd_ForeachNode allocates and frees the generator. Therefore the | |
|   application should not try to do that.<p> | |
|   CAUTION: It is assumed that dynamic reordering will not occur while | |
|   there are open generators. It is the user's responsibility to make sure | |
|   that dynamic reordering does not occur. As long as new nodes are not created | |
|   during generation, and dynamic reordering is not called explicitly, | |
|   dynamic reordering will not occur. Alternatively, it is sufficient to | |
|   disable dynamic reordering. It is a mistake to dispose of a diagram | |
|   on which generation is ongoing.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_ForeachCube Cudd_FirstNode Cudd_NextNode Cudd_GenFree | |
|   Cudd_IsGenEmpty Cudd_AutodynDisable] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_ForeachNode(manager, f, gen, node)\ | |
|     for((gen) = Cudd_FirstNode(manager, f, &node);\ | |
| 	Cudd_IsGenEmpty(gen) ? Cudd_GenFree(gen) : CUDD_TRUE;\ | |
| 	(void) Cudd_NextNode(gen, &node)) | |
|  | |
| 
 | |
| /**Macro*********************************************************************** | |
|  | |
|   Synopsis     [Iterates over the paths of a ZDD.] | |
|  | |
|   Description  [Iterates over the paths of a ZDD f. | |
|   <ul> | |
|   <li> DdManager *manager; | |
|   <li> DdNode *f; | |
|   <li> DdGen *gen; | |
|   <li> int *path; | |
|   </ul> | |
|   Cudd_zddForeachPath allocates and frees the generator. Therefore the | |
|   application should not try to do that. Also, the path is freed at the | |
|   end of Cudd_zddForeachPath and hence is not available outside of the loop.<p> | |
|   CAUTION: It is assumed that dynamic reordering will not occur while | |
|   there are open generators.  It is the user's responsibility to make sure | |
|   that dynamic reordering does not occur.  As long as new nodes are not created | |
|   during generation, and dynamic reordering is not called explicitly, | |
|   dynamic reordering will not occur.  Alternatively, it is sufficient to | |
|   disable dynamic reordering.  It is a mistake to dispose of a diagram | |
|   on which generation is ongoing.] | |
|  | |
|   SideEffects  [none] | |
|  | |
|   SeeAlso      [Cudd_zddFirstPath Cudd_zddNextPath Cudd_GenFree | |
|   Cudd_IsGenEmpty Cudd_AutodynDisable] | |
|  | |
| ******************************************************************************/ | |
| #define Cudd_zddForeachPath(manager, f, gen, path)\ | |
|     for((gen) = Cudd_zddFirstPath(manager, f, &path);\ | |
| 	Cudd_IsGenEmpty(gen) ? Cudd_GenFree(gen) : CUDD_TRUE;\ | |
| 	(void) Cudd_zddNextPath(gen, &path)) | |
|  | |
| 
 | |
| 
 | |
| /**AutomaticStart*************************************************************/ | |
| 
 | |
| /*---------------------------------------------------------------------------*/ | |
| /* Function prototypes                                                       */ | |
| /*---------------------------------------------------------------------------*/ | |
| 
 | |
| extern DdNode * Cudd_addNewVar (DdManager *dd); | |
| extern DdNode * Cudd_addNewVarAtLevel (DdManager *dd, int level); | |
| extern DdNode * Cudd_bddNewVar (DdManager *dd); | |
| extern DdNode * Cudd_bddNewVarAtLevel (DdManager *dd, int level); | |
| extern DdNode * Cudd_addIthVar (DdManager *dd, int i); | |
| extern DdNode * Cudd_bddIthVar (DdManager *dd, int i); | |
| extern DdNode * Cudd_zddIthVar (DdManager *dd, int i); | |
| extern int Cudd_zddVarsFromBddVars (DdManager *dd, int multiplicity); | |
| extern DdNode * Cudd_addConst (DdManager *dd, CUDD_VALUE_TYPE c); | |
| extern int Cudd_IsNonConstant (DdNode *f); | |
| extern unsigned long Cudd_ReadStartTime(DdManager *unique); | |
| extern unsigned long Cudd_ReadElapsedTime(DdManager *unique); | |
| extern void Cudd_SetStartTime(DdManager *unique, unsigned long st); | |
| extern void Cudd_ResetStartTime(DdManager *unique); | |
| extern unsigned long Cudd_ReadTimeLimit(DdManager *unique); | |
| extern void Cudd_SetTimeLimit(DdManager *unique, unsigned long tl); | |
| extern void Cudd_UpdateTimeLimit(DdManager * unique); | |
| extern void Cudd_IncreaseTimeLimit(DdManager * unique, unsigned long increase); | |
| extern void Cudd_UnsetTimeLimit(DdManager *unique); | |
| extern int Cudd_TimeLimited(DdManager *unique); | |
| extern void Cudd_AutodynEnable (DdManager *unique, Cudd_ReorderingType method); | |
| extern void Cudd_AutodynDisable (DdManager *unique); | |
| extern int Cudd_ReorderingStatus (DdManager *unique, Cudd_ReorderingType *method); | |
| extern void Cudd_AutodynEnableZdd (DdManager *unique, Cudd_ReorderingType method); | |
| extern void Cudd_AutodynDisableZdd (DdManager *unique); | |
| extern int Cudd_ReorderingStatusZdd (DdManager *unique, Cudd_ReorderingType *method); | |
| extern int Cudd_zddRealignmentEnabled (DdManager *unique); | |
| extern void Cudd_zddRealignEnable (DdManager *unique); | |
| extern void Cudd_zddRealignDisable (DdManager *unique); | |
| extern int Cudd_bddRealignmentEnabled (DdManager *unique); | |
| extern void Cudd_bddRealignEnable (DdManager *unique); | |
| extern void Cudd_bddRealignDisable (DdManager *unique); | |
| extern DdNode * Cudd_ReadOne (DdManager *dd); | |
| extern DdNode * Cudd_ReadZddOne (DdManager *dd, int i); | |
| extern DdNode * Cudd_ReadZero (DdManager *dd); | |
| extern DdNode * Cudd_ReadLogicZero (DdManager *dd); | |
| extern DdNode * Cudd_ReadPlusInfinity (DdManager *dd); | |
| extern DdNode * Cudd_ReadMinusInfinity (DdManager *dd); | |
| extern DdNode * Cudd_ReadBackground (DdManager *dd); | |
| extern void Cudd_SetBackground (DdManager *dd, DdNode *bck); | |
| extern unsigned int Cudd_ReadCacheSlots (DdManager *dd); | |
| extern double Cudd_ReadCacheUsedSlots (DdManager * dd); | |
| extern double Cudd_ReadCacheLookUps (DdManager *dd); | |
| extern double Cudd_ReadCacheHits (DdManager *dd); | |
| extern double Cudd_ReadRecursiveCalls (DdManager * dd); | |
| extern unsigned int Cudd_ReadMinHit (DdManager *dd); | |
| extern void Cudd_SetMinHit (DdManager *dd, unsigned int hr); | |
| extern unsigned int Cudd_ReadLooseUpTo (DdManager *dd); | |
| extern void Cudd_SetLooseUpTo (DdManager *dd, unsigned int lut); | |
| extern unsigned int Cudd_ReadMaxCache (DdManager *dd); | |
| extern unsigned int Cudd_ReadMaxCacheHard (DdManager *dd); | |
| extern void Cudd_SetMaxCacheHard (DdManager *dd, unsigned int mc); | |
| extern int Cudd_ReadSize (DdManager *dd); | |
| extern int Cudd_ReadZddSize (DdManager *dd); | |
| extern unsigned int Cudd_ReadSlots (DdManager *dd); | |
| extern double Cudd_ReadUsedSlots (DdManager * dd); | |
| extern double Cudd_ExpectedUsedSlots (DdManager * dd); | |
| extern unsigned int Cudd_ReadKeys (DdManager *dd); | |
| extern unsigned int Cudd_ReadDead (DdManager *dd); | |
| extern unsigned int Cudd_ReadMinDead (DdManager *dd); | |
| extern unsigned int Cudd_ReadReorderings (DdManager *dd); | |
| extern unsigned int Cudd_ReadMaxReorderings (DdManager *dd); | |
| extern void Cudd_SetMaxReorderings (DdManager *dd, unsigned int mr); | |
| extern long Cudd_ReadReorderingTime (DdManager * dd); | |
| extern int Cudd_ReadGarbageCollections (DdManager * dd); | |
| extern long Cudd_ReadGarbageCollectionTime (DdManager * dd); | |
| extern double Cudd_ReadNodesFreed (DdManager * dd); | |
| extern double Cudd_ReadNodesDropped (DdManager * dd); | |
| extern double Cudd_ReadUniqueLookUps (DdManager * dd); | |
| extern double Cudd_ReadUniqueLinks (DdManager * dd); | |
| extern int Cudd_ReadSiftMaxVar (DdManager *dd); | |
| extern void Cudd_SetSiftMaxVar (DdManager *dd, int smv); | |
| extern int Cudd_ReadSiftMaxSwap (DdManager *dd); | |
| extern void Cudd_SetSiftMaxSwap (DdManager *dd, int sms); | |
| extern double Cudd_ReadMaxGrowth (DdManager *dd); | |
| extern void Cudd_SetMaxGrowth (DdManager *dd, double mg); | |
| extern double Cudd_ReadMaxGrowthAlternate (DdManager * dd); | |
| extern void Cudd_SetMaxGrowthAlternate (DdManager * dd, double mg); | |
| extern int Cudd_ReadReorderingCycle (DdManager * dd); | |
| extern void Cudd_SetReorderingCycle (DdManager * dd, int cycle); | |
| extern MtrNode * Cudd_ReadTree (DdManager *dd); | |
| extern void Cudd_SetTree (DdManager *dd, MtrNode *tree); | |
| extern void Cudd_FreeTree (DdManager *dd); | |
| extern MtrNode * Cudd_ReadZddTree (DdManager *dd); | |
| extern void Cudd_SetZddTree (DdManager *dd, MtrNode *tree); | |
| extern void Cudd_FreeZddTree (DdManager *dd); | |
| extern unsigned int Cudd_NodeReadIndex (DdNode *node); | |
| extern int Cudd_ReadPerm (DdManager *dd, int i); | |
| extern int Cudd_ReadPermZdd (DdManager *dd, int i); | |
| extern int Cudd_ReadInvPerm (DdManager *dd, int i); | |
| extern int Cudd_ReadInvPermZdd (DdManager *dd, int i); | |
| extern DdNode * Cudd_ReadVars (DdManager *dd, int i); | |
| extern CUDD_VALUE_TYPE Cudd_ReadEpsilon (DdManager *dd); | |
| extern void Cudd_SetEpsilon (DdManager *dd, CUDD_VALUE_TYPE ep); | |
| extern Cudd_AggregationType Cudd_ReadGroupcheck (DdManager *dd); | |
| extern void Cudd_SetGroupcheck (DdManager *dd, Cudd_AggregationType gc); | |
| extern int Cudd_GarbageCollectionEnabled (DdManager *dd); | |
| extern void Cudd_EnableGarbageCollection (DdManager *dd); | |
| extern void Cudd_DisableGarbageCollection (DdManager *dd); | |
| extern int Cudd_DeadAreCounted (DdManager *dd); | |
| extern void Cudd_TurnOnCountDead (DdManager *dd); | |
| extern void Cudd_TurnOffCountDead (DdManager *dd); | |
| extern int Cudd_ReadRecomb (DdManager *dd); | |
| extern void Cudd_SetRecomb (DdManager *dd, int recomb); | |
| extern int Cudd_ReadSymmviolation (DdManager *dd); | |
| extern void Cudd_SetSymmviolation (DdManager *dd, int symmviolation); | |
| extern int Cudd_ReadArcviolation (DdManager *dd); | |
| extern void Cudd_SetArcviolation (DdManager *dd, int arcviolation); | |
| extern int Cudd_ReadPopulationSize (DdManager *dd); | |
| extern void Cudd_SetPopulationSize (DdManager *dd, int populationSize); | |
| extern int Cudd_ReadNumberXovers (DdManager *dd); | |
| extern void Cudd_SetNumberXovers (DdManager *dd, int numberXovers); | |
| extern unsigned int Cudd_ReadOrderRandomization(DdManager * dd); | |
| extern void Cudd_SetOrderRandomization(DdManager * dd, unsigned int factor); | |
| extern unsigned long Cudd_ReadMemoryInUse (DdManager *dd); | |
| extern int Cudd_PrintInfo (DdManager *dd, FILE *fp); | |
| extern long Cudd_ReadPeakNodeCount (DdManager *dd); | |
| extern int Cudd_ReadPeakLiveNodeCount (DdManager * dd); | |
| extern long Cudd_ReadNodeCount (DdManager *dd); | |
| extern long Cudd_zddReadNodeCount (DdManager *dd); | |
| extern int Cudd_AddHook (DdManager *dd, DD_HFP f, Cudd_HookType where); | |
| extern int Cudd_RemoveHook (DdManager *dd, DD_HFP f, Cudd_HookType where); | |
| extern int Cudd_IsInHook (DdManager * dd, DD_HFP f, Cudd_HookType where); | |
| extern int Cudd_StdPreReordHook (DdManager *dd, const char *str, void *data); | |
| extern int Cudd_StdPostReordHook (DdManager *dd, const char *str, void *data); | |
| extern int Cudd_EnableReorderingReporting (DdManager *dd); | |
| extern int Cudd_DisableReorderingReporting (DdManager *dd); | |
| extern int Cudd_ReorderingReporting (DdManager *dd); | |
| extern int Cudd_PrintGroupedOrder(DdManager * dd, const char *str, void *data); | |
| extern int Cudd_EnableOrderingMonitoring(DdManager *dd); | |
| extern int Cudd_DisableOrderingMonitoring(DdManager *dd); | |
| extern int Cudd_OrderingMonitoring(DdManager *dd); | |
| extern Cudd_ErrorType Cudd_ReadErrorCode (DdManager *dd); | |
| extern void Cudd_ClearErrorCode (DdManager *dd); | |
| extern FILE * Cudd_ReadStdout (DdManager *dd); | |
| extern void Cudd_SetStdout (DdManager *dd, FILE *fp); | |
| extern FILE * Cudd_ReadStderr (DdManager *dd); | |
| extern void Cudd_SetStderr (DdManager *dd, FILE *fp); | |
| extern unsigned int Cudd_ReadNextReordering (DdManager *dd); | |
| extern void Cudd_SetNextReordering (DdManager *dd, unsigned int next); | |
| extern double Cudd_ReadSwapSteps (DdManager *dd); | |
| extern unsigned int Cudd_ReadMaxLive (DdManager *dd); | |
| extern void Cudd_SetMaxLive (DdManager *dd, unsigned int maxLive); | |
| extern unsigned long Cudd_ReadMaxMemory (DdManager *dd); | |
| extern void Cudd_SetMaxMemory (DdManager *dd, unsigned long maxMemory); | |
| extern int Cudd_bddBindVar (DdManager *dd, int index); | |
| extern int Cudd_bddUnbindVar (DdManager *dd, int index); | |
| extern int Cudd_bddVarIsBound (DdManager *dd, int index); | |
| extern DdNode * Cudd_addExistAbstract (DdManager *manager, DdNode *f, DdNode *cube); | |
| extern DdNode * Cudd_addUnivAbstract (DdManager *manager, DdNode *f, DdNode *cube); | |
| extern DdNode * Cudd_addOrAbstract (DdManager *manager, DdNode *f, DdNode *cube); | |
| extern DdNode * Cudd_addApply (DdManager *dd, DdNode * (*)(DdManager *, DdNode **, DdNode **), DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_addPlus (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addTimes (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addThreshold (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addSetNZ (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addDivide (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addMinus (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addMinimum (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addMaximum (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addOneZeroMaximum (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addDiff (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addAgreement (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addOr (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addNand (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addNor (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addXor (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addXnor (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addMonadicApply (DdManager * dd, DdNode * (*op)(DdManager *, DdNode *), DdNode * f); | |
| extern DdNode * Cudd_addLog (DdManager * dd, DdNode * f); | |
| extern DdNode * Cudd_addEquals (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addNotEquals (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addGreaterThan (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addGreaterThanEquals (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addLessThan (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addLessThanEquals (DdManager *dd, DdNode **f, DdNode **g); | |
| extern DdNode * Cudd_addFindMax (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_addFindMin (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_addIthBit (DdManager *dd, DdNode *f, int bit); | |
| extern DdNode * Cudd_addScalarInverse (DdManager *dd, DdNode *f, DdNode *epsilon); | |
| extern DdNode * Cudd_addIte (DdManager *dd, DdNode *f, DdNode *g, DdNode *h); | |
| extern DdNode * Cudd_addIteConstant (DdManager *dd, DdNode *f, DdNode *g, DdNode *h); | |
| extern DdNode * Cudd_addEvalConst (DdManager *dd, DdNode *f, DdNode *g); | |
| extern int Cudd_addLeq (DdManager * dd, DdNode * f, DdNode * g); | |
| extern DdNode * Cudd_addCmpl (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_addNegate (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_addRoundOff (DdManager *dd, DdNode *f, int N); | |
| extern DdNode * Cudd_addWalsh (DdManager *dd, DdNode **x, DdNode **y, int n); | |
| extern DdNode * Cudd_addResidue (DdManager *dd, int n, int m, int options, int top); | |
| extern DdNode * Cudd_bddAndAbstract (DdManager *manager, DdNode *f, DdNode *g, DdNode *cube); | |
| extern DdNode * Cudd_bddAndAbstractLimit (DdManager *manager, DdNode *f, DdNode *g, DdNode *cube, unsigned int limit); | |
| extern int Cudd_ApaNumberOfDigits (int binaryDigits); | |
| extern DdApaNumber Cudd_NewApaNumber (int digits); | |
| extern void Cudd_ApaCopy (int digits, DdApaNumber source, DdApaNumber dest); | |
| extern DdApaDigit Cudd_ApaAdd (int digits, DdApaNumber a, DdApaNumber b, DdApaNumber sum); | |
| extern DdApaDigit Cudd_ApaSubtract (int digits, DdApaNumber a, DdApaNumber b, DdApaNumber diff); | |
| extern DdApaDigit Cudd_ApaShortDivision (int digits, DdApaNumber dividend, DdApaDigit divisor, DdApaNumber quotient); | |
| extern unsigned int Cudd_ApaIntDivision (int  digits, DdApaNumber dividend, unsigned int  divisor, DdApaNumber  quotient); | |
| extern void Cudd_ApaShiftRight (int digits, DdApaDigit in, DdApaNumber a, DdApaNumber b); | |
| extern void Cudd_ApaSetToLiteral (int digits, DdApaNumber number, DdApaDigit literal); | |
| extern void Cudd_ApaPowerOfTwo (int digits, DdApaNumber number, int power); | |
| extern int Cudd_ApaCompare (int digitsFirst, DdApaNumber  first, int digitsSecond, DdApaNumber  second); | |
| extern int Cudd_ApaCompareRatios (int digitsFirst, DdApaNumber firstNum, unsigned int firstDen, int digitsSecond, DdApaNumber secondNum, unsigned int secondDen); | |
| extern int Cudd_ApaPrintHex (FILE *fp, int digits, DdApaNumber number); | |
| extern int Cudd_ApaPrintDecimal (FILE *fp, int digits, DdApaNumber number); | |
| extern int Cudd_ApaPrintExponential (FILE * fp, int  digits, DdApaNumber  number, int precision); | |
| extern DdApaNumber Cudd_ApaCountMinterm (DdManager *manager, DdNode *node, int nvars, int *digits); | |
| extern int Cudd_ApaPrintMinterm (FILE *fp, DdManager *dd, DdNode *node, int nvars); | |
| extern int Cudd_ApaPrintMintermExp (FILE * fp, DdManager * dd, DdNode * node, int  nvars, int precision); | |
| extern int Cudd_ApaPrintDensity (FILE * fp, DdManager * dd, DdNode * node, int  nvars); | |
| extern DdNode * Cudd_UnderApprox (DdManager *dd, DdNode *f, int numVars, int threshold, int safe, double quality); | |
| extern DdNode * Cudd_OverApprox (DdManager *dd, DdNode *f, int numVars, int threshold, int safe, double quality); | |
| extern DdNode * Cudd_RemapUnderApprox (DdManager *dd, DdNode *f, int numVars, int threshold, double quality); | |
| extern DdNode * Cudd_RemapOverApprox (DdManager *dd, DdNode *f, int numVars, int threshold, double quality); | |
| extern DdNode * Cudd_BiasedUnderApprox (DdManager *dd, DdNode *f, DdNode *b, int numVars, int threshold, double quality1, double quality0); | |
| extern DdNode * Cudd_BiasedOverApprox (DdManager *dd, DdNode *f, DdNode *b, int numVars, int threshold, double quality1, double quality0); | |
| extern DdNode * Cudd_bddExistAbstract (DdManager *manager, DdNode *f, DdNode *cube); | |
| extern DdNode * Cudd_bddExistAbstractLimit(DdManager * manager, DdNode * f, DdNode * cube, unsigned int limit); | |
| extern DdNode * Cudd_bddXorExistAbstract (DdManager *manager, DdNode *f, DdNode *g, DdNode *cube); | |
| extern DdNode * Cudd_bddUnivAbstract (DdManager *manager, DdNode *f, DdNode *cube); | |
| extern DdNode * Cudd_bddBooleanDiff (DdManager *manager, DdNode *f, int x); | |
| extern int Cudd_bddVarIsDependent (DdManager *dd, DdNode *f, DdNode *var); | |
| extern double Cudd_bddCorrelation (DdManager *manager, DdNode *f, DdNode *g); | |
| extern double Cudd_bddCorrelationWeights (DdManager *manager, DdNode *f, DdNode *g, double *prob); | |
| extern DdNode * Cudd_bddIte (DdManager *dd, DdNode *f, DdNode *g, DdNode *h); | |
|   extern DdNode * Cudd_bddIteLimit (DdManager *dd, DdNode *f, DdNode *g, DdNode *h, unsigned int limit); | |
| extern DdNode * Cudd_bddIteConstant (DdManager *dd, DdNode *f, DdNode *g, DdNode *h); | |
| extern DdNode * Cudd_bddIntersect (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddAnd (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddAndLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); | |
| extern DdNode * Cudd_bddOr (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddOrLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); | |
| extern DdNode * Cudd_bddNand (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddNor (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddXor (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddXnor (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_bddXnorLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); | |
| extern int Cudd_bddLeq (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_addBddThreshold (DdManager *dd, DdNode *f, CUDD_VALUE_TYPE value); | |
| extern DdNode * Cudd_addBddStrictThreshold (DdManager *dd, DdNode *f, CUDD_VALUE_TYPE value); | |
| extern DdNode * Cudd_addBddInterval (DdManager *dd, DdNode *f, CUDD_VALUE_TYPE lower, CUDD_VALUE_TYPE upper); | |
| extern DdNode * Cudd_addBddIthBit (DdManager *dd, DdNode *f, int bit); | |
| extern DdNode * Cudd_BddToAdd (DdManager *dd, DdNode *B); | |
| extern DdNode * Cudd_addBddPattern (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_bddTransfer (DdManager *ddSource, DdManager *ddDestination, DdNode *f); | |
| extern int Cudd_DebugCheck (DdManager *table); | |
| extern int Cudd_CheckKeys (DdManager *table); | |
| extern DdNode * Cudd_bddClippingAnd (DdManager *dd, DdNode *f, DdNode *g, int maxDepth, int direction); | |
| extern DdNode * Cudd_bddClippingAndAbstract (DdManager *dd, DdNode *f, DdNode *g, DdNode *cube, int maxDepth, int direction); | |
| extern DdNode * Cudd_Cofactor (DdManager *dd, DdNode *f, DdNode *g); | |
| extern int Cudd_CheckCube (DdManager *dd, DdNode *g); | |
| extern DdNode * Cudd_bddCompose (DdManager *dd, DdNode *f, DdNode *g, int v); | |
| extern DdNode * Cudd_addCompose (DdManager *dd, DdNode *f, DdNode *g, int v); | |
| extern DdNode * Cudd_addPermute (DdManager *manager, DdNode *node, int *permut); | |
| extern DdNode * Cudd_addSwapVariables (DdManager *dd, DdNode *f, DdNode **x, DdNode **y, int n); | |
| extern DdNode * Cudd_bddPermute (DdManager *manager, DdNode *node, int *permut); | |
| extern DdNode * Cudd_bddVarMap (DdManager *manager, DdNode *f); | |
| extern int Cudd_SetVarMap (DdManager *manager, DdNode **x, DdNode **y, int n); | |
| extern DdNode * Cudd_bddSwapVariables (DdManager *dd, DdNode *f, DdNode **x, DdNode **y, int n); | |
| extern DdNode * Cudd_bddAdjPermuteX (DdManager *dd, DdNode *B, DdNode **x, int n); | |
| extern DdNode * Cudd_addVectorCompose (DdManager *dd, DdNode *f, DdNode **vector); | |
| extern DdNode * Cudd_addGeneralVectorCompose (DdManager *dd, DdNode *f, DdNode **vectorOn, DdNode **vectorOff); | |
| extern DdNode * Cudd_addNonSimCompose (DdManager *dd, DdNode *f, DdNode **vector); | |
| extern DdNode * Cudd_bddVectorCompose (DdManager *dd, DdNode *f, DdNode **vector); | |
| extern int Cudd_bddApproxConjDecomp (DdManager *dd, DdNode *f, DdNode ***conjuncts); | |
| extern int Cudd_bddApproxDisjDecomp (DdManager *dd, DdNode *f, DdNode ***disjuncts); | |
| extern int Cudd_bddIterConjDecomp (DdManager *dd, DdNode *f, DdNode ***conjuncts); | |
| extern int Cudd_bddIterDisjDecomp (DdManager *dd, DdNode *f, DdNode ***disjuncts); | |
| extern int Cudd_bddGenConjDecomp (DdManager *dd, DdNode *f, DdNode ***conjuncts); | |
| extern int Cudd_bddGenDisjDecomp (DdManager *dd, DdNode *f, DdNode ***disjuncts); | |
| extern int Cudd_bddVarConjDecomp (DdManager *dd, DdNode * f, DdNode ***conjuncts); | |
| extern int Cudd_bddVarDisjDecomp (DdManager *dd, DdNode * f, DdNode ***disjuncts); | |
| extern DdNode * Cudd_FindEssential (DdManager *dd, DdNode *f); | |
| extern int Cudd_bddIsVarEssential (DdManager *manager, DdNode *f, int id, int phase); | |
| extern DdTlcInfo * Cudd_FindTwoLiteralClauses (DdManager * dd, DdNode * f); | |
| extern int Cudd_PrintTwoLiteralClauses (DdManager * dd, DdNode * f, char **names, FILE *fp); | |
| extern int Cudd_ReadIthClause (DdTlcInfo * tlc, int i, DdHalfWord *var1, DdHalfWord *var2, int *phase1, int *phase2); | |
| extern void Cudd_tlcInfoFree (DdTlcInfo * t); | |
| extern int Cudd_DumpBlif (DdManager *dd, int n, DdNode **f, char **inames, char **onames, char *mname, FILE *fp, int mv); | |
| extern int Cudd_DumpBlifBody (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp, int mv); | |
| extern int Cudd_DumpDot (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp); | |
| extern int Cudd_DumpDaVinci (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp); | |
| extern int Cudd_DumpDDcal (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp); | |
| extern int Cudd_DumpFactoredForm (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp); | |
| extern DdNode * Cudd_bddConstrain (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode * Cudd_bddRestrict (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode * Cudd_bddNPAnd (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode * Cudd_addConstrain (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode ** Cudd_bddConstrainDecomp (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_addRestrict (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode ** Cudd_bddCharToVect (DdManager *dd, DdNode *f); | |
| extern DdNode * Cudd_bddLICompaction (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode * Cudd_bddSqueeze (DdManager *dd, DdNode *l, DdNode *u); | |
| extern DdNode * Cudd_bddMinimize (DdManager *dd, DdNode *f, DdNode *c); | |
| extern DdNode * Cudd_SubsetCompress (DdManager *dd, DdNode *f, int nvars, int threshold); | |
| extern DdNode * Cudd_SupersetCompress (DdManager *dd, DdNode *f, int nvars, int threshold); | |
| extern MtrNode * Cudd_MakeTreeNode (DdManager *dd, unsigned int low, unsigned int size, unsigned int type); | |
| extern int Cudd_addHarwell (FILE *fp, DdManager *dd, DdNode **E, DdNode ***x, DdNode ***y, DdNode ***xn, DdNode ***yn_, int *nx, int *ny, int *m, int *n, int bx, int sx, int by, int sy, int pr); | |
| extern DdManager * Cudd_Init (unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int cacheSize, unsigned long maxMemory); | |
| extern void Cudd_Quit (DdManager *unique); | |
| extern int Cudd_PrintLinear (DdManager *table); | |
| extern int Cudd_ReadLinear (DdManager *table, int x, int y); | |
| extern DdNode * Cudd_bddLiteralSetIntersection (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode * Cudd_addMatrixMultiply (DdManager *dd, DdNode *A, DdNode *B, DdNode **z, int nz); | |
| extern DdNode * Cudd_addTimesPlus (DdManager *dd, DdNode *A, DdNode *B, DdNode **z, int nz); | |
| extern DdNode * Cudd_addTriangle (DdManager *dd, DdNode *f, DdNode *g, DdNode **z, int nz); | |
| extern DdNode * Cudd_addOuterSum (DdManager *dd, DdNode *M, DdNode *r, DdNode *c); | |
| extern DdNode * Cudd_PrioritySelect (DdManager *dd, DdNode *R, DdNode **x, DdNode **y, DdNode **z, DdNode *Pi, int n, DdNode * (*)(DdManager *, int, DdNode **, DdNode **, DdNode **)); | |
| extern DdNode * Cudd_Xgty (DdManager *dd, int N, DdNode **z, DdNode **x, DdNode **y); | |
| extern DdNode * Cudd_Xeqy (DdManager *dd, int N, DdNode **x, DdNode **y); | |
| extern DdNode * Cudd_addXeqy (DdManager *dd, int N, DdNode **x, DdNode **y); | |
| extern DdNode * Cudd_Dxygtdxz (DdManager *dd, int N, DdNode **x, DdNode **y, DdNode **z); | |
| extern DdNode * Cudd_Dxygtdyz (DdManager *dd, int N, DdNode **x, DdNode **y, DdNode **z); | |
| extern DdNode * Cudd_Inequality (DdManager * dd, int  N, int c, DdNode ** x, DdNode ** y); | |
| extern DdNode * Cudd_Disequality (DdManager * dd, int  N, int c, DdNode ** x, DdNode ** y); | |
| extern DdNode * Cudd_bddInterval (DdManager * dd, int  N, DdNode ** x, unsigned int lowerB, unsigned int upperB); | |
| extern DdNode * Cudd_CProjection (DdManager *dd, DdNode *R, DdNode *Y); | |
| extern DdNode * Cudd_addHamming (DdManager *dd, DdNode **xVars, DdNode **yVars, int nVars); | |
| extern int Cudd_MinHammingDist (DdManager *dd, DdNode *f, int *minterm, int upperBound); | |
| extern DdNode * Cudd_bddClosestCube (DdManager *dd, DdNode * f, DdNode *g, int *distance); | |
| extern int Cudd_addRead (FILE *fp, DdManager *dd, DdNode **E, DdNode ***x, DdNode ***y, DdNode ***xn, DdNode ***yn_, int *nx, int *ny, int *m, int *n, int bx, int sx, int by, int sy); | |
| extern int Cudd_bddRead (FILE *fp, DdManager *dd, DdNode **E, DdNode ***x, DdNode ***y, int *nx, int *ny, int *m, int *n, int bx, int sx, int by, int sy); | |
| extern void Cudd_Ref (DdNode *n); | |
| extern void Cudd_RecursiveDeref (DdManager *table, DdNode *n); | |
| extern void Cudd_IterDerefBdd (DdManager *table, DdNode *n); | |
| extern void Cudd_DelayedDerefBdd (DdManager * table, DdNode * n); | |
| extern void Cudd_RecursiveDerefZdd (DdManager *table, DdNode *n); | |
| extern void Cudd_Deref (DdNode *node); | |
| extern int Cudd_CheckZeroRef (DdManager *manager); | |
| extern int Cudd_ReduceHeap (DdManager *table, Cudd_ReorderingType heuristic, int minsize); | |
| extern int Cudd_ShuffleHeap (DdManager *table, int *permutation); | |
| extern DdNode * Cudd_Eval (DdManager *dd, DdNode *f, int *inputs); | |
| extern DdNode * Cudd_ShortestPath (DdManager *manager, DdNode *f, int *weight, int *support, int *length); | |
| extern DdNode * Cudd_LargestCube (DdManager *manager, DdNode *f, int *length); | |
| extern int Cudd_ShortestLength (DdManager *manager, DdNode *f, int *weight); | |
| extern DdNode * Cudd_Decreasing (DdManager *dd, DdNode *f, int i); | |
| extern DdNode * Cudd_Increasing (DdManager *dd, DdNode *f, int i); | |
| extern int Cudd_EquivDC (DdManager *dd, DdNode *F, DdNode *G, DdNode *D); | |
| extern int Cudd_bddLeqUnless (DdManager *dd, DdNode *f, DdNode *g, DdNode *D); | |
| extern int Cudd_EqualSupNorm (DdManager *dd, DdNode *f, DdNode *g, CUDD_VALUE_TYPE tolerance, int pr); | |
| extern DdNode * Cudd_bddMakePrime (DdManager *dd, DdNode *cube, DdNode *f); | |
| extern DdNode * Cudd_bddMaximallyExpand(DdManager *dd, DdNode *lb, DdNode *ub, DdNode *f); | |
| extern DdNode * Cudd_bddLargestPrimeUnate(DdManager *dd , DdNode *f, DdNode *phaseBdd); | |
| extern double * Cudd_CofMinterm (DdManager *dd, DdNode *node); | |
| extern DdNode * Cudd_SolveEqn (DdManager * bdd, DdNode *F, DdNode *Y, DdNode **G, int **yIndex, int n); | |
| extern DdNode * Cudd_VerifySol (DdManager * bdd, DdNode *F, DdNode **G, int *yIndex, int n); | |
| extern DdNode * Cudd_SplitSet (DdManager *manager, DdNode *S, DdNode **xVars, int n, double m); | |
| extern DdNode * Cudd_SubsetHeavyBranch (DdManager *dd, DdNode *f, int numVars, int threshold); | |
| extern DdNode * Cudd_SupersetHeavyBranch (DdManager *dd, DdNode *f, int numVars, int threshold); | |
| extern DdNode * Cudd_SubsetShortPaths (DdManager *dd, DdNode *f, int numVars, int threshold, int hardlimit); | |
| extern DdNode * Cudd_SupersetShortPaths (DdManager *dd, DdNode *f, int numVars, int threshold, int hardlimit); | |
| extern void Cudd_SymmProfile (DdManager *table, int lower, int upper); | |
| extern unsigned int Cudd_Prime (unsigned int p); | |
| extern int Cudd_Reserve(DdManager *manager, int amount); | |
| extern int Cudd_PrintMinterm (DdManager *manager, DdNode *node); | |
| extern int Cudd_bddPrintCover (DdManager *dd, DdNode *l, DdNode *u); | |
| extern int Cudd_PrintDebug (DdManager *dd, DdNode *f, int n, int pr); | |
| extern int Cudd_DagSize (DdNode *node); | |
| extern int Cudd_EstimateCofactor (DdManager *dd, DdNode * node, int i, int phase); | |
| extern int Cudd_EstimateCofactorSimple (DdNode * node, int i); | |
| extern int Cudd_SharingSize (DdNode **nodeArray, int n); | |
| extern double Cudd_CountMinterm (DdManager *manager, DdNode *node, int nvars); | |
| extern int Cudd_EpdCountMinterm (DdManager *manager, DdNode *node, int nvars, EpDouble *epd); | |
| extern double Cudd_CountPath (DdNode *node); | |
| extern double Cudd_CountPathsToNonZero (DdNode *node); | |
| extern int Cudd_SupportIndices(DdManager * dd, DdNode * f, int **indices); | |
| extern DdNode * Cudd_Support (DdManager *dd, DdNode *f); | |
| extern int * Cudd_SupportIndex (DdManager *dd, DdNode *f); | |
| extern int Cudd_SupportSize (DdManager *dd, DdNode *f); | |
| extern int Cudd_VectorSupportIndices(DdManager * dd, DdNode ** F, int n, int **indices); | |
| extern DdNode * Cudd_VectorSupport (DdManager *dd, DdNode **F, int n); | |
| extern int * Cudd_VectorSupportIndex (DdManager *dd, DdNode **F, int n); | |
| extern int Cudd_VectorSupportSize (DdManager *dd, DdNode **F, int n); | |
| extern int Cudd_ClassifySupport (DdManager *dd, DdNode *f, DdNode *g, DdNode **common, DdNode **onlyF, DdNode **onlyG); | |
| extern int Cudd_CountLeaves (DdNode *node); | |
| extern int Cudd_bddPickOneCube (DdManager *ddm, DdNode *node, char *string); | |
| extern DdNode * Cudd_bddPickOneMinterm (DdManager *dd, DdNode *f, DdNode **vars, int n); | |
| extern DdNode ** Cudd_bddPickArbitraryMinterms (DdManager *dd, DdNode *f, DdNode **vars, int n, int k); | |
| extern DdNode * Cudd_SubsetWithMaskVars (DdManager *dd, DdNode *f, DdNode **vars, int nvars, DdNode **maskVars, int mvars); | |
| extern DdGen * Cudd_FirstCube (DdManager *dd, DdNode *f, int **cube, CUDD_VALUE_TYPE *value); | |
| extern int Cudd_NextCube (DdGen *gen, int **cube, CUDD_VALUE_TYPE *value); | |
| extern DdGen * Cudd_FirstPrime(DdManager *dd, DdNode *l, DdNode *u, int **cube); | |
| extern int Cudd_NextPrime(DdGen *gen, int **cube); | |
| extern DdNode * Cudd_bddComputeCube (DdManager *dd, DdNode **vars, int *phase, int n); | |
| extern DdNode * Cudd_addComputeCube (DdManager *dd, DdNode **vars, int *phase, int n); | |
| extern DdNode * Cudd_CubeArrayToBdd (DdManager *dd, int *array); | |
| extern int Cudd_BddToCubeArray (DdManager *dd, DdNode *cube, int *array); | |
| extern DdGen * Cudd_FirstNode (DdManager *dd, DdNode *f, DdNode **node); | |
| extern int Cudd_NextNode (DdGen *gen, DdNode **node); | |
| extern int Cudd_GenFree (DdGen *gen); | |
| extern int Cudd_IsGenEmpty (DdGen *gen); | |
| extern DdNode * Cudd_IndicesToCube (DdManager *dd, int *array, int n); | |
| extern void Cudd_PrintVersion (FILE *fp); | |
| extern double Cudd_AverageDistance (DdManager *dd); | |
| extern long Cudd_Random (void); | |
| extern void Cudd_Srandom (long seed); | |
| extern double Cudd_Density (DdManager *dd, DdNode *f, int nvars); | |
| extern void Cudd_OutOfMem (long size); | |
| extern int Cudd_zddCount (DdManager *zdd, DdNode *P); | |
| extern double Cudd_zddCountDouble (DdManager *zdd, DdNode *P); | |
| extern DdNode	* Cudd_zddProduct (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddUnateProduct (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddWeakDiv (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddDivide (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddWeakDivF (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddDivideF (DdManager *dd, DdNode *f, DdNode *g); | |
| extern DdNode	* Cudd_zddComplement (DdManager *dd, DdNode *node); | |
| extern MtrNode * Cudd_MakeZddTreeNode (DdManager *dd, unsigned int low, unsigned int size, unsigned int type); | |
| extern DdNode	* Cudd_zddIsop (DdManager *dd, DdNode *L, DdNode *U, DdNode **zdd_I); | |
| extern DdNode	* Cudd_bddIsop (DdManager *dd, DdNode *L, DdNode *U); | |
| extern DdNode	* Cudd_MakeBddFromZddCover (DdManager *dd, DdNode *node); | |
| extern int Cudd_zddDagSize (DdNode *p_node); | |
| extern double Cudd_zddCountMinterm (DdManager *zdd, DdNode *node, int path); | |
| extern void Cudd_zddPrintSubtable (DdManager *table); | |
| extern DdNode * Cudd_zddPortFromBdd (DdManager *dd, DdNode *B); | |
| extern DdNode * Cudd_zddPortToBdd (DdManager *dd, DdNode *f); | |
| extern int Cudd_zddReduceHeap (DdManager *table, Cudd_ReorderingType heuristic, int minsize); | |
| extern int Cudd_zddShuffleHeap (DdManager *table, int *permutation); | |
| extern DdNode * Cudd_zddIte (DdManager *dd, DdNode *f, DdNode *g, DdNode *h); | |
| extern DdNode * Cudd_zddUnion (DdManager *dd, DdNode *P, DdNode *Q); | |
| extern DdNode * Cudd_zddIntersect (DdManager *dd, DdNode *P, DdNode *Q); | |
| extern DdNode * Cudd_zddDiff (DdManager *dd, DdNode *P, DdNode *Q); | |
| extern DdNode * Cudd_zddDiffConst (DdManager *zdd, DdNode *P, DdNode *Q); | |
| extern DdNode * Cudd_zddSubset1 (DdManager *dd, DdNode *P, int var); | |
| extern DdNode * Cudd_zddSubset0 (DdManager *dd, DdNode *P, int var); | |
| extern DdNode * Cudd_zddChange (DdManager *dd, DdNode *P, int var); | |
| extern void Cudd_zddSymmProfile (DdManager *table, int lower, int upper); | |
| extern int Cudd_zddPrintMinterm (DdManager *zdd, DdNode *node); | |
| extern int Cudd_zddPrintCover (DdManager *zdd, DdNode *node); | |
| extern int Cudd_zddPrintDebug (DdManager *zdd, DdNode *f, int n, int pr); | |
| extern DdGen * Cudd_zddFirstPath (DdManager *zdd, DdNode *f, int **path); | |
| extern int Cudd_zddNextPath (DdGen *gen, int **path); | |
| extern char * Cudd_zddCoverPathToString (DdManager *zdd, int *path, char *str); | |
| extern DdNode * Cudd_zddSupport(DdManager * dd, DdNode * f); | |
| extern int Cudd_zddDumpDot (DdManager *dd, int n, DdNode **f, char **inames, char **onames, FILE *fp); | |
| extern int Cudd_bddSetPiVar (DdManager *dd, int index); | |
| extern int Cudd_bddSetPsVar (DdManager *dd, int index); | |
| extern int Cudd_bddSetNsVar (DdManager *dd, int index); | |
| extern int Cudd_bddIsPiVar (DdManager *dd, int index); | |
| extern int Cudd_bddIsPsVar (DdManager *dd, int index); | |
| extern int Cudd_bddIsNsVar (DdManager *dd, int index); | |
| extern int Cudd_bddSetPairIndex (DdManager *dd, int index, int pairIndex); | |
| extern int Cudd_bddReadPairIndex (DdManager *dd, int index); | |
| extern int Cudd_bddSetVarToBeGrouped (DdManager *dd, int index); | |
| extern int Cudd_bddSetVarHardGroup (DdManager *dd, int index); | |
| extern int Cudd_bddResetVarToBeGrouped (DdManager *dd, int index); | |
| extern int Cudd_bddIsVarToBeGrouped (DdManager *dd, int index); | |
| extern int Cudd_bddSetVarToBeUngrouped (DdManager *dd, int index); | |
| extern int Cudd_bddIsVarToBeUngrouped (DdManager *dd, int index); | |
| extern int Cudd_bddIsVarHardGroup (DdManager *dd, int index); | |
| 
 | |
| /**AutomaticEnd***************************************************************/ | |
| 
 | |
| #ifdef __cplusplus | |
| } /* end of extern "C" */ | |
| #endif | |
|  | |
| #endif /* _CUDD */
 |