SVF
cuddInt.h
Go to the documentation of this file.
1 
51 #ifndef _CUDDINT
52 #define _CUDDINT
53 
54 
55 /*---------------------------------------------------------------------------*/
56 /* Nested includes */
57 /*---------------------------------------------------------------------------*/
58 
59 #ifdef DD_MIS
60 #include "array.h"
61 #include "list.h"
62 #include "st.h"
63 #include "espresso.h"
64 #include "node.h"
65 #ifdef SIS
66 #include "graph.h"
67 #include "astg.h"
68 #endif
69 #include "network.h"
70 #endif
71 
72 #include <math.h>
73 #include "cudd.h"
74 #include "st.h"
75 
76 #ifdef __cplusplus
77 extern "C" {
78 #endif
79 
80 #if defined(__GNUC__)
81 # define DD_INLINE __inline__
82 # if (__GNUC__ >2 || __GNUC_MINOR__ >=7)
83 # define DD_UNUSED __attribute__ ((__unused__))
84 # else
85 # define DD_UNUSED
86 # endif
87 #else
88 # if defined(__cplusplus)
89 # define DD_INLINE inline
90 # else
91 # define DD_INLINE
92 # endif
93 # define DD_UNUSED
94 #endif
95 
96 
97 /*---------------------------------------------------------------------------*/
98 /* Constant declarations */
99 /*---------------------------------------------------------------------------*/
100 
101 #define DD_MAXREF ((DdHalfWord) ~0)
102 
103 #define DD_DEFAULT_RESIZE 10 /* how many extra variables */
104  /* should be added when resizing */
105 #define DD_MEM_CHUNK 1022
106 
107 /* These definitions work for CUDD_VALUE_TYPE == double */
108 #define DD_ONE_VAL (1.0)
109 #define DD_ZERO_VAL (0.0)
110 #define DD_EPSILON (1.0e-12)
111 
112 /* The definitions of +/- infinity in terms of HUGE_VAL work on
113 ** the DECstations and on many other combinations of OS/compiler.
114 */
115 #ifdef HAVE_IEEE_754
116 # define DD_PLUS_INF_VAL (HUGE_VAL)
117 #else
118 # define DD_PLUS_INF_VAL (10e301)
119 # define DD_CRI_HI_MARK (10e150)
120 # define DD_CRI_LO_MARK (-(DD_CRI_HI_MARK))
121 #endif
122 #define DD_MINUS_INF_VAL (-(DD_PLUS_INF_VAL))
123 
124 #define DD_NON_CONSTANT ((DdNode *) 1) /* for Cudd_bddIteConstant */
125 
126 /* Unique table and cache management constants. */
127 #define DD_MAX_SUBTABLE_DENSITY 4 /* tells when to resize a subtable */
128 /* gc when this percent are dead (measured w.r.t. slots, not keys)
129 ** The first limit (LO) applies normally. The second limit applies when
130 ** the package believes more space for the unique table (i.e., more dead
131 ** nodes) would improve performance, and the unique table is not already
132 ** too large. The third limit applies when memory is low.
133 */
134 #define DD_GC_FRAC_LO DD_MAX_SUBTABLE_DENSITY * 0.25
135 #define DD_GC_FRAC_HI DD_MAX_SUBTABLE_DENSITY * 1.0
136 #define DD_GC_FRAC_MIN 0.2
137 #define DD_MIN_HIT 30 /* resize cache when hit ratio
138  above this percentage (default) */
139 #define DD_MAX_LOOSE_FRACTION 5 /* 1 / (max fraction of memory used for
140  unique table in fast growth mode) */
141 #define DD_MAX_CACHE_FRACTION 3 /* 1 / (max fraction of memory used for
142  computed table if resizing enabled) */
143 #define DD_STASH_FRACTION 64 /* 1 / (fraction of memory set
144  aside for emergencies) */
145 #define DD_MAX_CACHE_TO_SLOTS_RATIO 4 /* used to limit the cache size */
146 
147 /* Variable ordering default parameter values. */
148 #define DD_SIFT_MAX_VAR 1000
149 #define DD_SIFT_MAX_SWAPS 2000000
150 #define DD_DEFAULT_RECOMB 0
151 #define DD_MAX_REORDER_GROWTH 1.2
152 #define DD_FIRST_REORDER 4004 /* 4 for the constants */
153 #define DD_DYN_RATIO 2 /* when to dynamically reorder */
154 
155 /* Primes for cache hash functions. */
156 #define DD_P1 12582917
157 #define DD_P2 4256249
158 #define DD_P3 741457
159 #define DD_P4 1618033999
160 
161 /* Cache tags for 3-operand operators. These tags are stored in the
162 ** least significant bits of the cache operand pointers according to
163 ** the following scheme. The tag consists of two hex digits. Both digits
164 ** must be even, so that they do not interfere with complementation bits.
165 ** The least significant one is stored in Bits 3:1 of the f operand in the
166 ** cache entry. Bit 1 is always 1, so that we can differentiate
167 ** three-operand operations from one- and two-operand operations.
168 ** Therefore, the least significant digit is one of {2,6,a,e}. The most
169 ** significant digit occupies Bits 3:1 of the g operand in the cache
170 ** entry. It can by any even digit between 0 and e. This gives a total
171 ** of 5 bits for the tag proper, which means a maximum of 32 three-operand
172 ** operations. */
173 #define DD_ADD_ITE_TAG 0x02
174 #define DD_BDD_AND_ABSTRACT_TAG 0x06
175 #define DD_BDD_XOR_EXIST_ABSTRACT_TAG 0x0a
176 #define DD_BDD_ITE_TAG 0x0e
177 #define DD_ADD_BDD_DO_INTERVAL_TAG 0x22
178 #define DD_BDD_CLIPPING_AND_ABSTRACT_UP_TAG 0x26
179 #define DD_BDD_CLIPPING_AND_ABSTRACT_DOWN_TAG 0x2a
180 #define DD_BDD_COMPOSE_RECUR_TAG 0x2e
181 #define DD_ADD_COMPOSE_RECUR_TAG 0x42
182 #define DD_ADD_NON_SIM_COMPOSE_TAG 0x46
183 #define DD_EQUIV_DC_TAG 0x4a
184 #define DD_ZDD_ITE_TAG 0x4e
185 #define DD_ADD_ITE_CONSTANT_TAG 0x62
186 #define DD_ADD_EVAL_CONST_TAG 0x66
187 #define DD_BDD_ITE_CONSTANT_TAG 0x6a
188 #define DD_ADD_OUT_SUM_TAG 0x6e
189 #define DD_BDD_LEQ_UNLESS_TAG 0x82
190 #define DD_ADD_TRIANGLE_TAG 0x86
191 #define DD_BDD_MAX_EXP_TAG 0x8a
192 
193 /* Generator constants. */
194 #define CUDD_GEN_CUBES 0
195 #define CUDD_GEN_PRIMES 1
196 #define CUDD_GEN_NODES 2
197 #define CUDD_GEN_ZDD_PATHS 3
198 #define CUDD_GEN_EMPTY 0
199 #define CUDD_GEN_NONEMPTY 1
200 
201 
202 /*---------------------------------------------------------------------------*/
203 /* Stucture declarations */
204 /*---------------------------------------------------------------------------*/
205 
206 struct DdGen {
208  int type;
209  int status;
210  union {
211  struct {
212  int *cube;
214  } cubes;
215  struct {
216  int *cube;
218  } primes;
219  struct {
220  int size;
221  } nodes;
222  } gen;
223  struct {
224  int sp;
226  } stack;
228 };
229 
230 
231 /*---------------------------------------------------------------------------*/
232 /* Type declarations */
233 /*---------------------------------------------------------------------------*/
234 
235 /* Hooks in CUDD are functions that the application registers with the
236 ** manager so that they are called at appropriate times. The functions
237 ** are passed the manager as argument; they should return 1 if
238 ** successful and 0 otherwise.
239 */
240 typedef struct DdHook { /* hook list element */
241  DD_HFP f; /* function to be called */
242  struct DdHook *next; /* next element in the list */
243 } DdHook;
244 
245 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
246 typedef long ptrint;
247 typedef unsigned long ptruint;
248 #else
249 typedef int ptrint;
250 typedef unsigned int ptruint;
251 #endif
252 
253 typedef DdNode *DdNodePtr;
254 
255 /* Generic local cache item. */
256 typedef struct DdLocalCacheItem {
258 #ifdef DD_CACHE_PROFILE
259  ptrint count;
260 #endif
261  DdNode *key[1];
263 
264 /* Local cache. */
265 typedef struct DdLocalCache {
267  unsigned int itemsize;
268  unsigned int keysize;
269  unsigned int slots;
270  int shift;
271  double lookUps;
272  double minHit;
273  double hits;
274  unsigned int maxslots;
277 } DdLocalCache;
278 
279 /* Generic hash item. */
280 typedef struct DdHashItem {
281  struct DdHashItem *next;
282  ptrint count;
284  DdNode *key[1];
285 } DdHashItem;
286 
287 /* Local hash table */
288 typedef struct DdHashTable {
289  unsigned int keysize;
290  unsigned int itemsize;
294  unsigned int numBuckets;
295  int shift;
296  unsigned int size;
297  unsigned int maxsize;
299 } DdHashTable;
300 
301 typedef struct DdCache {
302  DdNode *f,*g; /* DDs */
303  ptruint h; /* either operator or DD */
304  DdNode *data; /* already constructed DD */
305 #ifdef DD_CACHE_PROFILE
306  ptrint count;
307 #endif
308 } DdCache;
309 
310 typedef struct DdSubtable { /* subtable for one index */
311  DdNode **nodelist; /* hash table */
312  int shift; /* shift for hash function */
313  unsigned int slots; /* size of the hash table */
314  unsigned int keys; /* number of nodes stored in this table */
315  unsigned int maxKeys; /* slots * DD_MAX_SUBTABLE_DENSITY */
316  unsigned int dead; /* number of dead nodes in this table */
317  unsigned int next; /* index of next variable in group */
318  int bindVar; /* flag to bind this variable to its level */
319  /* Fields for lazy sifting. */
320  Cudd_VariableType varType; /* variable type (ps, ns, pi) */
321  int pairIndex; /* corresponding variable index (ps <-> ns) */
322  int varHandled; /* flag: 1 means variable is already handled */
323  Cudd_LazyGroupType varToBeGrouped; /* tells what grouping to apply */
324 } DdSubtable;
325 
326 struct DdManager { /* specialized DD symbol table */
327  /* Constants */
328  DdNode sentinel; /* for collision lists */
329  DdNode *one; /* constant 1 */
330  DdNode *zero; /* constant 0 */
331  DdNode *plusinfinity; /* plus infinity */
332  DdNode *minusinfinity; /* minus infinity */
333  DdNode *background; /* background value */
334  /* Computed Table */
335  DdCache *acache; /* address of allocated memory for cache */
336  DdCache *cache; /* the cache-based computed table */
337  unsigned int cacheSlots; /* total number of cache entries */
338  int cacheShift; /* shift value for cache hash function */
339  double cacheMisses; /* number of cache misses (since resizing) */
340  double cacheHits; /* number of cache hits (since resizing) */
341  double minHit; /* hit percentage above which to resize */
342  int cacheSlack; /* slots still available for resizing */
343  unsigned int maxCacheHard; /* hard limit for cache size */
344  /* Unique Table */
345  int size; /* number of unique subtables */
346  int sizeZ; /* for ZDD */
347  int maxSize; /* max number of subtables before resizing */
348  int maxSizeZ; /* for ZDD */
349  DdSubtable *subtables; /* array of unique subtables */
350  DdSubtable *subtableZ; /* for ZDD */
351  DdSubtable constants; /* unique subtable for the constants */
352  unsigned int slots; /* total number of hash buckets */
353  unsigned int keys; /* total number of BDD and ADD nodes */
354  unsigned int keysZ; /* total number of ZDD nodes */
355  unsigned int dead; /* total number of dead BDD and ADD nodes */
356  unsigned int deadZ; /* total number of dead ZDD nodes */
357  unsigned int maxLive; /* maximum number of live nodes */
358  unsigned int minDead; /* do not GC if fewer than these dead */
359  double gcFrac; /* gc when this fraction is dead */
360  int gcEnabled; /* gc is enabled */
361  unsigned int looseUpTo; /* slow growth beyond this limit */
362  /* (measured w.r.t. slots, not keys) */
363  unsigned int initSlots; /* initial size of a subtable */
364  DdNode **stack; /* stack for iterative procedures */
365  double allocated; /* number of nodes allocated */
366  /* (not during reordering) */
367  double reclaimed; /* number of nodes brought back from the dead */
368  int isolated; /* isolated projection functions */
369  int *perm; /* current variable perm. (index to level) */
370  int *permZ; /* for ZDD */
371  int *invperm; /* current inv. var. perm. (level to index) */
372  int *invpermZ; /* for ZDD */
373  DdNode **vars; /* projection functions */
374  int *map; /* variable map for fast swap */
375  DdNode **univ; /* ZDD 1 for each variable */
376  int linearSize; /* number of rows and columns of linear */
377  long *interact; /* interacting variable matrix */
378  long *linear; /* linear transform matrix */
379  /* Memory Management */
380  DdNode **memoryList; /* memory manager for symbol table */
381  DdNode *nextFree; /* list of free nodes */
382  char *stash; /* memory reserve */
383 #ifndef DD_NO_DEATH_ROW
384  DdNode **deathRow; /* queue for dereferencing */
385  int deathRowDepth; /* number of slots in the queue */
386  int nextDead; /* index in the queue */
387  unsigned deadMask; /* mask for circular index update */
388 #endif
389  /* General Parameters */
390  CUDD_VALUE_TYPE epsilon; /* tolerance on comparisons */
391  /* Dynamic Reordering Parameters */
392  int reordered; /* flag set at the end of reordering */
393  unsigned int reorderings; /* number of calls to Cudd_ReduceHeap */
394  unsigned int maxReorderings;/* maximum number of calls to Cudd_ReduceHeap */
395  int siftMaxVar; /* maximum number of vars sifted */
396  int siftMaxSwap; /* maximum number of swaps per sifting */
397  double maxGrowth; /* maximum growth during reordering */
398  double maxGrowthAlt; /* alternate maximum growth for reordering */
399  int reordCycle; /* how often to apply alternate threshold */
400  int autoDyn; /* automatic dynamic reordering flag (BDD) */
401  int autoDynZ; /* automatic dynamic reordering flag (ZDD) */
402  Cudd_ReorderingType autoMethod; /* default reordering method */
403  Cudd_ReorderingType autoMethodZ; /* default reordering method (ZDD) */
404  int realign; /* realign ZDD order after BDD reordering */
405  int realignZ; /* realign BDD order after ZDD reordering */
406  unsigned int nextDyn; /* reorder if this size is reached */
407  unsigned int countDead; /* if 0, count deads to trigger reordering */
408  MtrNode *tree; /* variable group tree (BDD) */
409  MtrNode *treeZ; /* variable group tree (ZDD) */
410  Cudd_AggregationType groupcheck; /* used during group sifting */
411  int recomb; /* used during group sifting */
412  int symmviolation; /* used during group sifting */
413  int arcviolation; /* used during group sifting */
414  int populationSize; /* population size for GA */
415  int numberXovers; /* number of crossovers for GA */
416  unsigned int randomizeOrder; /* perturb the next reordering threshold */
417  DdLocalCache *localCaches; /* local caches currently in existence */
418  char *hooks; /* application-specific field (used by vis) */
419  DdHook *preGCHook; /* hooks to be called before GC */
420  DdHook *postGCHook; /* hooks to be called after GC */
421  DdHook *preReorderingHook; /* hooks to be called before reordering */
422  DdHook *postReorderingHook; /* hooks to be called after reordering */
423  FILE *out; /* stdout for this manager */
424  FILE *err; /* stderr for this manager */
425  Cudd_ErrorType errorCode; /* info on last error */
426  unsigned long startTime; /* start time in milliseconds */
427  unsigned long timeLimit; /* CPU time limit */
428  /* Statistical counters. */
429  unsigned long memused; /* total memory allocated for the manager */
430  unsigned long maxmem; /* target maximum memory */
431  unsigned long maxmemhard; /* hard limit for maximum memory */
432  int garbageCollections; /* number of garbage collections */
433  unsigned long GCTime; /* total time spent in garbage collection */
434  unsigned long reordTime; /* total time spent in reordering */
435  double totCachehits; /* total number of cache hits */
436  double totCacheMisses; /* total number of cache misses */
437  double cachecollisions; /* number of cache collisions */
438  double cacheinserts; /* number of cache insertions */
439  double cacheLastInserts; /* insertions at the last cache resizing */
440  double cachedeletions; /* number of deletions during garbage coll. */
441 #ifdef DD_STATS
442  double nodesFreed; /* number of nodes returned to the free list */
443  double nodesDropped; /* number of nodes killed by dereferencing */
444 #endif
445  unsigned int peakLiveNodes; /* maximum number of live nodes */
446 #ifdef DD_UNIQUE_PROFILE
447  double uniqueLookUps; /* number of unique table lookups */
448  double uniqueLinks; /* total distance traveled in coll. chains */
449 #endif
450 #ifdef DD_COUNT
451  double recursiveCalls; /* number of recursive calls */
452 #ifdef DD_STATS
453  double nextSample; /* when to write next line of stats */
454 #endif
455  double swapSteps; /* number of elementary reordering steps */
456 #endif
457 #ifdef DD_MIS
458  /* mis/verif compatibility fields */
459  array_t *iton; /* maps ids in ddNode to node_t */
460  array_t *order; /* copy of order_list */
461  lsHandle handle; /* where it is in network BDD list */
462  network_t *network;
463  st_table *local_order; /* for local BDDs */
464  int nvars; /* variables used so far */
465  int threshold; /* for pseudo var threshold value*/
466 #endif
467 };
468 
469 typedef struct Move {
472  unsigned int flags;
473  int size;
474  struct Move *next;
475 } Move;
476 
477 /* Generic level queue item. */
478 typedef struct DdQueueItem {
479  struct DdQueueItem *next;
481  void *key;
482 } DdQueueItem;
483 
484 /* Level queue. */
485 typedef struct DdLevelQueue {
486  void *first;
490  int levels;
491  int itemsize;
492  int size;
493  int maxsize;
495  int shift;
496 } DdLevelQueue;
497 
498 /*---------------------------------------------------------------------------*/
499 /* Variable declarations */
500 /*---------------------------------------------------------------------------*/
501 
502 
503 /*---------------------------------------------------------------------------*/
504 /* Macro declarations */
505 /*---------------------------------------------------------------------------*/
506 
520 #define cuddDeallocNode(unique,node) \
521  (node)->next = (unique)->nextFree; \
522  (unique)->nextFree = node;
523 
537 #define cuddDeallocMove(unique,node) \
538  ((DdNode *)(node))->ref = 0; \
539  ((DdNode *)(node))->next = (unique)->nextFree; \
540  (unique)->nextFree = (DdNode *)(node);
541 
542 
557 #define cuddRef(n) cuddSatInc(Cudd_Regular(n)->ref)
558 
559 
577 #define cuddDeref(n) cuddSatDec(Cudd_Regular(n)->ref)
578 
579 
593 #define cuddIsConstant(node) ((node)->index == CUDD_CONST_INDEX)
594 
595 
609 #define cuddT(node) ((node)->type.kids.T)
610 
611 
625 #define cuddE(node) ((node)->type.kids.E)
626 
627 
641 #define cuddV(node) ((node)->type.value)
642 
643 
659 #define cuddI(dd,index) (((index)==CUDD_CONST_INDEX)?(int)(index):(dd)->perm[(index)])
660 
661 
677 #define cuddIZ(dd,index) (((index)==CUDD_CONST_INDEX)?(int)(index):(dd)->permZ[(index)])
678 
679 
691 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
692 #define ddHash(f,g,s) \
693 ((((unsigned)(ptruint)(f) * DD_P1 + \
694  (unsigned)(ptruint)(g)) * DD_P2) >> (s))
695 #else
696 #define ddHash(f,g,s) \
697 ((((unsigned)(f) * DD_P1 + (unsigned)(g)) * DD_P2) >> (s))
698 #endif
699 
700 
712 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
713 #define ddCHash(o,f,g,h,s) \
714 ((((((unsigned)(ptruint)(f) + (unsigned)(ptruint)(o)) * DD_P1 + \
715  (unsigned)(ptruint)(g)) * DD_P2 + \
716  (unsigned)(ptruint)(h)) * DD_P3) >> (s))
717 #else
718 #define ddCHash(o,f,g,h,s) \
719 ((((((unsigned)(f) + (unsigned)(o)) * DD_P1 + (unsigned)(g)) * DD_P2 + \
720  (unsigned)(h)) * DD_P3) >> (s))
721 #endif
722 
723 
736 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
737 #define ddCHash2(o,f,g,s) \
738 (((((unsigned)(ptruint)(f) + (unsigned)(ptruint)(o)) * DD_P1 + \
739  (unsigned)(ptruint)(g)) * DD_P2) >> (s))
740 #else
741 #define ddCHash2(o,f,g,s) \
742 (((((unsigned)(f) + (unsigned)(o)) * DD_P1 + (unsigned)(g)) * DD_P2) >> (s))
743 #endif
744 
745 
757 #define cuddClean(p) ((DdNode *)((ptruint)(p) & ~0xf))
758 
759 
771 #define ddMin(x,y) (((y) < (x)) ? (y) : (x))
772 
773 
785 #define ddMax(x,y) (((y) > (x)) ? (y) : (x))
786 
787 
799 #define ddAbs(x) (((x)<0) ? -(x) : (x))
800 
801 
814 #define ddEqualVal(x,y,e) (ddAbs((x)-(y))<(e))
815 
816 
828 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
829 #define cuddSatInc(x) ((x)++)
830 #else
831 #define cuddSatInc(x) ((x) += (x) != (DdHalfWord)DD_MAXREF)
832 #endif
833 
834 
846 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
847 #define cuddSatDec(x) ((x)--)
848 #else
849 #define cuddSatDec(x) ((x) -= (x) != (DdHalfWord)DD_MAXREF)
850 #endif
851 
852 
864 #define DD_ONE(dd) ((dd)->one)
865 
866 
880 #define DD_ZERO(dd) ((dd)->zero)
881 
882 
894 #define DD_PLUS_INFINITY(dd) ((dd)->plusinfinity)
895 
896 
908 #define DD_MINUS_INFINITY(dd) ((dd)->minusinfinity)
909 
910 
929 #ifdef HAVE_IEEE_754
930 #define cuddAdjust(x)
931 #else
932 #define cuddAdjust(x) ((x) = ((x) >= DD_CRI_HI_MARK) ? DD_PLUS_INF_VAL : (((x) <= DD_CRI_LO_MARK) ? DD_MINUS_INF_VAL : (x)))
933 #endif
934 
935 
948 #define DD_LSDIGIT(x) ((x) & DD_APA_MASK)
949 
950 
963 #define DD_MSDIGIT(x) ((x) >> DD_APA_BITS)
964 
965 
979 #ifdef DD_COUNT
980 #ifdef DD_STATS
981 #define statLine(dd) dd->recursiveCalls++; \
982 if (dd->recursiveCalls == dd->nextSample) {(void) fprintf(dd->err, \
983 "@%.0f: %u nodes %u live %.0f dropped %.0f reclaimed\n", dd->recursiveCalls, \
984 dd->keys, dd->keys - dd->dead, dd->nodesDropped, dd->reclaimed); \
985 dd->nextSample += 250000;}
986 #else
987 #define statLine(dd) dd->recursiveCalls++;
988 #endif
989 #else
990 #define statLine(dd)
991 #endif
992 
993 
996 /*---------------------------------------------------------------------------*/
997 /* Function prototypes */
998 /*---------------------------------------------------------------------------*/
999 
1003 extern DdNode * cuddAddApplyRecur (DdManager *dd, DdNode * (*)(DdManager *, DdNode **, DdNode **), DdNode *f, DdNode *g);
1004 extern DdNode * cuddAddMonadicApplyRecur (DdManager * dd, DdNode * (*op)(DdManager *, DdNode *), DdNode * f);
1005 extern DdNode * cuddAddScalarInverseRecur (DdManager *dd, DdNode *f, DdNode *epsilon);
1006 extern DdNode * cuddAddIteRecur (DdManager *dd, DdNode *f, DdNode *g, DdNode *h);
1007 extern DdNode * cuddAddCmplRecur (DdManager *dd, DdNode *f);
1008 extern DdNode * cuddAddNegateRecur (DdManager *dd, DdNode *f);
1009 extern DdNode * cuddAddRoundOffRecur (DdManager *dd, DdNode *f, double trunc);
1010 extern DdNode * cuddUnderApprox (DdManager *dd, DdNode *f, int numVars, int threshold, int safe, double quality);
1011 extern DdNode * cuddRemapUnderApprox (DdManager *dd, DdNode *f, int numVars, int threshold, double quality);
1012 extern DdNode * cuddBiasedUnderApprox (DdManager *dd, DdNode *f, DdNode *b, int numVars, int threshold, double quality1, double quality0);
1014 extern int cuddAnnealing (DdManager *table, int lower, int upper);
1018 extern DdNode * cuddBddIteRecur (DdManager *dd, DdNode *f, DdNode *g, DdNode *h);
1019 extern DdNode * cuddBddIntersectRecur (DdManager *dd, DdNode *f, DdNode *g);
1020 extern DdNode * cuddBddAndRecur (DdManager *manager, DdNode *f, DdNode *g);
1021 extern DdNode * cuddBddXorRecur (DdManager *manager, DdNode *f, DdNode *g);
1022 extern DdNode * cuddBddTransfer (DdManager *ddS, DdManager *ddD, DdNode *f);
1023 extern DdNode * cuddAddBddDoPattern (DdManager *dd, DdNode *f);
1024 extern int cuddInitCache (DdManager *unique, unsigned int cacheSize, unsigned int maxCacheSize);
1025 extern void cuddCacheInsert (DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data);
1026 extern void cuddCacheInsert2 (DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g, DdNode *data);
1027 extern void cuddCacheInsert1 (DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f, DdNode *data);
1028 extern DdNode * cuddCacheLookup (DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h);
1029 extern DdNode * cuddCacheLookupZdd (DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h);
1030 extern DdNode * cuddCacheLookup2 (DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g);
1031 extern DdNode * cuddCacheLookup1 (DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f);
1032 extern DdNode * cuddCacheLookup2Zdd (DdManager *table, DdNode * (*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g);
1033 extern DdNode * cuddCacheLookup1Zdd (DdManager *table, DdNode * (*)(DdManager *, DdNode *), DdNode *f);
1034 extern DdNode * cuddConstantLookup (DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h);
1035 extern int cuddCacheProfile (DdManager *table, FILE *fp);
1036 extern void cuddCacheResize (DdManager *table);
1037 extern void cuddCacheFlush (DdManager *table);
1038 extern int cuddComputeFloorLog2 (unsigned int value);
1039 extern int cuddHeapProfile (DdManager *dd);
1040 extern void cuddPrintNode (DdNode *f, FILE *fp);
1041 extern void cuddPrintVarGroups (DdManager * dd, MtrNode * root, int zdd, int silent);
1042 extern DdNode * cuddBddClippingAnd (DdManager *dd, DdNode *f, DdNode *g, int maxDepth, int direction);
1043 extern DdNode * cuddBddClippingAndAbstract (DdManager *dd, DdNode *f, DdNode *g, DdNode *cube, int maxDepth, int direction);
1044 extern void cuddGetBranches (DdNode *g, DdNode **g1, DdNode **g0);
1045 extern DdNode * cuddCofactorRecur (DdManager *dd, DdNode *f, DdNode *g);
1046 extern DdNode * cuddBddComposeRecur (DdManager *dd, DdNode *f, DdNode *g, DdNode *proj);
1047 extern DdNode * cuddAddComposeRecur (DdManager *dd, DdNode *f, DdNode *g, DdNode *proj);
1048 extern int cuddExact (DdManager *table, int lower, int upper);
1049 extern DdNode * cuddBddConstrainRecur (DdManager *dd, DdNode *f, DdNode *c);
1050 extern DdNode * cuddBddRestrictRecur (DdManager *dd, DdNode *f, DdNode *c);
1051 extern DdNode * cuddBddNPAndRecur (DdManager *dd, DdNode *f, DdNode *c);
1052 extern DdNode * cuddAddConstrainRecur (DdManager *dd, DdNode *f, DdNode *c);
1053 extern DdNode * cuddAddRestrictRecur (DdManager *dd, DdNode *f, DdNode *c);
1054 extern DdNode * cuddBddLICompaction (DdManager *dd, DdNode *f, DdNode *c);
1055 extern int cuddGa (DdManager *table, int lower, int upper);
1056 extern int cuddTreeSifting (DdManager *table, Cudd_ReorderingType method);
1057 extern int cuddZddInitUniv (DdManager *zdd);
1058 extern void cuddZddFreeUniv (DdManager *zdd);
1059 extern void cuddSetInteract (DdManager *table, int x, int y);
1060 extern int cuddTestInteract (DdManager *table, int x, int y);
1061 extern int cuddInitInteract (DdManager *table);
1062 extern DdLocalCache * cuddLocalCacheInit (DdManager *manager, unsigned int keySize, unsigned int cacheSize, unsigned int maxCacheSize);
1063 extern void cuddLocalCacheQuit (DdLocalCache *cache);
1064 extern void cuddLocalCacheInsert (DdLocalCache *cache, DdNodePtr *key, DdNode *value);
1065 extern DdNode * cuddLocalCacheLookup (DdLocalCache *cache, DdNodePtr *key);
1067 extern int cuddIsInDeathRow (DdManager *dd, DdNode *f);
1068 extern int cuddTimesInDeathRow (DdManager *dd, DdNode *f);
1070 #ifdef DD_CACHE_PROFILE
1071 extern int cuddLocalCacheProfile (DdLocalCache *cache);
1072 #endif
1073 extern DdHashTable * cuddHashTableInit (DdManager *manager, unsigned int keySize, unsigned int initSize);
1074 extern void cuddHashTableQuit (DdHashTable *hash);
1075 extern void cuddHashTableGenericQuit (DdHashTable *hash);
1076 extern int cuddHashTableInsert (DdHashTable *hash, DdNodePtr *key, DdNode *value, ptrint count);
1077 extern DdNode * cuddHashTableLookup (DdHashTable *hash, DdNodePtr *key);
1078 extern int cuddHashTableInsert1 (DdHashTable *hash, DdNode *f, DdNode *value, ptrint count);
1079 extern DdNode * cuddHashTableLookup1 (DdHashTable *hash, DdNode *f);
1080 extern int cuddHashTableInsert2 (DdHashTable *hash, DdNode *f, DdNode *g, DdNode *value, ptrint count);
1081 extern DdNode * cuddHashTableLookup2 (DdHashTable *hash, DdNode *f, DdNode *g);
1082 extern int cuddHashTableInsert3 (DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h, DdNode *value, ptrint count);
1083 extern DdNode * cuddHashTableLookup3 (DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h);
1084 extern int cuddHashTableGenericInsert(DdHashTable * hash, DdNode * f, void * value);
1085 extern void * cuddHashTableGenericLookup(DdHashTable * hash, DdNode * f);
1086 extern DdLevelQueue * cuddLevelQueueInit (int levels, int itemSize, int numBuckets);
1087 extern void cuddLevelQueueQuit (DdLevelQueue *queue);
1088 extern void * cuddLevelQueueFirst(DdLevelQueue * queue, void * key, int level);
1089 extern void * cuddLevelQueueEnqueue (DdLevelQueue *queue, void *key, int level);
1090 extern void cuddLevelQueueDequeue (DdLevelQueue *queue, int level);
1091 extern int cuddLinearAndSifting (DdManager *table, int lower, int upper);
1092 extern int cuddLinearInPlace (DdManager * table, int x, int y);
1093 extern void cuddUpdateInteractionMatrix (DdManager * table, int xindex, int yindex);
1094 extern int cuddInitLinear (DdManager *table);
1095 extern int cuddResizeLinear (DdManager *table);
1097 extern DdNode * cuddCProjectionRecur (DdManager *dd, DdNode *R, DdNode *Y, DdNode *Ysupp);
1098 extern DdNode * cuddBddClosestCube (DdManager *dd, DdNode *f, DdNode *g, CUDD_VALUE_TYPE bound);
1099 extern void cuddReclaim (DdManager *table, DdNode *n);
1100 extern void cuddReclaimZdd (DdManager *table, DdNode *n);
1101 extern void cuddClearDeathRow (DdManager *table);
1102 extern void cuddShrinkDeathRow (DdManager *table);
1103 extern DdNode * cuddDynamicAllocNode (DdManager *table);
1104 extern int cuddSifting (DdManager *table, int lower, int upper);
1105 extern int cuddSwapping (DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic);
1106 extern int cuddNextHigh (DdManager *table, int x);
1107 extern int cuddNextLow (DdManager *table, int x);
1108 extern int cuddSwapInPlace (DdManager *table, int x, int y);
1109 extern int cuddBddAlignToZdd (DdManager *table);
1110 extern DdNode * cuddBddMakePrime (DdManager *dd, DdNode *cube, DdNode *f);
1111 extern DdNode * cuddSolveEqnRecur (DdManager *bdd, DdNode *F, DdNode *Y, DdNode **G, int n, int *yIndex, int i);
1112 extern DdNode * cuddVerifySol (DdManager *bdd, DdNode *F, DdNode **G, int *yIndex, int n);
1113 #ifdef ST_INCLUDED
1114 extern DdNode* cuddSplitSetRecur (DdManager *manager, st_table *mtable, int *varSeen, DdNode *p, double n, double max, int index);
1115 #endif
1116 extern DdNode * cuddSubsetHeavyBranch (DdManager *dd, DdNode *f, int numVars, int threshold);
1117 extern DdNode * cuddSubsetShortPaths (DdManager *dd, DdNode *f, int numVars, int threshold, int hardlimit);
1118 extern int cuddSymmCheck (DdManager *table, int x, int y);
1119 extern int cuddSymmSifting (DdManager *table, int lower, int upper);
1120 extern int cuddSymmSiftingConv (DdManager *table, int lower, int upper);
1121 extern DdNode * cuddAllocNode (DdManager *unique);
1122 extern DdManager * cuddInitTable (unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int looseUpTo);
1123 extern void cuddFreeTable (DdManager *unique);
1124 extern int cuddGarbageCollect (DdManager *unique, int clearCache);
1125 extern DdNode * cuddZddGetNode (DdManager *zdd, int id, DdNode *T, DdNode *E);
1126 extern DdNode * cuddZddGetNodeIVO (DdManager *dd, int index, DdNode *g, DdNode *h);
1127 extern DdNode * cuddUniqueInter (DdManager *unique, int index, DdNode *T, DdNode *E);
1128 extern DdNode * cuddUniqueInterIVO (DdManager *unique, int index, DdNode *T, DdNode *E);
1129 extern DdNode * cuddUniqueInterZdd (DdManager *unique, int index, DdNode *T, DdNode *E);
1131 extern void cuddRehash (DdManager *unique, int i);
1132 extern void cuddShrinkSubtable (DdManager *unique, int i);
1133 extern int cuddInsertSubtables (DdManager *unique, int n, int level);
1134 extern int cuddDestroySubtables (DdManager *unique, int n);
1135 extern int cuddResizeTableZdd (DdManager *unique, int index);
1136 extern void cuddSlowTableGrowth (DdManager *unique);
1137 extern int cuddP (DdManager *dd, DdNode *f);
1138 #ifdef ST_INCLUDED
1139 extern enum st_retval cuddStCountfree (char *key, char *value, char *arg);
1140 extern int cuddCollectNodes (DdNode *f, st_table *visited);
1141 #endif
1142 extern DdNodePtr * cuddNodeArray (DdNode *f, int *n);
1143 extern int cuddWindowReorder (DdManager *table, int low, int high, Cudd_ReorderingType submethod);
1144 extern DdNode * cuddZddProduct (DdManager *dd, DdNode *f, DdNode *g);
1145 extern DdNode * cuddZddUnateProduct (DdManager *dd, DdNode *f, DdNode *g);
1146 extern DdNode * cuddZddWeakDiv (DdManager *dd, DdNode *f, DdNode *g);
1147 extern DdNode * cuddZddWeakDivF (DdManager *dd, DdNode *f, DdNode *g);
1148 extern DdNode * cuddZddDivide (DdManager *dd, DdNode *f, DdNode *g);
1149 extern DdNode * cuddZddDivideF (DdManager *dd, DdNode *f, DdNode *g);
1150 extern int cuddZddGetCofactors3 (DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0, DdNode **fd);
1151 extern int cuddZddGetCofactors2 (DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0);
1152 extern DdNode * cuddZddComplement (DdManager *dd, DdNode *node);
1153 extern int cuddZddGetPosVarIndex(DdManager * dd, int index);
1154 extern int cuddZddGetNegVarIndex(DdManager * dd, int index);
1155 extern int cuddZddGetPosVarLevel(DdManager * dd, int index);
1156 extern int cuddZddGetNegVarLevel(DdManager * dd, int index);
1157 extern int cuddZddTreeSifting (DdManager *table, Cudd_ReorderingType method);
1158 extern DdNode * cuddZddIsop (DdManager *dd, DdNode *L, DdNode *U, DdNode **zdd_I);
1159 extern DdNode * cuddBddIsop (DdManager *dd, DdNode *L, DdNode *U);
1161 extern int cuddZddLinearSifting (DdManager *table, int lower, int upper);
1162 extern int cuddZddAlignToBdd (DdManager *table);
1163 extern int cuddZddNextHigh (DdManager *table, int x);
1164 extern int cuddZddNextLow (DdManager *table, int x);
1165 extern int cuddZddUniqueCompare (int *ptr_x, int *ptr_y);
1166 extern int cuddZddSwapInPlace (DdManager *table, int x, int y);
1167 extern int cuddZddSwapping (DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic);
1168 extern int cuddZddSifting (DdManager *table, int lower, int upper);
1169 extern DdNode * cuddZddIte (DdManager *dd, DdNode *f, DdNode *g, DdNode *h);
1170 extern DdNode * cuddZddUnion (DdManager *zdd, DdNode *P, DdNode *Q);
1171 extern DdNode * cuddZddIntersect (DdManager *zdd, DdNode *P, DdNode *Q);
1172 extern DdNode * cuddZddDiff (DdManager *zdd, DdNode *P, DdNode *Q);
1173 extern DdNode * cuddZddChangeAux (DdManager *zdd, DdNode *P, DdNode *zvar);
1174 extern DdNode * cuddZddSubset1 (DdManager *dd, DdNode *P, int var);
1175 extern DdNode * cuddZddSubset0 (DdManager *dd, DdNode *P, int var);
1176 extern DdNode * cuddZddChange (DdManager *dd, DdNode *P, int var);
1177 extern int cuddZddSymmCheck (DdManager *table, int x, int y);
1178 extern int cuddZddSymmSifting (DdManager *table, int lower, int upper);
1179 extern int cuddZddSymmSiftingConv (DdManager *table, int lower, int upper);
1180 extern int cuddZddP (DdManager *zdd, DdNode *f);
1181 
1184 #ifdef __cplusplus
1185 } /* end of extern "C" */
1186 #endif
1187 
1188 #endif /* _CUDDINT */
DdNode * cuddZddGetNodeIVO(DdManager *dd, int index, DdNode *g, DdNode *h)
Definition: cuddTable.c:1083
int maxsize
Definition: cuddInt.h:493
unsigned int keysize
Definition: cuddInt.h:289
int levels
Definition: cuddInt.h:490
void cuddShrinkSubtable(DdManager *unique, int i)
Definition: cuddTable.c:1731
Cudd_AggregationType groupcheck
Definition: cuddInt.h:410
DdNode * node
Definition: cuddInt.h:227
void cuddLevelQueueDequeue(DdLevelQueue *queue, int level)
unsigned int keys
Definition: cuddInt.h:314
DdNode * cuddSubsetShortPaths(DdManager *dd, DdNode *f, int numVars, int threshold, int hardlimit)
DdHashItem ** bucket
Definition: cuddInt.h:291
int ptrint
Definition: cuddInt.h:249
DdNode * cuddAddCmplRecur(DdManager *dd, DdNode *f)
Definition: cuddAddIte.c:558
void cuddZddFreeUniv(DdManager *zdd)
Definition: cuddInit.c:294
unsigned short DdHalfWord
Definition: cudd.h:259
DdNode * cuddCacheLookup1Zdd(DdManager *table, DdNode *(*)(DdManager *, DdNode *), DdNode *f)
int type
Definition: cuddInt.h:208
DdNode * value
Definition: cuddInt.h:283
unsigned int size
Definition: cuddInt.h:296
Definition: st.h:60
DdNode * cuddBddLICompaction(DdManager *dd, DdNode *f, DdNode *c)
DdNode * cuddBddExistAbstractRecur(DdManager *manager, DdNode *f, DdNode *cube)
Definition: cuddBddAbs.c:393
unsigned long reordTime
Definition: cuddInt.h:434
Cudd_AggregationType
Definition: cudd.h:180
DdNode * cuddBddBooleanDiffRecur(DdManager *manager, DdNode *f, DdNode *var)
Definition: cuddBddAbs.c:675
Cudd_ReorderingType autoMethod
Definition: cuddInt.h:402
void cuddRehash(DdManager *unique, int i)
Definition: cuddTable.c:1559
unsigned int peakLiveNodes
Definition: cuddInt.h:445
int maxSizeZ
Definition: cuddInt.h:348
DdNode * cuddBddXorExistAbstractRecur(DdManager *manager, DdNode *f, DdNode *g, DdNode *cube)
Definition: cuddBddAbs.c:503
int cuddInitLinear(DdManager *table)
Definition: cuddLinear.c:755
double allocated
Definition: cuddInt.h:365
int * map
Definition: cuddInt.h:374
Definition: cudd.h:270
DdNode * cuddZddGetNode(DdManager *zdd, int id, DdNode *T, DdNode *E)
Definition: cuddTable.c:1050
DdNode * cuddBddComposeRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *proj)
unsigned int deadZ
Definition: cuddInt.h:356
DdNode * cuddVerifySol(DdManager *bdd, DdNode *F, DdNode **G, int *yIndex, int n)
DdNode * data
Definition: cuddInt.h:304
DdNode * cuddSubsetHeavyBranch(DdManager *dd, DdNode *f, int numVars, int threshold)
int siftMaxSwap
Definition: cuddInt.h:396
int cuddAnnealing(DdManager *table, int lower, int upper)
Definition: cuddAnneal.c:154
DdHook * preReorderingHook
Definition: cuddInt.h:421
unsigned deadMask
Definition: cuddInt.h:387
unsigned long startTime
Definition: cuddInt.h:426
int * invpermZ
Definition: cuddInt.h:372
int reordCycle
Definition: cuddInt.h:399
DdNode * cuddUniqueConst(DdManager *unique, CUDD_VALUE_TYPE value)
Definition: cuddTable.c:1479
DdNode * cuddCacheLookup1(DdManager *table, DdNode *(*)(DdManager *, DdNode *), DdNode *f)
DdManager * manager
Definition: cuddInt.h:298
int size
Definition: cuddInt.h:345
DdNode * cuddCacheLookup2(DdManager *table, DdNode *(*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g)
double gcFrac
Definition: cuddInt.h:359
DdNode * cuddZddWeakDivF(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddZddFuncs.c:918
Definition: cuddInt.h:469
unsigned int maxCacheHard
Definition: cuddInt.h:343
int cuddZddGetNegVarLevel(DdManager *dd, int index)
int cuddResizeLinear(DdManager *table)
Definition: cuddLinear.c:800
CUDD_VALUE_TYPE value
Definition: cuddInt.h:213
Cudd_ErrorType
Definition: cudd.h:216
struct DdGen::@1::@5 nodes
void cuddSetInteract(DdManager *table, int x, int y)
Definition: cuddInteract.c:153
unsigned int slots
Definition: cuddInt.h:352
int cuddCollectNodes(DdNode *f, st_table *visited)
Definition: cuddUtil.c:2933
ptruint h
Definition: cuddInt.h:303
DdNode * zero
Definition: cuddInt.h:330
int cuddInitInteract(DdManager *table)
Definition: cuddInteract.c:234
void cuddReclaim(DdManager *table, DdNode *n)
Definition: cuddRef.c:580
int cuddNextLow(DdManager *table, int x)
Definition: cuddReorder.c:737
double maxGrowthAlt
Definition: cuddInt.h:398
ptrint count
Definition: cuddInt.h:282
int realign
Definition: cuddInt.h:404
int cuddZddGetNegVarIndex(DdManager *dd, int index)
int cuddSifting(DdManager *table, int lower, int upper)
Definition: cuddReorder.c:502
double maxGrowth
Definition: cuddInt.h:397
DdNode * cuddCProjectionRecur(DdManager *dd, DdNode *R, DdNode *Y, DdNode *Ysupp)
DdNode * cuddBddClippingAndAbstract(DdManager *dd, DdNode *f, DdNode *g, DdNode *cube, int maxDepth, int direction)
FILE * err
Definition: cuddInt.h:424
DdNode * g
Definition: cuddInt.h:302
int cuddTimesInDeathRow(DdManager *dd, DdNode *f)
Definition: cuddRef.c:789
DdNode * cuddLocalCacheLookup(DdLocalCache *cache, DdNodePtr *key)
Definition: cuddLCache.c:324
void cuddCacheInsert1(DdManager *table, DdNode *(*)(DdManager *, DdNode *), DdNode *f, DdNode *data)
int garbageCollections
Definition: cuddInt.h:432
int populationSize
Definition: cuddInt.h:414
struct DdLocalCacheItem DdLocalCacheItem
DdNode * cuddZddWeakDiv(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddZddFuncs.c:757
DdNode * cuddBddClippingAnd(DdManager *dd, DdNode *f, DdNode *g, int maxDepth, int direction)
struct DdHashItem * next
Definition: cuddInt.h:281
int * cube
Definition: cuddInt.h:212
int cuddCacheProfile(DdManager *table, FILE *fp)
Definition: cuddCache.c:749
int cuddZddSwapInPlace(DdManager *table, int x, int y)
Definition: cuddZddReord.c:480
int numBuckets
Definition: cuddInt.h:494
DdNode * cuddCofactorRecur(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddCof.c:226
Cudd_ReorderingType autoMethodZ
Definition: cuddInt.h:403
int bindVar
Definition: cuddInt.h:318
void cuddLevelQueueQuit(DdLevelQueue *queue)
Definition: cuddInt.h:206
DdSubtable * subtables
Definition: cuddInt.h:349
DdNode * cuddAddNegateRecur(DdManager *dd, DdNode *f)
int * permZ
Definition: cuddInt.h:370
double cachecollisions
Definition: cuddInt.h:437
DdNode * DdNodePtr
Definition: cuddInt.h:253
DdNode * cuddZddChange(DdManager *dd, DdNode *P, int var)
Definition: cuddZddSetop.c:967
DdNode * value
Definition: cuddInt.h:257
DdNode * cuddAddMonadicApplyRecur(DdManager *dd, DdNode *(*op)(DdManager *, DdNode *), DdNode *f)
void cuddPrintVarGroups(DdManager *dd, MtrNode *root, int zdd, int silent)
Definition: cuddCheck.c:749
struct DdHashTable DdHashTable
MtrNode * tree
Definition: cuddInt.h:408
double minHit
Definition: cuddInt.h:272
unsigned int keysize
Definition: cuddInt.h:268
struct DdSubtable DdSubtable
int cuddTreeSifting(DdManager *table, Cudd_ReorderingType method)
Definition: cuddGroup.c:271
int cuddZddGetPosVarIndex(DdManager *dd, int index)
DdNode * cuddAddRoundOffRecur(DdManager *dd, DdNode *f, double trunc)
DdLocalCacheItem * item
Definition: cuddInt.h:266
DdNode * cuddHashTableLookup1(DdHashTable *hash, DdNode *f)
Definition: cuddLCache.c:864
DD_HFP f
Definition: cuddInt.h:241
DdNode ** deathRow
Definition: cuddInt.h:384
double cacheinserts
Definition: cuddInt.h:438
int cuddSymmCheck(DdManager *table, int x, int y)
Definition: cuddSymmetry.c:188
DdNode ** stack
Definition: cuddInt.h:364
int cuddZddGetPosVarLevel(DdManager *dd, int index)
int cuddExact(DdManager *table, int lower, int upper)
Definition: cuddExact.c:149
struct DdQueueItem * next
Definition: cuddInt.h:479
Cudd_VariableType
Definition: cudd.h:249
struct DdLocalCache * next
Definition: cuddInt.h:276
void cuddCacheResize(DdManager *table)
Definition: cuddCache.c:889
unsigned int maxslots
Definition: cuddInt.h:274
int cuddSymmSiftingConv(DdManager *table, int lower, int upper)
Definition: cuddSymmetry.c:439
int cuddHeapProfile(DdManager *dd)
Definition: cuddCheck.c:641
DdNode * cuddHashTableLookup3(DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddLCache.c:1171
DdNode * ub
Definition: cuddInt.h:217
int cuddGarbageCollect(DdManager *unique, int clearCache)
Definition: cuddTable.c:762
void cuddLocalCacheInsert(DdLocalCache *cache, DdNodePtr *key, DdNode *value)
Definition: cuddLCache.c:291
void * cuddHashTableGenericLookup(DdHashTable *hash, DdNode *f)
Definition: cuddLCache.c:966
unsigned int countDead
Definition: cuddInt.h:407
unsigned int initSlots
Definition: cuddInt.h:363
void * cuddLevelQueueFirst(DdLevelQueue *queue, void *key, int level)
int cuddZddSymmSiftingConv(DdManager *table, int lower, int upper)
Definition: cuddZddSymm.c:423
unsigned int randomizeOrder
Definition: cuddInt.h:416
void * cuddLevelQueueEnqueue(DdLevelQueue *queue, void *key, int level)
Cudd_VariableType varType
Definition: cuddInt.h:320
DdLocalCache * cuddLocalCacheInit(DdManager *manager, unsigned int keySize, unsigned int cacheSize, unsigned int maxCacheSize)
Definition: cuddLCache.c:202
int reordered
Definition: cuddInt.h:392
int cuddZddLinearSifting(DdManager *table, int lower, int upper)
Definition: cuddZddLin.c:152
unsigned int nextDyn
Definition: cuddInt.h:406
struct DdQueueItem DdQueueItem
unsigned int dead
Definition: cuddInt.h:355
DdNode * cuddAddUnivAbstractRecur(DdManager *manager, DdNode *f, DdNode *cube)
DdLevelQueue * cuddLevelQueueInit(int levels, int itemSize, int numBuckets)
DdNode * cuddAddBddDoPattern(DdManager *dd, DdNode *f)
DdNode * cuddBddIsop(DdManager *dd, DdNode *L, DdNode *U)
Definition: cuddZddIsop.c:572
unsigned int cacheSlots
Definition: cuddInt.h:337
DdNode * cuddBddRestrictRecur(DdManager *dd, DdNode *f, DdNode *c)
void cuddLocalCacheClearAll(DdManager *manager)
Definition: cuddLCache.c:423
DdNode * cuddZddProduct(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddZddFuncs.c:376
unsigned int maxLive
Definition: cuddInt.h:357
DdNode * cuddZddDiff(DdManager *zdd, DdNode *P, DdNode *Q)
Definition: cuddZddSetop.c:713
struct DdHook DdHook
int recomb
Definition: cuddInt.h:411
DdNode sentinel
Definition: cuddInt.h:328
DdNode * cuddBddTransfer(DdManager *ddS, DdManager *ddD, DdNode *f)
DdNode * cuddAddComposeRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *proj)
char * stash
Definition: cuddInt.h:382
DdNode * cuddBddLiteralSetIntersectionRecur(DdManager *dd, DdNode *f, DdNode *g)
DdNode ** stack
Definition: cuddInt.h:225
DdHook * postReorderingHook
Definition: cuddInt.h:422
unsigned int keys
Definition: cuddInt.h:353
unsigned int itemsize
Definition: cuddInt.h:267
unsigned int dead
Definition: cuddInt.h:316
FILE * out
Definition: cuddInt.h:423
int cuddResizeTableZdd(DdManager *unique, int index)
Definition: cuddTable.c:2270
unsigned int flags
Definition: cuddInt.h:472
int realignZ
Definition: cuddInt.h:405
DdCache * cache
Definition: cuddInt.h:336
DdNode * cuddZddIntersect(DdManager *zdd, DdNode *P, DdNode *Q)
Definition: cuddZddSetop.c:638
double hits
Definition: cuddInt.h:273
DdHalfWord x
Definition: cuddInt.h:470
double lookUps
Definition: cuddInt.h:271
unsigned int numBuckets
Definition: cuddInt.h:294
int cuddZddGetCofactors2(DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0)
DdNode * cuddAddExistAbstractRecur(DdManager *manager, DdNode *f, DdNode *cube)
void cuddSlowTableGrowth(DdManager *unique)
Definition: cuddTable.c:2414
DdNode * cuddZddDivide(DdManager *dd, DdNode *f, DdNode *g)
DdManager * manager
Definition: cuddInt.h:207
DdNode * cuddUniqueInterIVO(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1333
Cudd_LazyGroupType varToBeGrouped
Definition: cuddInt.h:323
DdNode * cuddCacheLookupZdd(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:409
struct DdGen::@1::@4 primes
int cuddInsertSubtables(DdManager *unique, int n, int level)
Definition: cuddTable.c:1824
double totCacheMisses
Definition: cuddInt.h:436
unsigned int slots
Definition: cuddInt.h:269
int maxSize
Definition: cuddInt.h:347
long * interact
Definition: cuddInt.h:377
void cuddLocalCacheQuit(DdLocalCache *cache)
Definition: cuddLCache.c:265
DdNode * cuddZddIsop(DdManager *dd, DdNode *L, DdNode *U, DdNode **zdd_I)
Definition: cuddZddIsop.c:231
unsigned int maxKeys
Definition: cuddInt.h:315
int(* DD_HFP)(DdManager *, const char *, void *)
Definition: cudd.h:299
DdNode * cuddZddIte(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddZddSetop.c:423
long * linear
Definition: cuddInt.h:378
DdNode * cuddAddApplyRecur(DdManager *dd, DdNode *(*)(DdManager *, DdNode **, DdNode **), DdNode *f, DdNode *g)
DdNode * cuddMakeBddFromZddCover(DdManager *dd, DdNode *node)
Definition: cuddZddIsop.c:797
struct DdHashItem DdHashItem
int gcEnabled
Definition: cuddInt.h:360
DdNode * cuddBiasedUnderApprox(DdManager *dd, DdNode *f, DdNode *b, int numVars, int threshold, double quality1, double quality0)
int sp
Definition: cuddInt.h:224
int symmviolation
Definition: cuddInt.h:412
DdNode * cuddSolveEqnRecur(DdManager *bdd, DdNode *F, DdNode *Y, DdNode **G, int n, int *yIndex, int i)
DdNode * cuddAddScalarInverseRecur(DdManager *dd, DdNode *f, DdNode *epsilon)
int numberXovers
Definition: cuddInt.h:415
int cuddHashTableInsert(DdHashTable *hash, DdNodePtr *key, DdNode *value, ptrint count)
Definition: cuddLCache.c:693
double cacheLastInserts
Definition: cuddInt.h:439
DdNode ** nodelist
Definition: cuddInt.h:311
int linearSize
Definition: cuddInt.h:376
int cuddZddSifting(DdManager *table, int lower, int upper)
Definition: cuddZddReord.c:863
DdNode * cuddAddConstrainRecur(DdManager *dd, DdNode *f, DdNode *c)
double cacheHits
Definition: cuddInt.h:340
DdNode * cuddUniqueInterZdd(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1372
unsigned int maxsize
Definition: cuddInt.h:297
int cuddZddSymmCheck(DdManager *table, int x, int y)
Definition: cuddZddSymm.c:193
int cuddZddNextHigh(DdManager *table, int x)
Definition: cuddZddReord.c:409
DdNode * cuddAddRestrictRecur(DdManager *dd, DdNode *f, DdNode *c)
DdLocalCache * localCaches
Definition: cuddInt.h:417
DdNode * cuddBddIteRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddBddIte.c:742
void cuddHashTableQuit(DdHashTable *hash)
Definition: cuddLCache.c:607
int cacheSlack
Definition: cuddInt.h:342
st_retval
Definition: st.h:78
int cuddHashTableGenericInsert(DdHashTable *hash, DdNode *f, void *value)
Definition: cuddLCache.c:919
DdNode * cuddAddOrAbstractRecur(DdManager *manager, DdNode *f, DdNode *cube)
void * first
Definition: cuddInt.h:486
int cuddZddGetCofactors3(DdManager *dd, DdNode *f, int v, DdNode **f1, DdNode **f0, DdNode **fd)
int cuddWindowReorder(DdManager *table, int low, int high, Cudd_ReorderingType submethod)
Definition: cuddWindow.c:138
DdNode * cuddDynamicAllocNode(DdManager *table)
Definition: cuddReorder.c:405
int nextDead
Definition: cuddInt.h:386
Definition: mtr.h:126
int varHandled
Definition: cuddInt.h:322
void cuddLocalCacheClearDead(DdManager *manager)
Definition: cuddLCache.c:371
void cuddReclaimZdd(DdManager *table, DdNode *n)
Definition: cuddRef.c:634
DdManager * cuddInitTable(unsigned int numVars, unsigned int numVarsZ, unsigned int numSlots, unsigned int looseUpTo)
Definition: cuddTable.c:380
DdNode * cuddCacheLookup2Zdd(DdManager *table, DdNode *(*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g)
int cuddHashTableInsert2(DdHashTable *hash, DdNode *f, DdNode *g, DdNode *value, ptrint count)
Definition: cuddLCache.c:1005
unsigned long GCTime
Definition: cuddInt.h:433
int cuddSwapping(DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic)
Definition: cuddReorder.c:604
int cuddIsInDeathRow(DdManager *dd, DdNode *f)
Definition: cuddRef.c:758
int cuddLinearInPlace(DdManager *table, int x, int y)
Definition: cuddLinear.c:360
DdNode * cuddBddConstrainRecur(DdManager *dd, DdNode *f, DdNode *c)
int cuddZddInitUniv(DdManager *zdd)
Definition: cuddInit.c:245
DdNode ** memoryList
Definition: cuddInt.h:380
int cuddNextHigh(DdManager *table, int x)
Definition: cuddReorder.c:715
DdNode * cuddZddUnateProduct(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddZddFuncs.c:613
unsigned int maxReorderings
Definition: cuddInt.h:394
DdNode * cuddRemapUnderApprox(DdManager *dd, DdNode *f, int numVars, int threshold, double quality)
int cuddGa(DdManager *table, int lower, int upper)
Definition: cuddGenetic.c:188
unsigned int itemsize
Definition: cuddInt.h:290
DdNode * cuddBddAndRecur(DdManager *manager, DdNode *f, DdNode *g)
Definition: cuddBddIte.c:995
unsigned long memused
Definition: cuddInt.h:429
int siftMaxVar
Definition: cuddInt.h:395
DdNode * cuddZddSubset1(DdManager *dd, DdNode *P, int var)
Definition: cuddZddSetop.c:870
unsigned int ptruint
Definition: cuddInt.h:250
int cuddZddSymmSifting(DdManager *table, int lower, int upper)
Definition: cuddZddSymm.c:298
struct DdLevelQueue DdLevelQueue
DdNode * cuddZddUnion(DdManager *zdd, DdNode *P, DdNode *Q)
Definition: cuddZddSetop.c:549
DdNode * cuddCacheLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:347
int cuddSwapInPlace(DdManager *table, int x, int y)
Definition: cuddReorder.c:760
#define CUDD_VALUE_TYPE
Definition: cudd.h:90
int deathRowDepth
Definition: cuddInt.h:385
DdNode * nextFree
Definition: cuddInt.h:381
DdNode * cuddBddClosestCube(DdManager *dd, DdNode *f, DdNode *g, CUDD_VALUE_TYPE bound)
void cuddCacheFlush(DdManager *table)
Definition: cuddCache.c:1004
struct DdHook * next
Definition: cuddInt.h:242
int cuddHashTableInsert1(DdHashTable *hash, DdNode *f, DdNode *value, ptrint count)
Definition: cuddLCache.c:812
enum st_retval cuddStCountfree(char *key, char *value, char *arg)
Definition: cuddUtil.c:2903
DdNode * cuddBddNPAndRecur(DdManager *dd, DdNode *f, DdNode *c)
DdNode * cuddBddMakePrime(DdManager *dd, DdNode *cube, DdNode *f)
Definition: cuddSat.c:995
void cuddGetBranches(DdNode *g, DdNode **g1, DdNode **g0)
Definition: cuddCof.c:196
struct DdGen::@1::@3 cubes
DdNode * cuddUnderApprox(DdManager *dd, DdNode *f, int numVars, int threshold, int safe, double quality)
void cuddClearDeathRow(DdManager *table)
Definition: cuddRef.c:722
DdNode * cuddAddIteRecur(DdManager *dd, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddAddIte.c:441
void cuddCacheInsert2(DdManager *table, DdNode *(*)(DdManager *, DdNode *, DdNode *), DdNode *f, DdNode *g, DdNode *data)
int sizeZ
Definition: cuddInt.h:346
DdHashItem * nextFree
Definition: cuddInt.h:292
unsigned int looseUpTo
Definition: cuddInt.h:361
unsigned int slots
Definition: cuddInt.h:313
DdHalfWord y
Definition: cuddInt.h:471
unsigned int reorderings
Definition: cuddInt.h:393
DdNode ** vars
Definition: cuddInt.h:373
double cacheMisses
Definition: cuddInt.h:339
DdNodePtr * cuddNodeArray(DdNode *f, int *n)
Definition: cuddUtil.c:2987
unsigned long maxmemhard
Definition: cuddInt.h:431
DdHook * postGCHook
Definition: cuddInt.h:420
int pairIndex
Definition: cuddInt.h:321
DdNode * cuddHashTableLookup2(DdHashTable *hash, DdNode *f, DdNode *g)
Definition: cuddLCache.c:1059
double minHit
Definition: cuddInt.h:341
DdNode * cuddConstantLookup(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h)
Definition: cuddCache.c:690
union DdGen::@1 gen
CUDD_VALUE_TYPE epsilon
Definition: cuddInt.h:390
DdNode * one
Definition: cuddInt.h:329
DdQueueItem * freelist
Definition: cuddInt.h:488
unsigned int next
Definition: cuddInt.h:317
DdNode * cuddZddChangeAux(DdManager *zdd, DdNode *P, DdNode *zvar)
Definition: cuddZddSetop.c:795
int cuddZddSwapping(DdManager *table, int lower, int upper, Cudd_ReorderingType heuristic)
Definition: cuddZddReord.c:742
int cuddZddTreeSifting(DdManager *table, Cudd_ReorderingType method)
Definition: cuddZddGroup.c:228
struct Move Move
MtrNode * treeZ
Definition: cuddInt.h:409
int autoDynZ
Definition: cuddInt.h:401
int cacheShift
Definition: cuddInt.h:338
int cuddP(DdManager *dd, DdNode *f)
Definition: cuddUtil.c:2874
DdNode * cuddHashTableLookup(DdHashTable *hash, DdNodePtr *key)
Definition: cuddLCache.c:748
DdNode * cuddBddXorRecur(DdManager *manager, DdNode *f, DdNode *g)
Definition: cuddBddIte.c:1123
void cuddPrintNode(DdNode *f, FILE *fp)
Definition: cuddCheck.c:712
DdNode * cuddAllocNode(DdManager *unique)
Definition: cuddTable.c:266
struct Move * next
Definition: cuddInt.h:474
DdNode * plusinfinity
Definition: cuddInt.h:331
int size
Definition: cuddInt.h:220
int cuddZddAlignToBdd(DdManager *table)
Definition: cuddZddReord.c:348
struct DdLocalCache DdLocalCache
DdNode * key[1]
Definition: cuddInt.h:284
DdHashTable * cuddHashTableInit(DdManager *manager, unsigned int keySize, unsigned int initSize)
Definition: cuddLCache.c:557
int arcviolation
Definition: cuddInt.h:413
void cuddUpdateInteractionMatrix(DdManager *table, int xindex, int yindex)
Definition: cuddLinear.c:714
DdQueueItem ** buckets
Definition: cuddInt.h:489
int shift
Definition: cuddInt.h:295
int * invperm
Definition: cuddInt.h:371
DdSubtable constants
Definition: cuddInt.h:351
double cachedeletions
Definition: cuddInt.h:440
DdNode * cuddZddSubset0(DdManager *dd, DdNode *P, int var)
Definition: cuddZddSetop.c:919
int isolated
Definition: cuddInt.h:368
DdNode * cuddZddDivideF(DdManager *dd, DdNode *f, DdNode *g)
unsigned long maxmem
Definition: cuddInt.h:430
DdNode * cuddBddIntersectRecur(DdManager *dd, DdNode *f, DdNode *g)
Definition: cuddBddIte.c:880
int cuddComputeFloorLog2(unsigned int value)
Definition: cuddCache.c:1036
void cuddCacheInsert(DdManager *table, ptruint op, DdNode *f, DdNode *g, DdNode *h, DdNode *data)
Definition: cuddCache.c:217
DdNode * minusinfinity
Definition: cuddInt.h:332
int cuddLinearAndSifting(DdManager *table, int lower, int upper)
Definition: cuddLinear.c:236
DdQueueItem ** last
Definition: cuddInt.h:487
void cuddFreeTable(DdManager *unique)
Definition: cuddTable.c:692
int cuddTestInteract(DdManager *table, int x, int y)
Definition: cuddInteract.c:188
int cuddBddAlignToZdd(DdManager *table)
Definition: cuddReorder.c:1250
DdHashItem ** memoryList
Definition: cuddInt.h:293
DdNode * cuddBddAndAbstractRecur(DdManager *manager, DdNode *f, DdNode *g, DdNode *cube)
int autoDyn
Definition: cuddInt.h:400
int shift
Definition: cuddInt.h:312
DdCache * acache
Definition: cuddInt.h:335
void cuddShrinkDeathRow(DdManager *table)
Definition: cuddRef.c:684
DdManager * manager
Definition: cuddInt.h:275
unsigned int keysZ
Definition: cuddInt.h:354
int cuddInitCache(DdManager *unique, unsigned int cacheSize, unsigned int maxCacheSize)
Definition: cuddCache.c:132
struct DdQueueItem * cnext
Definition: cuddInt.h:480
DdHook * preGCHook
Definition: cuddInt.h:419
Cudd_ReorderingType
Definition: cudd.h:147
void cuddHashTableGenericQuit(DdHashTable *hash)
Definition: cuddLCache.c:652
int cuddSymmSifting(DdManager *table, int lower, int upper)
Definition: cuddSymmetry.c:318
DdNode * cuddSplitSetRecur(DdManager *manager, st_table *mtable, int *varSeen, DdNode *p, double n, double max, int index)
void * key
Definition: cuddInt.h:481
int itemsize
Definition: cuddInt.h:491
Cudd_LazyGroupType
Definition: cudd.h:234
int * perm
Definition: cuddInt.h:369
unsigned long timeLimit
Definition: cuddInt.h:427
int cuddZddUniqueCompare(int *ptr_x, int *ptr_y)
Definition: cuddZddReord.c:455
int cuddZddNextLow(DdManager *table, int x)
Definition: cuddZddReord.c:431
struct DdCache DdCache
int size
Definition: cuddInt.h:473
Cudd_ErrorType errorCode
Definition: cuddInt.h:425
DdNode * cuddUniqueInter(DdManager *unique, int index, DdNode *T, DdNode *E)
Definition: cuddTable.c:1137
unsigned int minDead
Definition: cuddInt.h:358
int cuddDestroySubtables(DdManager *unique, int n)
Definition: cuddTable.c:2137
double reclaimed
Definition: cuddInt.h:367
int cuddZddP(DdManager *zdd, DdNode *f)
DdNode * background
Definition: cuddInt.h:333
DdNode * cuddZddComplement(DdManager *dd, DdNode *node)
int cuddHashTableInsert3(DdHashTable *hash, DdNode *f, DdNode *g, DdNode *h, DdNode *value, ptrint count)
Definition: cuddLCache.c:1115
int status
Definition: cuddInt.h:209
DdSubtable * subtableZ
Definition: cuddInt.h:350
char * hooks
Definition: cuddInt.h:418
double totCachehits
Definition: cuddInt.h:435
DdNode ** univ
Definition: cuddInt.h:375