diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2007-09-30 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2007-09-30 08:01:00 -0700 |
commit | e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7 (patch) | |
tree | de3ffe87c3e17950351e3b7d97fa18318bd5ea9a /src/bdd/cudd/cuddInt.h | |
parent | 7d7e60f2dc84393cd4c5db22d2eaf7b1fb1a79b2 (diff) | |
download | abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.gz abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.bz2 abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.zip |
Version abc70930
Diffstat (limited to 'src/bdd/cudd/cuddInt.h')
-rw-r--r-- | src/bdd/cudd/cuddInt.h | 1133 |
1 files changed, 0 insertions, 1133 deletions
diff --git a/src/bdd/cudd/cuddInt.h b/src/bdd/cudd/cuddInt.h deleted file mode 100644 index a5d0cf16..00000000 --- a/src/bdd/cudd/cuddInt.h +++ /dev/null @@ -1,1133 +0,0 @@ -/**CHeaderFile***************************************************************** - - FileName [cuddInt.h] - - PackageName [cudd] - - Synopsis [Internal data structures of the CUDD package.] - - Description [] - - SeeAlso [] - - Author [Fabio Somenzi] - - Copyright [This file was created at the University of Colorado at - Boulder. The University of Colorado at Boulder makes no warranty - about the suitability of this software for any purpose. It is - presented on an AS IS basis.] - - Revision [$Id: cuddInt.h,v 1.1.1.1 2003/02/24 22:23:52 wjiang Exp $] - -******************************************************************************/ - -#ifndef _CUDDINT -#define _CUDDINT - - -/*---------------------------------------------------------------------------*/ -/* Nested includes */ -/*---------------------------------------------------------------------------*/ - -#ifdef DD_MIS -#include "array.h" -#include "list.h" -#include "st.h" -#include "espresso.h" -#include "node.h" -#ifdef SIS -#include "graph.h" -#include "astg.h" -#endif -#include "network.h" -#endif - -#include <math.h> -#include "cudd.h" -#include "st.h" - -#if defined(__GNUC__) -# define DD_INLINE __inline__ -# if (__GNUC__ >2 || __GNUC_MINOR__ >=7) -# define DD_UNUSED __attribute__ ((__unused__)) -# else -# define DD_UNUSED -# endif -#else -# if defined(__cplusplus) -# define DD_INLINE inline -# else -# define DD_INLINE -# endif -# define DD_UNUSED -#endif - - -/*---------------------------------------------------------------------------*/ -/* Constant declarations */ -/*---------------------------------------------------------------------------*/ - -#define DD_MAXREF ((DdHalfWord) ~0) - -#define DD_DEFAULT_RESIZE 10 /* how many extra variables */ - /* should be added when resizing */ -#define DD_MEM_CHUNK 1022 - -/* These definitions work for CUDD_VALUE_TYPE == double */ -#define DD_ONE_VAL (1.0) -#define DD_ZERO_VAL (0.0) -#define DD_EPSILON (1.0e-12) - -/* The definitions of +/- infinity in terms of HUGE_VAL work on -** the DECstations and on many other combinations of OS/compiler. -*/ -#ifdef HAVE_IEEE_754 -# define DD_PLUS_INF_VAL (HUGE_VAL) -#else -# define DD_PLUS_INF_VAL (10e301) -# define DD_CRI_HI_MARK (10e150) -# define DD_CRI_LO_MARK (-(DD_CRI_HI_MARK)) -#endif -#define DD_MINUS_INF_VAL (-(DD_PLUS_INF_VAL)) - -#define DD_NON_CONSTANT ((DdNode *) 1) /* for Cudd_bddIteConstant */ - -/* Unique table and cache management constants. */ -#define DD_MAX_SUBTABLE_DENSITY 4 /* tells when to resize a subtable */ -/* gc when this percent are dead (measured w.r.t. slots, not keys) -** The first limit (LO) applies normally. The second limit applies when -** the package believes more space for the unique table (i.e., more dead -** nodes) would improve performance, and the unique table is not already -** too large. The third limit applies when memory is low. -*/ -#define DD_GC_FRAC_LO DD_MAX_SUBTABLE_DENSITY * 0.25 -#define DD_GC_FRAC_HI DD_MAX_SUBTABLE_DENSITY * 1.0 -#define DD_GC_FRAC_MIN 0.2 -#define DD_MIN_HIT 30 /* resize cache when hit ratio - above this percentage (default) */ -#define DD_MAX_LOOSE_FRACTION 5 /* 1 / (max fraction of memory used for - unique table in fast growth mode) */ -#define DD_MAX_CACHE_FRACTION 3 /* 1 / (max fraction of memory used for - computed table if resizing enabled) */ -#define DD_STASH_FRACTION 64 /* 1 / (fraction of memory set - aside for emergencies) */ -#define DD_MAX_CACHE_TO_SLOTS_RATIO 4 /* used to limit the cache size */ - -/* Variable ordering default parameter values. */ -#define DD_SIFT_MAX_VAR 1000 -#define DD_SIFT_MAX_SWAPS 2000000 -#define DD_DEFAULT_RECOMB 0 -#define DD_MAX_REORDER_GROWTH 1.2 -#define DD_FIRST_REORDER 4004 /* 4 for the constants */ -#define DD_DYN_RATIO 2 /* when to dynamically reorder */ - -/* Primes for cache hash functions. */ -#define DD_P1 12582917 -#define DD_P2 4256249 -#define DD_P3 741457 -#define DD_P4 1618033999 - -/* Cache tags for 3-operand operators. These tags are stored in the -** least significant bits of the cache operand pointers according to -** the following scheme. The tag consists of two hex digits. Both digits -** must be even, so that they do not interfere with complementation bits. -** The least significant one is stored in Bits 3:1 of the f operand in the -** cache entry. Bit 1 is always 1, so that we can differentiate -** three-operand operations from one- and two-operand operations. -** Therefore, the least significant digit is one of {2,6,a,e}. The most -** significant digit occupies Bits 3:1 of the g operand in the cache -** entry. It can by any even digit between 0 and e. This gives a total -** of 5 bits for the tag proper, which means a maximum of 32 three-operand -** operations. */ -#define DD_ADD_ITE_TAG 0x02 -#define DD_BDD_AND_ABSTRACT_TAG 0x06 -#define DD_BDD_XOR_EXIST_ABSTRACT_TAG 0x0a -#define DD_BDD_ITE_TAG 0x0e -#define DD_ADD_BDD_DO_INTERVAL_TAG 0x22 -#define DD_BDD_CLIPPING_AND_ABSTRACT_UP_TAG 0x26 -#define DD_BDD_CLIPPING_AND_ABSTRACT_DOWN_TAG 0x2a -#define DD_BDD_COMPOSE_RECUR_TAG 0x2e -#define DD_ADD_COMPOSE_RECUR_TAG 0x42 -#define DD_ADD_NON_SIM_COMPOSE_TAG 0x46 -#define DD_EQUIV_DC_TAG 0x4a -#define DD_ZDD_ITE_TAG 0x4e -#define DD_ADD_ITE_CONSTANT_TAG 0x62 -#define DD_ADD_EVAL_CONST_TAG 0x66 -#define DD_BDD_ITE_CONSTANT_TAG 0x6a -#define DD_ADD_OUT_SUM_TAG 0x6e -#define DD_BDD_LEQ_UNLESS_TAG 0x82 -#define DD_ADD_TRIANGLE_TAG 0x86 - -/* Generator constants. */ -#define CUDD_GEN_CUBES 0 -#define CUDD_GEN_NODES 1 -#define CUDD_GEN_ZDD_PATHS 2 -#define CUDD_GEN_EMPTY 0 -#define CUDD_GEN_NONEMPTY 1 - - -/*---------------------------------------------------------------------------*/ -/* Stucture declarations */ -/*---------------------------------------------------------------------------*/ - -struct DdGen { - DdManager *manager; - int type; - int status; - union { - struct { - int *cube; - CUDD_VALUE_TYPE value; - } cubes; - struct { - st_table *visited; - st_generator *stGen; - } nodes; - } gen; - struct { - int sp; - DdNode **stack; - } stack; - DdNode *node; -}; - -/*---------------------------------------------------------------------------*/ -/* Type declarations */ -/*---------------------------------------------------------------------------*/ - -/* Hooks in CUDD are functions that the application registers with the -** manager so that they are called at appropriate times. The functions -** are passed the manager as argument; they should return 1 if -** successful and 0 otherwise. -*/ -typedef struct DdHook { /* hook list element */ - int (*f) ARGS((DdManager *, char *, void *)); /* function to be called */ - struct DdHook *next; /* next element in the list */ -} DdHook; - -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -typedef long ptrint; -typedef unsigned long ptruint; -#else -typedef int ptrint; -typedef unsigned int ptruint; -#endif - -#ifdef __osf__ -#pragma pointer_size save -#pragma pointer_size short -#endif - -typedef DdNode *DdNodePtr; - -/* Generic local cache item. */ -typedef struct DdLocalCacheItem { - DdNode *value; -#ifdef DD_CACHE_PROFILE - ptrint count; -#endif - DdNode *key[1]; -} DdLocalCacheItem; - -/* Local cache. */ -typedef struct DdLocalCache { - DdLocalCacheItem *item; - unsigned int itemsize; - unsigned int keysize; - unsigned int slots; - int shift; - double lookUps; - double minHit; - double hits; - unsigned int maxslots; - DdManager *manager; - struct DdLocalCache *next; -} DdLocalCache; - -/* Generic hash item. */ -typedef struct DdHashItem { - struct DdHashItem *next; - ptrint count; - DdNode *value; - DdNode *key[1]; -} DdHashItem; - -/* Local hash table */ -typedef struct DdHashTable { - unsigned int keysize; - unsigned int itemsize; - DdHashItem **bucket; - DdHashItem *nextFree; - DdHashItem **memoryList; - unsigned int numBuckets; - int shift; - unsigned int size; - unsigned int maxsize; - DdManager *manager; -} DdHashTable; - -typedef struct DdCache { - DdNode *f,*g; /* DDs */ - ptruint h; /* either operator or DD */ - DdNode *data; /* already constructed DD */ -#ifdef DD_CACHE_PROFILE - ptrint count; -#endif -} DdCache; - -typedef struct DdSubtable { /* subtable for one index */ - DdNode **nodelist; /* hash table */ - int shift; /* shift for hash function */ - unsigned int slots; /* size of the hash table */ - unsigned int keys; /* number of nodes stored in this table */ - unsigned int maxKeys; /* slots * DD_MAX_SUBTABLE_DENSITY */ - unsigned int dead; /* number of dead nodes in this table */ - unsigned int next; /* index of next variable in group */ - int bindVar; /* flag to bind this variable to its level */ - /* Fields for lazy sifting. */ - Cudd_VariableType varType; /* variable type (ps, ns, pi) */ - int pairIndex; /* corresponding variable index (ps <-> ns) */ - int varHandled; /* flag: 1 means variable is already handled */ - Cudd_LazyGroupType varToBeGrouped; /* tells what grouping to apply */ -} DdSubtable; - -struct DdManager { /* specialized DD symbol table */ - /* Constants */ - DdNode sentinel; /* for collision lists */ - DdNode *one; /* constant 1 */ - DdNode *zero; /* constant 0 */ - DdNode *plusinfinity; /* plus infinity */ - DdNode *minusinfinity; /* minus infinity */ - DdNode *background; /* background value */ - /* Computed Table */ - DdCache *acache; /* address of allocated memory for cache */ - DdCache *cache; /* the cache-based computed table */ - unsigned int cacheSlots; /* total number of cache entries */ - int cacheShift; /* shift value for cache hash function */ - double cacheMisses; /* number of cache misses (since resizing) */ - double cacheHits; /* number of cache hits (since resizing) */ - double minHit; /* hit percentage above which to resize */ - int cacheSlack; /* slots still available for resizing */ - unsigned int maxCacheHard; /* hard limit for cache size */ - /* Unique Table */ - int size; /* number of unique subtables */ - int sizeZ; /* for ZDD */ - int maxSize; /* max number of subtables before resizing */ - int maxSizeZ; /* for ZDD */ - DdSubtable *subtables; /* array of unique subtables */ - DdSubtable *subtableZ; /* for ZDD */ - DdSubtable constants; /* unique subtable for the constants */ - unsigned int slots; /* total number of hash buckets */ - unsigned int keys; /* total number of BDD and ADD nodes */ - unsigned int keysZ; /* total number of ZDD nodes */ - unsigned int dead; /* total number of dead BDD and ADD nodes */ - unsigned int deadZ; /* total number of dead ZDD nodes */ - unsigned int maxLive; /* maximum number of live nodes */ - unsigned int minDead; /* do not GC if fewer than these dead */ - double gcFrac; /* gc when this fraction is dead */ - int gcEnabled; /* gc is enabled */ - unsigned int looseUpTo; /* slow growth beyond this limit */ - /* (measured w.r.t. slots, not keys) */ - unsigned int initSlots; /* initial size of a subtable */ - DdNode **stack; /* stack for iterative procedures */ - double allocated; /* number of nodes allocated */ - /* (not during reordering) */ - double reclaimed; /* number of nodes brought back from the dead */ - int isolated; /* isolated projection functions */ - int *perm; /* current variable perm. (index to level) */ - int *permZ; /* for ZDD */ - int *invperm; /* current inv. var. perm. (level to index) */ - int *invpermZ; /* for ZDD */ - DdNode **vars; /* projection functions */ - int *map; /* variable map for fast swap */ - DdNode **univ; /* ZDD 1 for each variable */ - int linearSize; /* number of rows and columns of linear */ - long *interact; /* interacting variable matrix */ - long *linear; /* linear transform matrix */ - /* Memory Management */ - DdNode **memoryList; /* memory manager for symbol table */ - DdNode *nextFree; /* list of free nodes */ - char *stash; /* memory reserve */ -#ifndef DD_NO_DEATH_ROW - DdNode **deathRow; /* queue for dereferencing */ - int deathRowDepth; /* number of slots in the queue */ - int nextDead; /* index in the queue */ - unsigned deadMask; /* mask for circular index update */ -#endif - /* General Parameters */ - CUDD_VALUE_TYPE epsilon; /* tolerance on comparisons */ - /* Dynamic Reordering Parameters */ - int reordered; /* flag set at the end of reordering */ - int reorderings; /* number of calls to Cudd_ReduceHeap */ - int siftMaxVar; /* maximum number of vars sifted */ - int siftMaxSwap; /* maximum number of swaps per sifting */ - double maxGrowth; /* maximum growth during reordering */ - double maxGrowthAlt; /* alternate maximum growth for reordering */ - int reordCycle; /* how often to apply alternate threshold */ - int autoDyn; /* automatic dynamic reordering flag (BDD) */ - int autoDynZ; /* automatic dynamic reordering flag (ZDD) */ - Cudd_ReorderingType autoMethod; /* default reordering method */ - Cudd_ReorderingType autoMethodZ; /* default reordering method (ZDD) */ - int realign; /* realign ZDD order after BDD reordering */ - int realignZ; /* realign BDD order after ZDD reordering */ - unsigned int nextDyn; /* reorder if this size is reached */ - unsigned int countDead; /* if 0, count deads to trigger reordering */ - MtrNode *tree; /* Variable group tree (BDD) */ - MtrNode *treeZ; /* Variable group tree (ZDD) */ - Cudd_AggregationType groupcheck; /* Used during group sifting */ - int recomb; /* Used during group sifting */ - int symmviolation; /* Used during group sifting */ - int arcviolation; /* Used during group sifting */ - int populationSize; /* population size for GA */ - int numberXovers; /* number of crossovers for GA */ - DdLocalCache *localCaches; /* local caches currently in existence */ -#ifdef __osf__ -#pragma pointer_size restore -#endif - char *hooks; /* application-specific field (used by vis) */ - DdHook *preGCHook; /* hooks to be called before GC */ - DdHook *postGCHook; /* hooks to be called after GC */ - DdHook *preReorderingHook; /* hooks to be called before reordering */ - DdHook *postReorderingHook; /* hooks to be called after reordering */ - FILE *out; /* stdout for this manager */ - FILE *err; /* stderr for this manager */ -#ifdef __osf__ -#pragma pointer_size save -#pragma pointer_size short -#endif - Cudd_ErrorType errorCode; /* info on last error */ - /* Statistical counters. */ - long memused; /* total memory allocated for the manager */ - long maxmem; /* target maximum memory */ - long maxmemhard; /* hard limit for maximum memory */ - int garbageCollections; /* number of garbage collections */ - long GCTime; /* total time spent in garbage collection */ - long reordTime; /* total time spent in reordering */ - double totCachehits; /* total number of cache hits */ - double totCacheMisses; /* total number of cache misses */ - double cachecollisions; /* number of cache collisions */ - double cacheinserts; /* number of cache insertions */ - double cacheLastInserts; /* insertions at the last cache resizing */ - double cachedeletions; /* number of deletions during garbage coll. */ -#ifdef DD_STATS - double nodesFreed; /* number of nodes returned to the free list */ - double nodesDropped; /* number of nodes killed by dereferencing */ -#endif - unsigned int peakLiveNodes; /* maximum number of live nodes */ -#ifdef DD_UNIQUE_PROFILE - double uniqueLookUps; /* number of unique table lookups */ - double uniqueLinks; /* total distance traveled in coll. chains */ -#endif -#ifdef DD_COUNT - double recursiveCalls; /* number of recursive calls */ -#ifdef DD_STATS - double nextSample; /* when to write next line of stats */ -#endif - double swapSteps; /* number of elementary reordering steps */ -#endif -#ifdef DD_MIS - /* mis/verif compatibility fields */ - array_t *iton; /* maps ids in ddNode to node_t */ - array_t *order; /* copy of order_list */ - lsHandle handle; /* where it is in network BDD list */ - network_t *network; - st_table *local_order; /* for local BDDs */ - int nvars; /* variables used so far */ - int threshold; /* for pseudo var threshold value*/ -#endif -}; - -typedef struct Move { - DdHalfWord x; - DdHalfWord y; - unsigned int flags; - int size; - struct Move *next; -} Move; - -/* Generic level queue item. */ -typedef struct DdQueueItem { - struct DdQueueItem *next; - struct DdQueueItem *cnext; - void *key; -} DdQueueItem; - -/* Level queue. */ -typedef struct DdLevelQueue { - void *first; - DdQueueItem **last; - DdQueueItem *freelist; - DdQueueItem **buckets; - int levels; - int itemsize; - int size; - int maxsize; - int numBuckets; - int shift; -} DdLevelQueue; - -#ifdef __osf__ -#pragma pointer_size restore -#endif - -/*---------------------------------------------------------------------------*/ -/* Variable declarations */ -/*---------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------*/ -/* Macro declarations */ -/*---------------------------------------------------------------------------*/ - -/**Macro*********************************************************************** - - Synopsis [Adds node to the head of the free list.] - - Description [Adds node to the head of the free list. Does not - deallocate memory chunks that become free. This function is also - used by the dynamic reordering functions.] - - SideEffects [None] - - SeeAlso [cuddAllocNode cuddDynamicAllocNode] - -******************************************************************************/ -#define cuddDeallocNode(unique,node) \ - (node)->next = (unique)->nextFree; \ - (unique)->nextFree = node; - - -/**Macro*********************************************************************** - - Synopsis [Increases the reference count of a node, if it is not - saturated.] - - Description [Increases the reference count of a node, if it is not - saturated. This being a macro, it is faster than Cudd_Ref, but it - cannot be used in constructs like cuddRef(a = b()).] - - SideEffects [none] - - SeeAlso [Cudd_Ref] - -******************************************************************************/ -#define cuddRef(n) cuddSatInc(Cudd_Regular(n)->ref) - - -/**Macro*********************************************************************** - - Synopsis [Decreases the reference count of a node, if it is not - saturated.] - - Description [Decreases the reference count of node. It is primarily - used in recursive procedures to decrease the ref count of a result - node before returning it. This accomplishes the goal of removing the - protection applied by a previous cuddRef. This being a macro, it is - faster than Cudd_Deref, but it cannot be used in constructs like - cuddDeref(a = b()).] - - SideEffects [none] - - SeeAlso [Cudd_Deref] - -******************************************************************************/ -#define cuddDeref(n) cuddSatDec(Cudd_Regular(n)->ref) - - -/**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 cuddIsConstant must be regular.] - - SideEffects [none] - - SeeAlso [Cudd_IsConstant] - -******************************************************************************/ -#define cuddIsConstant(node) ((node)->index == CUDD_CONST_INDEX) - - -/**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. - The pointer passed to cuddT must be regular.] - - SideEffects [none] - - SeeAlso [Cudd_T] - -******************************************************************************/ -#define cuddT(node) ((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. - The pointer passed to cuddE must be regular.] - - SideEffects [none] - - SeeAlso [Cudd_E] - -******************************************************************************/ -#define cuddE(node) ((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. - The pointer passed to cuddV must be regular.] - - SideEffects [none] - - SeeAlso [Cudd_V] - -******************************************************************************/ -#define cuddV(node) ((node)->type.value) - - -/**Macro*********************************************************************** - - Synopsis [Finds the current position of variable index in the - order.] - - Description [Finds the current position of variable index in the - order. This macro duplicates the functionality of Cudd_ReadPerm, - but it does not check for out-of-bounds indices and it is more - efficient.] - - SideEffects [none] - - SeeAlso [Cudd_ReadPerm] - -******************************************************************************/ -#define cuddI(dd,index) (((index)==CUDD_CONST_INDEX)?(int)(index):(dd)->perm[(index)]) - - -/**Macro*********************************************************************** - - Synopsis [Finds the current position of ZDD variable index in the - order.] - - Description [Finds the current position of ZDD variable index in the - order. This macro duplicates the functionality of Cudd_ReadPermZdd, - but it does not check for out-of-bounds indices and it is more - efficient.] - - SideEffects [none] - - SeeAlso [Cudd_ReadPermZdd] - -******************************************************************************/ -#define cuddIZ(dd,index) (((index)==CUDD_CONST_INDEX)?(int)(index):(dd)->permZ[(index)]) - - -/**Macro*********************************************************************** - - Synopsis [Hash function for the unique table.] - - Description [] - - SideEffects [none] - - SeeAlso [ddCHash ddCHash2] - -******************************************************************************/ -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -#define ddHash(f,g,s) \ -((((unsigned)(unsigned long)(f) * DD_P1 + \ - (unsigned)(unsigned long)(g)) * DD_P2) >> (s)) -#else -#define ddHash(f,g,s) \ -((((unsigned)(f) * DD_P1 + (unsigned)(g)) * DD_P2) >> (s)) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Hash function for the cache.] - - Description [] - - SideEffects [none] - - SeeAlso [ddHash ddCHash2] - -******************************************************************************/ -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -#define ddCHash(o,f,g,h,s) \ -((((((unsigned)(unsigned long)(f) + (unsigned)(unsigned long)(o)) * DD_P1 + \ - (unsigned)(unsigned long)(g)) * DD_P2 + \ - (unsigned)(unsigned long)(h)) * DD_P3) >> (s)) -#else -#define ddCHash(o,f,g,h,s) \ -((((((unsigned)(f) + (unsigned)(o)) * DD_P1 + (unsigned)(g)) * DD_P2 + \ - (unsigned)(h)) * DD_P3) >> (s)) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Hash function for the cache for functions with two - operands.] - - Description [] - - SideEffects [none] - - SeeAlso [ddHash ddCHash] - -******************************************************************************/ -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -#define ddCHash2(o,f,g,s) \ -(((((unsigned)(unsigned long)(f) + (unsigned)(unsigned long)(o)) * DD_P1 + \ - (unsigned)(unsigned long)(g)) * DD_P2) >> (s)) -#else -#define ddCHash2(o,f,g,s) \ -(((((unsigned)(f) + (unsigned)(o)) * DD_P1 + (unsigned)(g)) * DD_P2) >> (s)) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Clears the 4 least significant bits of a pointer.] - - Description [] - - SideEffects [none] - - SeeAlso [] - -******************************************************************************/ -#define cuddClean(p) ((DdNode *)((ptruint)(p) & ~0xf)) - - -/**Macro*********************************************************************** - - Synopsis [Computes the minimum of two numbers.] - - Description [] - - SideEffects [none] - - SeeAlso [ddMax] - -******************************************************************************/ -#define ddMin(x,y) (((y) < (x)) ? (y) : (x)) - - -/**Macro*********************************************************************** - - Synopsis [Computes the maximum of two numbers.] - - Description [] - - SideEffects [none] - - SeeAlso [ddMin] - -******************************************************************************/ -#define ddMax(x,y) (((y) > (x)) ? (y) : (x)) - - -/**Macro*********************************************************************** - - Synopsis [Computes the absolute value of a number.] - - Description [] - - SideEffects [none] - - SeeAlso [] - -******************************************************************************/ -#define ddAbs(x) (((x)<0) ? -(x) : (x)) - - -/**Macro*********************************************************************** - - Synopsis [Returns 1 if the absolute value of the difference of the two - arguments x and y is less than e.] - - Description [] - - SideEffects [none] - - SeeAlso [] - -******************************************************************************/ -#define ddEqualVal(x,y,e) (ddAbs((x)-(y))<(e)) - - -/**Macro*********************************************************************** - - Synopsis [Saturating increment operator.] - - Description [] - - SideEffects [none] - - SeeAlso [cuddSatDec] - -******************************************************************************/ -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -#define cuddSatInc(x) ((x)++) -#else -#define cuddSatInc(x) ((x) += (x) != (DdHalfWord)DD_MAXREF) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Saturating decrement operator.] - - Description [] - - SideEffects [none] - - SeeAlso [cuddSatInc] - -******************************************************************************/ -#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4 -#define cuddSatDec(x) ((x)--) -#else -#define cuddSatDec(x) ((x) -= (x) != (DdHalfWord)DD_MAXREF) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Returns the constant 1 node.] - - Description [] - - SideEffects [none] - - SeeAlso [DD_ZERO DD_PLUS_INFINITY DD_MINUS_INFINITY] - -******************************************************************************/ -#define DD_ONE(dd) ((dd)->one) - - -/**Macro*********************************************************************** - - Synopsis [Returns the arithmetic 0 constant node.] - - Description [Returns the arithmetic 0 constant node. This is different - from the logical zero. The latter is obtained by - Cudd_Not(DD_ONE(dd)).] - - SideEffects [none] - - SeeAlso [DD_ONE Cudd_Not DD_PLUS_INFINITY DD_MINUS_INFINITY] - -******************************************************************************/ -#define DD_ZERO(dd) ((dd)->zero) - - -/**Macro*********************************************************************** - - Synopsis [Returns the plus infinity constant node.] - - Description [] - - SideEffects [none] - - SeeAlso [DD_ONE DD_ZERO DD_MINUS_INFINITY] - -******************************************************************************/ -#define DD_PLUS_INFINITY(dd) ((dd)->plusinfinity) - - -/**Macro*********************************************************************** - - Synopsis [Returns the minus infinity constant node.] - - Description [] - - SideEffects [none] - - SeeAlso [DD_ONE DD_ZERO DD_PLUS_INFINITY] - -******************************************************************************/ -#define DD_MINUS_INFINITY(dd) ((dd)->minusinfinity) - - -/**Macro*********************************************************************** - - Synopsis [Enforces DD_MINUS_INF_VAL <= x <= DD_PLUS_INF_VAL.] - - Description [Enforces DD_MINUS_INF_VAL <= x <= DD_PLUS_INF_VAL. - Furthermore, if x <= DD_MINUS_INF_VAL/2, x is set to - DD_MINUS_INF_VAL. Similarly, if DD_PLUS_INF_VAL/2 <= x, x is set to - DD_PLUS_INF_VAL. Normally this macro is a NOOP. However, if - HAVE_IEEE_754 is not defined, it makes sure that a value does not - get larger than infinity in absolute value, and once it gets to - infinity, stays there. If the value overflows before this macro is - applied, no recovery is possible.] - - SideEffects [none] - - SeeAlso [] - -******************************************************************************/ -#ifdef HAVE_IEEE_754 -#define cuddAdjust(x) -#else -#define cuddAdjust(x) ((x) = ((x) >= DD_CRI_HI_MARK) ? DD_PLUS_INF_VAL : (((x) <= DD_CRI_LO_MARK) ? DD_MINUS_INF_VAL : (x))) -#endif - - -/**Macro*********************************************************************** - - Synopsis [Extract the least significant digit of a double digit.] - - Description [Extract the least significant digit of a double digit. Used - in the manipulation of arbitrary precision integers.] - - SideEffects [None] - - SeeAlso [DD_MSDIGIT] - -******************************************************************************/ -#define DD_LSDIGIT(x) ((x) & DD_APA_MASK) - - -/**Macro*********************************************************************** - - Synopsis [Extract the most significant digit of a double digit.] - - Description [Extract the most significant digit of a double digit. Used - in the manipulation of arbitrary precision integers.] - - SideEffects [None] - - SeeAlso [DD_LSDIGIT] - -******************************************************************************/ -#define DD_MSDIGIT(x) ((x) >> DD_APA_BITS) - - -/**Macro*********************************************************************** - - Synopsis [Outputs a line of stats.] - - Description [Outputs a line of stats if DD_COUNT and DD_STATS are - defined. Increments the number of recursive calls if DD_COUNT is - defined.] - - SideEffects [None] - - SeeAlso [] - -******************************************************************************/ -#ifdef DD_COUNT -#ifdef DD_STATS -#define statLine(dd) dd->recursiveCalls++; \ -if (dd->recursiveCalls == dd->nextSample) {(void) fprintf(dd->err, \ -"@%.0f: %u nodes %u live %.0f dropped %.0f reclaimed\n", dd->recursiveCalls, \ -dd->keys, dd->keys - dd->dead, dd->nodesDropped, dd->reclaimed); \ -dd->nextSample += 250000;} -#else -#define statLine(dd) dd->recursiveCalls++; -#endif -#else -#define statLine(dd) -#endif - - -/**AutomaticStart*************************************************************/ - -/*---------------------------------------------------------------------------*/ -/* Function prototypes */ -/*---------------------------------------------------------------------------*/ - -EXTERN DdNode * cuddAddExistAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *cube)); -EXTERN DdNode * cuddAddUnivAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *cube)); -EXTERN DdNode * cuddAddOrAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *cube)); -EXTERN DdNode * cuddAddApplyRecur ARGS((DdManager *dd, DdNode * (*)(DdManager *, DdNode **, DdNode **), DdNode *f, DdNode *g)); -EXTERN DdNode * cuddAddMonadicApplyRecur ARGS((DdManager * dd, DdNode * (*op)(DdManager *, DdNode *), DdNode * f)); -EXTERN DdNode * cuddAddScalarInverseRecur ARGS((DdManager *dd, DdNode *f, DdNode *epsilon)); -EXTERN DdNode * cuddAddIteRecur ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddAddCmplRecur ARGS((DdManager *dd, DdNode *f)); -EXTERN DdNode * cuddAddNegateRecur ARGS((DdManager *dd, DdNode *f)); -EXTERN DdNode * cuddAddRoundOffRecur ARGS((DdManager *dd, DdNode *f, double trunc)); -EXTERN DdNode * cuddUnderApprox ARGS((DdManager *dd, DdNode *f, int numVars, int threshold, int safe, double quality)); -EXTERN DdNode * cuddRemapUnderApprox ARGS((DdManager *dd, DdNode *f, int numVars, int threshold, double quality)); -EXTERN DdNode * cuddBiasedUnderApprox ARGS((DdManager *dd, DdNode *f, DdNode *b, int numVars, int threshold, double quality1, double quality0)); -EXTERN DdNode * cuddBddAndAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *g, DdNode *cube)); -EXTERN int cuddAnnealing ARGS((DdManager *table, int lower, int upper)); -EXTERN DdNode * cuddBddExistAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *cube)); -EXTERN DdNode * cuddBddXorExistAbstractRecur ARGS((DdManager *manager, DdNode *f, DdNode *g, DdNode *cube)); -EXTERN DdNode * cuddBddBooleanDiffRecur ARGS((DdManager *manager, DdNode *f, DdNode *var)); -EXTERN DdNode * cuddBddIteRecur ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddBddIntersectRecur ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddBddAndRecur ARGS((DdManager *manager, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddBddXorRecur ARGS((DdManager *manager, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddBddTransfer ARGS((DdManager *ddS, DdManager *ddD, DdNode *f)); -EXTERN DdNode * cuddAddBddDoPattern ARGS((DdManager *dd, DdNode *f)); -EXTERN int cuddInitCache ARGS((DdManager *unique, unsigned int cacheSize, unsigned int maxCacheSize)); -EXTERN void cuddCacheInsert ARGS((DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)); -EXTERN void cuddCacheInsert2 ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g, DdNode *data)); -EXTERN void cuddCacheInsert1 ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f, DdNode *data)); -EXTERN DdNode * cuddCacheLookup ARGS((DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddCacheLookupZdd ARGS((DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddCacheLookup2 ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g)); -EXTERN DdNode * cuddCacheLookup1 ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f)); -EXTERN DdNode * cuddCacheLookup2Zdd ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g)); -EXTERN DdNode * cuddCacheLookup1Zdd ARGS((DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f)); -EXTERN DdNode * cuddConstantLookup ARGS((DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)); -EXTERN int cuddCacheProfile ARGS((DdManager *table, FILE *fp)); -EXTERN void cuddCacheResize ARGS((DdManager *table)); -EXTERN void cuddCacheFlush ARGS((DdManager *table)); -EXTERN int cuddComputeFloorLog2 ARGS((unsigned int value)); -EXTERN int cuddHeapProfile ARGS((DdManager *dd)); -EXTERN void cuddPrintNode ARGS((DdNode *f, FILE *fp)); -EXTERN void cuddPrintVarGroups ARGS((DdManager * dd, MtrNode * root, int zdd, int silent)); -EXTERN DdNode * cuddBddClippingAnd ARGS((DdManager *dd, DdNode *f, DdNode *g, int maxDepth, int direction)); -EXTERN DdNode * cuddBddClippingAndAbstract ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *cube, int maxDepth, int direction)); -EXTERN void cuddGetBranches ARGS((DdNode *g, DdNode **g1, DdNode **g0)); -EXTERN int cuddCheckCube ARGS((DdManager *dd, DdNode *g)); -EXTERN DdNode * cuddCofactorRecur ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddBddComposeRecur ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *proj)); -EXTERN DdNode * cuddAddComposeRecur ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *proj)); -EXTERN int cuddExact ARGS((DdManager *table, int lower, int upper)); -EXTERN DdNode * cuddBddConstrainRecur ARGS((DdManager *dd, DdNode *f, DdNode *c)); -EXTERN DdNode * cuddBddRestrictRecur ARGS((DdManager *dd, DdNode *f, DdNode *c)); -EXTERN DdNode * cuddAddConstrainRecur ARGS((DdManager *dd, DdNode *f, DdNode *c)); -EXTERN DdNode * cuddAddRestrictRecur ARGS((DdManager *dd, DdNode *f, DdNode *c)); -EXTERN DdNode * cuddBddLICompaction ARGS((DdManager *dd, DdNode *f, DdNode *c)); -EXTERN int cuddGa ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddTreeSifting ARGS((DdManager *table, Cudd_ReorderingType method)); -EXTERN int cuddZddInitUniv ARGS((DdManager *zdd)); -EXTERN void cuddZddFreeUniv ARGS((DdManager *zdd)); -EXTERN void cuddSetInteract ARGS((DdManager *table, int x, int y)); -EXTERN int cuddTestInteract ARGS((DdManager *table, int x, int y)); -EXTERN int cuddInitInteract ARGS((DdManager *table)); -EXTERN DdLocalCache * cuddLocalCacheInit ARGS((DdManager *manager, unsigned int keySize, unsigned int cacheSize, unsigned int maxCacheSize)); -EXTERN void cuddLocalCacheQuit ARGS((DdLocalCache *cache)); -EXTERN void cuddLocalCacheInsert ARGS((DdLocalCache *cache, DdNodePtr *key, DdNode *value)); -EXTERN DdNode * cuddLocalCacheLookup ARGS((DdLocalCache *cache, DdNodePtr *key)); -EXTERN void cuddLocalCacheClearDead ARGS((DdManager *manager)); -EXTERN int cuddIsInDeathRow ARGS((DdManager *dd, DdNode *f)); -EXTERN int cuddTimesInDeathRow ARGS((DdManager *dd, DdNode *f)); -EXTERN void cuddLocalCacheClearAll ARGS((DdManager *manager)); -#ifdef DD_CACHE_PROFILE -EXTERN int cuddLocalCacheProfile ARGS((DdLocalCache *cache)); -#endif -EXTERN DdHashTable * cuddHashTableInit ARGS((DdManager *manager, unsigned int keySize, unsigned int initSize)); -EXTERN void cuddHashTableQuit ARGS((DdHashTable *hash)); -EXTERN int cuddHashTableInsert ARGS((DdHashTable *hash, DdNodePtr *key, DdNode *value, ptrint count)); -EXTERN DdNode * cuddHashTableLookup ARGS((DdHashTable *hash, DdNodePtr *key)); -EXTERN int cuddHashTableInsert1 ARGS((DdHashTable *hash, DdNode *f, DdNode *value, ptrint count)); -EXTERN DdNode * cuddHashTableLookup1 ARGS((DdHashTable *hash, DdNode *f)); -EXTERN int cuddHashTableInsert2 ARGS((DdHashTable *hash, DdNode *f, DdNode *g, DdNode *value, ptrint count)); -EXTERN DdNode * cuddHashTableLookup2 ARGS((DdHashTable *hash, DdNode *f, DdNode *g)); -EXTERN int cuddHashTableInsert3 ARGS((DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h, DdNode *value, ptrint count)); -EXTERN DdNode * cuddHashTableLookup3 ARGS((DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdLevelQueue * cuddLevelQueueInit ARGS((int levels, int itemSize, int numBuckets)); -EXTERN void cuddLevelQueueQuit ARGS((DdLevelQueue *queue)); -EXTERN void * cuddLevelQueueEnqueue ARGS((DdLevelQueue *queue, void *key, int level)); -EXTERN void cuddLevelQueueDequeue ARGS((DdLevelQueue *queue, int level)); -EXTERN int cuddLinearAndSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN DdNode * cuddBddLiteralSetIntersectionRecur ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddCProjectionRecur ARGS((DdManager *dd, DdNode *R, DdNode *Y, DdNode *Ysupp)); -EXTERN DdNode * cuddBddClosestCube ARGS((DdManager *dd, DdNode *f, DdNode *g, CUDD_VALUE_TYPE bound)); -EXTERN void cuddReclaim ARGS((DdManager *table, DdNode *n)); -EXTERN void cuddReclaimZdd ARGS((DdManager *table, DdNode *n)); -EXTERN void cuddClearDeathRow ARGS((DdManager *table)); -EXTERN void cuddShrinkDeathRow ARGS((DdManager *table)); -EXTERN DdNode * cuddDynamicAllocNode ARGS((DdManager *table)); -EXTERN int cuddSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddSwapping ARGS((DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic)); -EXTERN int cuddNextHigh ARGS((DdManager *table, int x)); -EXTERN int cuddNextLow ARGS((DdManager *table, int x)); -EXTERN int cuddSwapInPlace ARGS((DdManager *table, int x, int y)); -EXTERN int cuddBddAlignToZdd ARGS((DdManager *table)); -EXTERN DdNode * cuddBddMakePrime ARGS((DdManager *dd, DdNode *cube, DdNode *f)); -EXTERN DdNode * cuddSolveEqnRecur ARGS((DdManager *bdd, DdNode *F, DdNode *Y, DdNode **G, int n, int *yIndex, int i)); -EXTERN DdNode * cuddVerifySol ARGS((DdManager *bdd, DdNode *F, DdNode **G, int *yIndex, int n)); -#ifdef ST_INCLUDED -EXTERN DdNode* cuddSplitSetRecur ARGS((DdManager *manager, st_table *mtable, int *varSeen, DdNode *p, double n, double max, int index)); -#endif -EXTERN DdNode * cuddSubsetHeavyBranch ARGS((DdManager *dd, DdNode *f, int numVars, int threshold)); -EXTERN DdNode * cuddSubsetShortPaths ARGS((DdManager *dd, DdNode *f, int numVars, int threshold, int hardlimit)); -EXTERN int cuddSymmCheck ARGS((DdManager *table, int x, int y)); -EXTERN int cuddSymmSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddSymmSiftingConv ARGS((DdManager *table, int lower, int upper)); -EXTERN DdNode * cuddAllocNode ARGS((DdManager *unique)); -EXTERN DdManager * cuddInitTable ARGS((unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int looseUpTo)); -EXTERN void cuddFreeTable ARGS((DdManager *unique)); -EXTERN int cuddGarbageCollect ARGS((DdManager *unique, int clearCache)); -EXTERN int cuddGarbageCollectZdd ARGS((DdManager *unique, int clearCache)); -EXTERN DdNode * cuddZddGetNode ARGS((DdManager *zdd, int id, DdNode *T, DdNode *E)); -EXTERN DdNode * cuddZddGetNodeIVO ARGS((DdManager *dd, int index, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddUniqueInter ARGS((DdManager *unique, int index, DdNode *T, DdNode *E)); -EXTERN DdNode * cuddUniqueInterIVO ARGS((DdManager *unique, int index, DdNode *T, DdNode *E)); -EXTERN DdNode * cuddUniqueInterZdd ARGS((DdManager *unique, int index, DdNode *T, DdNode *E)); -EXTERN DdNode * cuddUniqueConst ARGS((DdManager *unique, CUDD_VALUE_TYPE value)); -EXTERN void cuddRehash ARGS((DdManager *unique, int i)); -EXTERN void cuddShrinkSubtable ARGS((DdManager *unique, int i)); -EXTERN int cuddInsertSubtables ARGS((DdManager *unique, int n, int level)); -EXTERN int cuddDestroySubtables ARGS((DdManager *unique, int n)); -EXTERN int cuddResizeTableZdd ARGS((DdManager *unique, int index)); -EXTERN void cuddSlowTableGrowth ARGS((DdManager *unique)); -EXTERN int cuddP ARGS((DdManager *dd, DdNode *f)); -#ifdef ST_INCLUDED -EXTERN enum st_retval cuddStCountfree ARGS((char *key, char *value, char *arg)); -EXTERN int cuddCollectNodes ARGS((DdNode *f, st_table *visited)); -#endif -EXTERN int cuddWindowReorder ARGS((DdManager *table, int low, int high, Cudd_ReorderingType submethod)); -EXTERN DdNode * cuddZddProduct ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddZddUnateProduct ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddZddWeakDiv ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddZddWeakDivF ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddZddDivide ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN DdNode * cuddZddDivideF ARGS((DdManager *dd, DdNode *f, DdNode *g)); -EXTERN int cuddZddGetCofactors3 ARGS((DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0, DdNode **fd)); -EXTERN int cuddZddGetCofactors2 ARGS((DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0)); -EXTERN DdNode * cuddZddComplement ARGS((DdManager *dd, DdNode *node)); -EXTERN int cuddZddGetPosVarIndex(DdManager * dd, int index); -EXTERN int cuddZddGetNegVarIndex(DdManager * dd, int index); -EXTERN int cuddZddGetPosVarLevel(DdManager * dd, int index); -EXTERN int cuddZddGetNegVarLevel(DdManager * dd, int index); -EXTERN int cuddZddTreeSifting ARGS((DdManager *table, Cudd_ReorderingType method)); -EXTERN DdNode * cuddZddIsop ARGS((DdManager *dd, DdNode *L, DdNode *U, DdNode **zdd_I)); -EXTERN DdNode * cuddBddIsop ARGS((DdManager *dd, DdNode *L, DdNode *U)); -EXTERN DdNode * cuddMakeBddFromZddCover ARGS((DdManager *dd, DdNode *node)); -EXTERN int cuddZddLinearSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddZddAlignToBdd ARGS((DdManager *table)); -EXTERN int cuddZddNextHigh ARGS((DdManager *table, int x)); -EXTERN int cuddZddNextLow ARGS((DdManager *table, int x)); -EXTERN int cuddZddUniqueCompare ARGS((int *ptr_x, int *ptr_y)); -EXTERN int cuddZddSwapInPlace ARGS((DdManager *table, int x, int y)); -EXTERN int cuddZddSwapping ARGS((DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic)); -EXTERN int cuddZddSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN DdNode * cuddZddIte ARGS((DdManager *dd, DdNode *f, DdNode *g, DdNode *h)); -EXTERN DdNode * cuddZddUnion ARGS((DdManager *zdd, DdNode *P, DdNode *Q)); -EXTERN DdNode * cuddZddIntersect ARGS((DdManager *zdd, DdNode *P, DdNode *Q)); -EXTERN DdNode * cuddZddDiff ARGS((DdManager *zdd, DdNode *P, DdNode *Q)); -EXTERN DdNode * cuddZddChangeAux ARGS((DdManager *zdd, DdNode *P, DdNode *zvar)); -EXTERN DdNode * cuddZddSubset1 ARGS((DdManager *dd, DdNode *P, int var)); -EXTERN DdNode * cuddZddSubset0 ARGS((DdManager *dd, DdNode *P, int var)); -EXTERN DdNode * cuddZddChange ARGS((DdManager *dd, DdNode *P, int var)); -EXTERN int cuddZddSymmCheck ARGS((DdManager *table, int x, int y)); -EXTERN int cuddZddSymmSifting ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddZddSymmSiftingConv ARGS((DdManager *table, int lower, int upper)); -EXTERN int cuddZddP ARGS((DdManager *zdd, DdNode *f)); - -/**AutomaticEnd***************************************************************/ - -#endif /* _CUDDINT */ |