emergency commit
[cl-cudd.git] / distr / cudd / doc / cuddAllDet.html
blob9553951ebe3d2fa3d8ac066695f26f5979daa279
1 <html>
2 <head><title>The cudd package: all functions </title></head>
3 <body>
6 <HR>
7 <DL>
8 <dt><pre>
9 <A NAME="AssessPathLength"></A>
10 static unsigned int <I></I>
11 <B>AssessPathLength</B>(
12 unsigned int * <b>pathLengthArray</b>, <i>array determining number of nodes belonging to the different path lengths</i>
13 int <b>threshold</b>, <i>threshold to determine maximum allowable nodes in the subset</i>
14 int <b>numVars</b>, <i>maximum number of variables</i>
15 unsigned int * <b>excess</b>, <i>number of nodes labeled maxpath required in the subset</i>
16 FILE * <b>fp</b> <i>where to write messages</i>
18 </pre>
19 <dd> Chooses the maximum allowable path length under each node.
20 The corner cases are when the threshold is larger than the number
21 of nodes in the BDD iself, in which case 'numVars + 1' is returned.
22 If all nodes of a particular path length are needed, then the
23 maxpath returned is the next one with excess nodes = 0;
24 <p>
26 <dd> <b>Side Effects</b> None
27 <p>
29 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
31 <dt><pre>
32 <A NAME="BAapplyBias"></A>
33 static int <I></I>
34 <B>BAapplyBias</B>(
35 DdManager * <b>dd</b>, <i></i>
36 DdNode * <b>f</b>, <i></i>
37 DdNode * <b>b</b>, <i></i>
38 ApproxInfo * <b>info</b>, <i></i>
39 DdHashTable * <b>cache</b> <i></i>
41 </pre>
42 <dd> Finds don't care nodes by traversing f and b in parallel.
43 Returns the care status of the visited f node if successful; CARE_ERROR
44 otherwise.
45 <p>
47 <dd> <b>Side Effects</b> None
48 <p>
50 <dd> <b>See Also</b> <code><a href="#cuddBiasedUnderApprox">cuddBiasedUnderApprox</a>
51 </code>
53 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
55 <dt><pre>
56 <A NAME="BAmarkNodes"></A>
57 static int <I></I>
58 <B>BAmarkNodes</B>(
59 DdManager * <b>dd</b>, <i>manager</i>
60 DdNode * <b>f</b>, <i>function to be analyzed</i>
61 ApproxInfo * <b>info</b>, <i>info on BDD</i>
62 int <b>threshold</b>, <i>when to stop approximating</i>
63 double <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
64 double <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
66 </pre>
67 <dd> Marks nodes for remapping. Returns 1 if successful; 0
68 otherwise.
69 <p>
71 <dd> <b>Side Effects</b> None
72 <p>
74 <dd> <b>See Also</b> <code><a href="#cuddRemapUnderApprox">cuddRemapUnderApprox</a>
75 </code>
77 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
79 <dt><pre>
80 <A NAME="BuildConjuncts"></A>
81 static Conjuncts * <I></I>
82 <B>BuildConjuncts</B>(
83 DdManager * <b>dd</b>, <i></i>
84 DdNode * <b>node</b>, <i></i>
85 st_table * <b>distanceTable</b>, <i></i>
86 st_table * <b>cacheTable</b>, <i></i>
87 int <b>approxDistance</b>, <i></i>
88 int <b>maxLocalRef</b>, <i></i>
89 st_table * <b>ghTable</b>, <i></i>
90 st_table * <b>mintermTable</b> <i></i>
92 </pre>
93 <dd> Builds the conjuncts recursively, bottom up. Constants
94 are returned as (f, f). The cache is checked for previously computed
95 result. The decomposition points are determined by the local
96 reference count of this node and the longest distance from the
97 constant. At the decomposition point, the factors returned are (f,
98 1). Recur on the two children. The order is determined by the
99 heavier branch. Combine the factors of the two children and pick the
100 one that already occurs in the gh table. Occurence in g is indicated
101 by value 1, occurence in h by 2, occurence in both 3.
104 <dd> <b>See Also</b> <code><a href="#cuddConjunctsAux">cuddConjunctsAux</a>
105 </code>
107 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
109 <dt><pre>
110 <A NAME="BuildSubsetBdd"></A>
111 static DdNode * <I></I>
112 <B>BuildSubsetBdd</B>(
113 DdManager * <b>dd</b>, <i>DD manager</i>
114 st_table * <b>pathTable</b>, <i>path table with path lengths and computed results</i>
115 DdNode * <b>node</b>, <i>current node</i>
116 struct AssortedInfo * <b>info</b>, <i>assorted information structure</i>
117 st_table * <b>subsetNodeTable</b> <i>table storing computed results</i>
119 </pre>
120 <dd> Builds the BDD with nodes labeled with path length
121 under maxpath and as many nodes labeled maxpath as determined by the
122 threshold. The procedure uses the path table to determine which nodes
123 in the original bdd need to be retained. This procedure picks a
124 shortest path (tie break decided by taking the child with the shortest
125 distance to the constant) and recurs down the path till it reaches the
126 constant. the procedure then starts building the subset upward from
127 the constant. All nodes labeled by path lengths less than the given
128 maxpath are used to build the subset. However, in the case of nodes
129 that have label equal to maxpath, as many are chosen as required by
130 the threshold. This number is stored in the info structure in the
131 field thresholdReached. This field is decremented whenever a node
132 labeled maxpath is encountered and the nodes labeled maxpath are
133 aggregated in a maxpath table. As soon as the thresholdReached count
134 goes to 0, the shortest path from this node to the constant is found.
135 The extraction of nodes with the above labeling is based on the fact
136 that each node, labeled with a path length, P, has at least one child
137 labeled P or less. So extracting all nodes labeled a given path length
138 P ensures complete paths between the root and the constant. Extraction
139 of a partial number of nodes with a given path length may result in
140 incomplete paths and hence the additional number of nodes are grabbed
141 to complete the path. Since the Bdd is built bottom-up, other nodes
142 labeled maxpath do lie on complete paths. The procedure may cause the
143 subset to have a larger or smaller number of nodes than the specified
144 threshold. The increase in the number of nodes is caused by the
145 building of a subset and the reduction by recombination. However in
146 most cases, the recombination overshadows the increase and the
147 procedure returns a result with lower number of nodes than specified.
148 The subsetNodeTable is NIL when there is no hard limit on the number
149 of nodes. Further efforts towards keeping the subset closer to the
150 threshold number were abandoned in favour of keeping the procedure
151 simple and fast.
154 <dd> <b>Side Effects</b> SubsetNodeTable is changed if it is not NIL.
157 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
159 <dt><pre>
160 <A NAME="BuildSubsetBdd"></A>
161 static DdNode * <I></I>
162 <B>BuildSubsetBdd</B>(
163 DdManager * <b>dd</b>, <i>DD manager</i>
164 DdNode * <b>node</b>, <i>current node</i>
165 int * <b>size</b>, <i>current size of the subset</i>
166 st_table * <b>visitedTable</b>, <i>visited table storing all node data</i>
167 int <b>threshold</b>, <i></i>
168 st_table * <b>storeTable</b>, <i></i>
169 st_table * <b>approxTable</b> <i></i>
171 </pre>
172 <dd> The procedure carries out the building of the subset BDD
173 starting at the root. Using the three different counts labelling each node,
174 the procedure chooses the heavier branch starting from the root and keeps
175 track of the number of nodes it discards at each step, thus keeping count
176 of the size of the subset BDD dynamically. Once the threshold is satisfied,
177 the procedure then calls ITE to build the BDD.
180 <dd> <b>Side Effects</b> None
183 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
185 <dt><pre>
186 <A NAME="CheckInTables"></A>
187 static Conjuncts * <I></I>
188 <B>CheckInTables</B>(
189 DdNode * <b>node</b>, <i></i>
190 DdNode * <b>g1</b>, <i></i>
191 DdNode * <b>h1</b>, <i></i>
192 DdNode * <b>g2</b>, <i></i>
193 DdNode * <b>h2</b>, <i></i>
194 st_table * <b>ghTable</b>, <i></i>
195 st_table * <b>cacheTable</b>, <i></i>
196 int * <b>outOfMem</b> <i></i>
198 </pre>
199 <dd> Check if the two pairs exist in the table. If any of
200 the conjuncts do exist, store in the cache and return the
201 corresponding pair.
204 <dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
205 <a href="#BuildConjuncts">BuildConjuncts</a>
206 </code>
208 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
210 <dt><pre>
211 <A NAME="CheckTablesCacheAndReturn"></A>
212 static Conjuncts * <I></I>
213 <B>CheckTablesCacheAndReturn</B>(
214 DdNode * <b>node</b>, <i></i>
215 DdNode * <b>g</b>, <i></i>
216 DdNode * <b>h</b>, <i></i>
217 st_table * <b>ghTable</b>, <i></i>
218 st_table * <b>cacheTable</b> <i></i>
220 </pre>
221 <dd> Check the tables for the existence of pair and return
222 one combination, cache the result. The assumption is that one of the
223 conjuncts is already in the tables.
226 <dd> <b>Side Effects</b> g and h referenced for the cache
229 <dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
230 </code>
232 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
234 <dt><pre>
235 <A NAME="ConjunctsFree"></A>
236 static void <I></I>
237 <B>ConjunctsFree</B>(
238 DdManager * <b>dd</b>, <i></i>
239 Conjuncts * <b>factors</b> <i></i>
241 </pre>
242 <dd> Free factors structure
245 <dd> <b>Side Effects</b> None
248 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
250 <dt><pre>
251 <A NAME="CorrelCleanUp"></A>
252 static enum st_retval <I></I>
253 <B>CorrelCleanUp</B>(
254 char * <b>key</b>, <i></i>
255 char * <b>value</b>, <i></i>
256 char * <b>arg</b> <i></i>
258 </pre>
259 <dd> Frees memory associated with hash table. Returns
260 ST_CONTINUE.
263 <dd> <b>Side Effects</b> None
266 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
268 <dt><pre>
269 <A NAME="CorrelCompare"></A>
270 static int <I></I>
271 <B>CorrelCompare</B>(
272 const char * <b>key1</b>, <i></i>
273 const char * <b>key2</b> <i></i>
275 </pre>
276 <dd> Compares two hash table entries. Returns 0 if they are
277 identical; 1 otherwise.
280 <dd> <b>Side Effects</b> None
283 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
285 <dt><pre>
286 <A NAME="CorrelHash"></A>
287 static int <I></I>
288 <B>CorrelHash</B>(
289 char * <b>key</b>, <i></i>
290 int <b>modulus</b> <i></i>
292 </pre>
293 <dd> Hashes a hash table entry. It is patterned after
294 st_strhash. Returns a value between 0 and modulus.
297 <dd> <b>Side Effects</b> None
300 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
302 <dt><pre>
303 <A NAME="CountMinterms"></A>
304 static double <I></I>
305 <B>CountMinterms</B>(
306 DdNode * <b>node</b>, <i></i>
307 double <b>max</b>, <i></i>
308 st_table * <b>mintermTable</b>, <i></i>
309 FILE * <b>fp</b> <i></i>
311 </pre>
312 <dd> Count the number of minterms of each node ina a BDD and
313 store it in a hash table.
316 <dd> <b>Side Effects</b> None
319 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
321 <dt><pre>
322 <A NAME="CreateBotDist"></A>
323 static NodeStat * <I></I>
324 <B>CreateBotDist</B>(
325 DdNode * <b>node</b>, <i></i>
326 st_table * <b>distanceTable</b> <i></i>
328 </pre>
329 <dd> Get longest distance of node from constant. Returns the
330 distance of the root from the constant if successful; CUDD_OUT_OF_MEM
331 otherwise.
334 <dd> <b>Side Effects</b> None
337 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
339 <dt><pre>
340 <A NAME="CreateBotDist"></A>
341 static int <I></I>
342 <B>CreateBotDist</B>(
343 DdNode * <b>node</b>, <i>current node</i>
344 st_table * <b>pathTable</b>, <i>path table with path lengths</i>
345 unsigned int * <b>pathLengthArray</b>, <i>array that stores number of nodes belonging to a particular path length.</i>
346 FILE * <b>fp</b> <i>where to write messages</i>
348 </pre>
349 <dd> Labels each node with the shortest distance from the constant.
350 This is done in a DFS search of the BDD. Each node has an odd
351 and even parity distance from the sink (since there exists paths to both
352 zero and one) which is less than MAXSHORTINT. At each node these distances
353 are updated using the minimum distance of its children from the constant.
354 SInce now both the length from the root and child is known, the minimum path
355 length(length of the shortest path between the root and the constant that
356 this node lies on) of this node can be calculated and used to update the
357 pathLengthArray
360 <dd> <b>Side Effects</b> Updates Path Table and path length array
363 <dd> <b>See Also</b> <code><a href="#CreatePathTable">CreatePathTable</a>
364 <a href="#CreateTopDist">CreateTopDist</a>
365 <a href="#AssessPathLength">AssessPathLength</a>
366 </code>
368 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
370 <dt><pre>
371 <A NAME="CreatePathTable"></A>
372 static st_table * <I></I>
373 <B>CreatePathTable</B>(
374 DdNode * <b>node</b>, <i>root of function</i>
375 unsigned int * <b>pathLengthArray</b>, <i>array of path lengths to store nodes labeled with the various path lengths</i>
376 FILE * <b>fp</b> <i>where to write messages</i>
378 </pre>
379 <dd> The outer procedure to label each node with its shortest
380 distance from the root and constant. Calls CreateTopDist and CreateBotDist.
381 The basis for computing the distance between root and constant is that
382 the distance may be the sum of even distances from the node to the root
383 and constant or the sum of odd distances from the node to the root and
384 constant. Both CreateTopDist and CreateBotDist create the odd and
385 even parity distances from the root and constant respectively.
388 <dd> <b>Side Effects</b> None
391 <dd> <b>See Also</b> <code><a href="#CreateTopDist">CreateTopDist</a>
392 <a href="#CreateBotDist">CreateBotDist</a>
393 </code>
395 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
397 <dt><pre>
398 <A NAME="CreateTopDist"></A>
399 static void <I></I>
400 <B>CreateTopDist</B>(
401 st_table * <b>pathTable</b>, <i>hast table to store path lengths</i>
402 int <b>parentPage</b>, <i>the pointer to the page on which the first parent in the queue is to be found.</i>
403 int <b>parentQueueIndex</b>, <i>pointer to the first parent on the page</i>
404 int <b>topLen</b>, <i>current distance from the root</i>
405 DdNode ** <b>childPage</b>, <i>pointer to the page on which the first child is to be added.</i>
406 int <b>childQueueIndex</b>, <i>pointer to the first child</i>
407 int <b>numParents</b>, <i>number of parents to process in this recursive call</i>
408 FILE * <b>fp</b> <i>where to write messages</i>
410 </pre>
411 <dd> Labels each node with its shortest distance from the root.
412 This is done in a BFS search of the BDD. The nodes are processed
413 in a queue implemented as pages(array) to reduce memory fragmentation.
414 An entry is created for each node visited. The distance from the root
415 to the node with the corresponding parity is updated. The procedure
416 is called recursively each recusion level handling nodes at a given
417 level from the root.
420 <dd> <b>Side Effects</b> Creates entries in the pathTable
423 <dd> <b>See Also</b> <code><a href="#CreatePathTable">CreatePathTable</a>
424 <a href="#CreateBotDist">CreateBotDist</a>
425 </code>
427 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
429 <dt><pre>
430 <A NAME="Cudd_AddHook"></A>
431 int <I></I>
432 <B>Cudd_AddHook</B>(
433 DdManager * <b>dd</b>, <i></i>
434 DD_HFP <b>f</b>, <i></i>
435 Cudd_HookType <b>where</b> <i></i>
437 </pre>
438 <dd> Adds a function to a hook. A hook is a list of
439 application-provided functions called on certain occasions by the
440 package. Returns 1 if the function is successfully added; 2 if the
441 function was already in the list; 0 otherwise.
444 <dd> <b>Side Effects</b> None
447 <dd> <b>See Also</b> <code><a href="#Cudd_RemoveHook">Cudd_RemoveHook</a>
448 </code>
450 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
452 <dt><pre>
453 <A NAME="Cudd_ApaAdd"></A>
454 DdApaDigit <I></I>
455 <B>Cudd_ApaAdd</B>(
456 int <b>digits</b>, <i></i>
457 DdApaNumber <b>a</b>, <i></i>
458 DdApaNumber <b>b</b>, <i></i>
459 DdApaNumber <b>sum</b> <i></i>
461 </pre>
462 <dd> Adds two arbitrary precision integers. Returns the
463 carry out of the most significant digit.
466 <dd> <b>Side Effects</b> The result of the sum is stored in parameter <code>sum</code>.
469 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
471 <dt><pre>
472 <A NAME="Cudd_ApaCompareRatios"></A>
473 int <I></I>
474 <B>Cudd_ApaCompareRatios</B>(
475 int <b>digitsFirst</b>, <i></i>
476 DdApaNumber <b>firstNum</b>, <i></i>
477 unsigned int <b>firstDen</b>, <i></i>
478 int <b>digitsSecond</b>, <i></i>
479 DdApaNumber <b>secondNum</b>, <i></i>
480 unsigned int <b>secondDen</b> <i></i>
482 </pre>
483 <dd> Compares the ratios of two arbitrary precision integers
484 to two unsigned ints. Returns 1 if the first number is larger; 0 if
485 they are equal; -1 if the second number is larger.
488 <dd> <b>Side Effects</b> None
491 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
493 <dt><pre>
494 <A NAME="Cudd_ApaCompare"></A>
495 int <I></I>
496 <B>Cudd_ApaCompare</B>(
497 int <b>digitsFirst</b>, <i></i>
498 DdApaNumber <b>first</b>, <i></i>
499 int <b>digitsSecond</b>, <i></i>
500 DdApaNumber <b>second</b> <i></i>
502 </pre>
503 <dd> Compares two arbitrary precision integers. Returns 1 if
504 the first number is larger; 0 if they are equal; -1 if the second
505 number is larger.
508 <dd> <b>Side Effects</b> None
511 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
513 <dt><pre>
514 <A NAME="Cudd_ApaCopy"></A>
515 void <I></I>
516 <B>Cudd_ApaCopy</B>(
517 int <b>digits</b>, <i></i>
518 DdApaNumber <b>source</b>, <i></i>
519 DdApaNumber <b>dest</b> <i></i>
521 </pre>
522 <dd> Makes a copy of an arbitrary precision integer.
525 <dd> <b>Side Effects</b> Changes parameter <code>dest</code>.
528 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
530 <dt><pre>
531 <A NAME="Cudd_ApaCountMinterm"></A>
532 DdApaNumber <I></I>
533 <B>Cudd_ApaCountMinterm</B>(
534 DdManager * <b>manager</b>, <i></i>
535 DdNode * <b>node</b>, <i></i>
536 int <b>nvars</b>, <i></i>
537 int * <b>digits</b> <i></i>
539 </pre>
540 <dd> Counts the number of minterms of a DD. The function is
541 assumed to depend on nvars variables. The minterm count is
542 represented as an arbitrary precision unsigned integer, to allow for
543 any number of variables CUDD supports. Returns a pointer to the
544 array representing the number of minterms of the function rooted at
545 node if successful; NULL otherwise.
548 <dd> <b>Side Effects</b> The number of digits of the result is returned in
549 parameter <code>digits</code>.
552 <dd> <b>See Also</b> <code><a href="#Cudd_CountMinterm">Cudd_CountMinterm</a>
553 </code>
555 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
557 <dt><pre>
558 <A NAME="Cudd_ApaIntDivision"></A>
559 unsigned int <I></I>
560 <B>Cudd_ApaIntDivision</B>(
561 int <b>digits</b>, <i></i>
562 DdApaNumber <b>dividend</b>, <i></i>
563 unsigned int <b>divisor</b>, <i></i>
564 DdApaNumber <b>quotient</b> <i></i>
566 </pre>
567 <dd> Divides an arbitrary precision integer by a 32-bit
568 unsigned integer. Returns the remainder of the division. This
569 procedure relies on the assumption that the number of bits of a
570 DdApaDigit plus the number of bits of an unsigned int is less the
571 number of bits of the mantissa of a double. This guarantees that the
572 product of a DdApaDigit and an unsigned int can be represented
573 without loss of precision by a double. On machines where this
574 assumption is not satisfied, this procedure will malfunction.
577 <dd> <b>Side Effects</b> The quotient is returned in parameter <code>quotient</code>.
580 <dd> <b>See Also</b> <code><a href="#Cudd_ApaShortDivision">Cudd_ApaShortDivision</a>
581 </code>
583 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
585 <dt><pre>
586 <A NAME="Cudd_ApaNumberOfDigits"></A>
587 int <I></I>
588 <B>Cudd_ApaNumberOfDigits</B>(
589 int <b>binaryDigits</b> <i></i>
591 </pre>
592 <dd> Finds the number of digits for an arbitrary precision
593 integer given the maximum number of binary digits. The number of
594 binary digits should be positive. Returns the number of digits if
595 successful; 0 otherwise.
598 <dd> <b>Side Effects</b> None
601 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
603 <dt><pre>
604 <A NAME="Cudd_ApaPowerOfTwo"></A>
605 void <I></I>
606 <B>Cudd_ApaPowerOfTwo</B>(
607 int <b>digits</b>, <i></i>
608 DdApaNumber <b>number</b>, <i></i>
609 int <b>power</b> <i></i>
611 </pre>
612 <dd> Sets an arbitrary precision integer to a power of
613 two. If the power of two is too large to be represented, the number
614 is set to 0.
617 <dd> <b>Side Effects</b> The result is returned in parameter <code>number</code>.
620 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
622 <dt><pre>
623 <A NAME="Cudd_ApaPrintDecimal"></A>
624 int <I></I>
625 <B>Cudd_ApaPrintDecimal</B>(
626 FILE * <b>fp</b>, <i></i>
627 int <b>digits</b>, <i></i>
628 DdApaNumber <b>number</b> <i></i>
630 </pre>
631 <dd> Prints an arbitrary precision integer in decimal format.
632 Returns 1 if successful; 0 otherwise.
635 <dd> <b>Side Effects</b> None
638 <dd> <b>See Also</b> <code><a href="#Cudd_ApaPrintHex">Cudd_ApaPrintHex</a>
639 <a href="#Cudd_ApaPrintExponential">Cudd_ApaPrintExponential</a>
640 </code>
642 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
644 <dt><pre>
645 <A NAME="Cudd_ApaPrintDensity"></A>
646 int <I></I>
647 <B>Cudd_ApaPrintDensity</B>(
648 FILE * <b>fp</b>, <i></i>
649 DdManager * <b>dd</b>, <i></i>
650 DdNode * <b>node</b>, <i></i>
651 int <b>nvars</b> <i></i>
653 </pre>
654 <dd> Prints the density of a BDD or ADD using
655 arbitrary precision arithmetic. Returns 1 if successful; 0 otherwise.
658 <dd> <b>Side Effects</b> None
661 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
663 <dt><pre>
664 <A NAME="Cudd_ApaPrintExponential"></A>
665 int <I></I>
666 <B>Cudd_ApaPrintExponential</B>(
667 FILE * <b>fp</b>, <i></i>
668 int <b>digits</b>, <i></i>
669 DdApaNumber <b>number</b>, <i></i>
670 int <b>precision</b> <i></i>
672 </pre>
673 <dd> Prints an arbitrary precision integer in exponential format.
674 Returns 1 if successful; 0 otherwise.
677 <dd> <b>Side Effects</b> None
680 <dd> <b>See Also</b> <code><a href="#Cudd_ApaPrintHex">Cudd_ApaPrintHex</a>
681 <a href="#Cudd_ApaPrintDecimal">Cudd_ApaPrintDecimal</a>
682 </code>
684 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
686 <dt><pre>
687 <A NAME="Cudd_ApaPrintHex"></A>
688 int <I></I>
689 <B>Cudd_ApaPrintHex</B>(
690 FILE * <b>fp</b>, <i></i>
691 int <b>digits</b>, <i></i>
692 DdApaNumber <b>number</b> <i></i>
694 </pre>
695 <dd> Prints an arbitrary precision integer in hexadecimal format.
696 Returns 1 if successful; 0 otherwise.
699 <dd> <b>Side Effects</b> None
702 <dd> <b>See Also</b> <code><a href="#Cudd_ApaPrintDecimal">Cudd_ApaPrintDecimal</a>
703 <a href="#Cudd_ApaPrintExponential">Cudd_ApaPrintExponential</a>
704 </code>
706 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
708 <dt><pre>
709 <A NAME="Cudd_ApaPrintMintermExp"></A>
710 int <I></I>
711 <B>Cudd_ApaPrintMintermExp</B>(
712 FILE * <b>fp</b>, <i></i>
713 DdManager * <b>dd</b>, <i></i>
714 DdNode * <b>node</b>, <i></i>
715 int <b>nvars</b>, <i></i>
716 int <b>precision</b> <i></i>
718 </pre>
719 <dd> Prints the number of minterms of a BDD or ADD in
720 exponential format using arbitrary precision arithmetic. Parameter
721 precision controls the number of signficant digits printed. Returns
722 1 if successful; 0 otherwise.
725 <dd> <b>Side Effects</b> None
728 <dd> <b>See Also</b> <code><a href="#Cudd_ApaPrintMinterm">Cudd_ApaPrintMinterm</a>
729 </code>
731 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
733 <dt><pre>
734 <A NAME="Cudd_ApaPrintMinterm"></A>
735 int <I></I>
736 <B>Cudd_ApaPrintMinterm</B>(
737 FILE * <b>fp</b>, <i></i>
738 DdManager * <b>dd</b>, <i></i>
739 DdNode * <b>node</b>, <i></i>
740 int <b>nvars</b> <i></i>
742 </pre>
743 <dd> Prints the number of minterms of a BDD or ADD using
744 arbitrary precision arithmetic. Returns 1 if successful; 0 otherwise.
747 <dd> <b>Side Effects</b> None
750 <dd> <b>See Also</b> <code><a href="#Cudd_ApaPrintMintermExp">Cudd_ApaPrintMintermExp</a>
751 </code>
753 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
755 <dt><pre>
756 <A NAME="Cudd_ApaSetToLiteral"></A>
757 void <I></I>
758 <B>Cudd_ApaSetToLiteral</B>(
759 int <b>digits</b>, <i></i>
760 DdApaNumber <b>number</b>, <i></i>
761 DdApaDigit <b>literal</b> <i></i>
763 </pre>
764 <dd> Sets an arbitrary precision integer to a one-digit literal.
767 <dd> <b>Side Effects</b> The result is returned in parameter <code>number</code>.
770 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
772 <dt><pre>
773 <A NAME="Cudd_ApaShiftRight"></A>
774 void <I></I>
775 <B>Cudd_ApaShiftRight</B>(
776 int <b>digits</b>, <i></i>
777 DdApaDigit <b>in</b>, <i></i>
778 DdApaNumber <b>a</b>, <i></i>
779 DdApaNumber <b>b</b> <i></i>
781 </pre>
782 <dd> Shifts right an arbitrary precision integer by one
783 binary place. The most significant binary digit of the result is
784 taken from parameter <code>in</code>.
787 <dd> <b>Side Effects</b> The result is returned in parameter <code>b</code>.
790 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
792 <dt><pre>
793 <A NAME="Cudd_ApaShortDivision"></A>
794 DdApaDigit <I></I>
795 <B>Cudd_ApaShortDivision</B>(
796 int <b>digits</b>, <i></i>
797 DdApaNumber <b>dividend</b>, <i></i>
798 DdApaDigit <b>divisor</b>, <i></i>
799 DdApaNumber <b>quotient</b> <i></i>
801 </pre>
802 <dd> Divides an arbitrary precision integer by a digit.
805 <dd> <b>Side Effects</b> The quotient is returned in parameter <code>quotient</code>.
808 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
810 <dt><pre>
811 <A NAME="Cudd_ApaSubtract"></A>
812 DdApaDigit <I></I>
813 <B>Cudd_ApaSubtract</B>(
814 int <b>digits</b>, <i></i>
815 DdApaNumber <b>a</b>, <i></i>
816 DdApaNumber <b>b</b>, <i></i>
817 DdApaNumber <b>diff</b> <i></i>
819 </pre>
820 <dd> Subtracts two arbitrary precision integers. Returns the
821 borrow out of the most significant digit.
824 <dd> <b>Side Effects</b> The result of the subtraction is stored in parameter
825 <code>diff</code>.
828 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
830 <dt><pre>
831 <A NAME="Cudd_AutodynDisableZdd"></A>
832 void <I></I>
833 <B>Cudd_AutodynDisableZdd</B>(
834 DdManager * <b>unique</b> <i></i>
836 </pre>
837 <dd> Disables automatic dynamic reordering of ZDDs.
840 <dd> <b>Side Effects</b> None
843 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynEnableZdd">Cudd_AutodynEnableZdd</a>
844 <a href="#Cudd_ReorderingStatusZdd">Cudd_ReorderingStatusZdd</a>
845 <a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
846 </code>
848 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
850 <dt><pre>
851 <A NAME="Cudd_AutodynDisable"></A>
852 void <I></I>
853 <B>Cudd_AutodynDisable</B>(
854 DdManager * <b>unique</b> <i></i>
856 </pre>
857 <dd> Disables automatic dynamic reordering.
860 <dd> <b>Side Effects</b> None
863 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynEnable">Cudd_AutodynEnable</a>
864 <a href="#Cudd_ReorderingStatus">Cudd_ReorderingStatus</a>
865 <a href="#Cudd_AutodynDisableZdd">Cudd_AutodynDisableZdd</a>
866 </code>
868 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
870 <dt><pre>
871 <A NAME="Cudd_AutodynEnableZdd"></A>
872 void <I></I>
873 <B>Cudd_AutodynEnableZdd</B>(
874 DdManager * <b>unique</b>, <i></i>
875 Cudd_ReorderingType <b>method</b> <i></i>
877 </pre>
878 <dd> Enables automatic dynamic reordering of ZDDs. Parameter
879 method is used to determine the method used for reordering ZDDs. If
880 CUDD_REORDER_SAME is passed, the method is unchanged.
883 <dd> <b>Side Effects</b> None
886 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynDisableZdd">Cudd_AutodynDisableZdd</a>
887 <a href="#Cudd_ReorderingStatusZdd">Cudd_ReorderingStatusZdd</a>
888 <a href="#Cudd_AutodynEnable">Cudd_AutodynEnable</a>
889 </code>
891 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
893 <dt><pre>
894 <A NAME="Cudd_AutodynEnable"></A>
895 void <I></I>
896 <B>Cudd_AutodynEnable</B>(
897 DdManager * <b>unique</b>, <i></i>
898 Cudd_ReorderingType <b>method</b> <i></i>
900 </pre>
901 <dd> Enables automatic dynamic reordering of BDDs and
902 ADDs. Parameter method is used to determine the method used for
903 reordering. If CUDD_REORDER_SAME is passed, the method is
904 unchanged.
907 <dd> <b>Side Effects</b> None
910 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
911 <a href="#Cudd_ReorderingStatus">Cudd_ReorderingStatus</a>
912 <a href="#Cudd_AutodynEnableZdd">Cudd_AutodynEnableZdd</a>
913 </code>
915 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
917 <dt><pre>
918 <A NAME="Cudd_AverageDistance"></A>
919 double <I></I>
920 <B>Cudd_AverageDistance</B>(
921 DdManager * <b>dd</b> <i></i>
923 </pre>
924 <dd> Computes the average distance between adjacent nodes in
925 the manager. Adjacent nodes are node pairs such that the second node
926 is the then child, else child, or next node in the collision list.
929 <dd> <b>Side Effects</b> None
932 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
934 <dt><pre>
935 <A NAME="Cudd_BddToAdd"></A>
936 DdNode * <I></I>
937 <B>Cudd_BddToAdd</B>(
938 DdManager * <b>dd</b>, <i></i>
939 DdNode * <b>B</b> <i></i>
941 </pre>
942 <dd> Converts a BDD to a 0-1 ADD. Returns a pointer to the
943 resulting ADD if successful; NULL otherwise.
946 <dd> <b>Side Effects</b> None
949 <dd> <b>See Also</b> <code><a href="#Cudd_addBddPattern">Cudd_addBddPattern</a>
950 <a href="#Cudd_addBddThreshold">Cudd_addBddThreshold</a>
951 <a href="#Cudd_addBddInterval">Cudd_addBddInterval</a>
952 <a href="#Cudd_addBddStrictThreshold">Cudd_addBddStrictThreshold</a>
953 </code>
955 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
957 <dt><pre>
958 <A NAME="Cudd_BddToCubeArray"></A>
959 int <I></I>
960 <B>Cudd_BddToCubeArray</B>(
961 DdManager * <b>dd</b>, <i></i>
962 DdNode * <b>cube</b>, <i></i>
963 int * <b>array</b> <i></i>
965 </pre>
966 <dd> Builds a positional array from the BDD of a cube.
967 Array must have one entry for each BDD variable. The positional
968 array has 1 in i-th position if the variable of index i appears in
969 true form in the cube; it has 0 in i-th position if the variable of
970 index i appears in complemented form in the cube; finally, it has 2
971 in i-th position if the variable of index i does not appear in the
972 cube. Returns 1 if successful (the BDD is indeed a cube); 0
973 otherwise.
976 <dd> <b>Side Effects</b> The result is in the array passed by reference.
979 <dd> <b>See Also</b> <code><a href="#Cudd_CubeArrayToBdd">Cudd_CubeArrayToBdd</a>
980 </code>
982 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
984 <dt><pre>
985 <A NAME="Cudd_BiasedOverApprox"></A>
986 DdNode * <I></I>
987 <B>Cudd_BiasedOverApprox</B>(
988 DdManager * <b>dd</b>, <i>manager</i>
989 DdNode * <b>f</b>, <i>function to be superset</i>
990 DdNode * <b>b</b>, <i>bias function</i>
991 int <b>numVars</b>, <i>number of variables in the support of f</i>
992 int <b>threshold</b>, <i>when to stop approximation</i>
993 double <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
994 double <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
996 </pre>
997 <dd> Extracts a dense superset from a BDD. The procedure is
998 identical to the underapproximation procedure except for the fact that it
999 works on the complement of the given function. Extracting the subset
1000 of the complement function is equivalent to extracting the superset
1001 of the function.
1002 Returns a pointer to the BDD of the superset if successful. NULL if
1003 intermediate result causes the procedure to run out of memory. The
1004 parameter numVars is the maximum number of variables to be used in
1005 minterm calculation. The optimal number
1006 should be as close as possible to the size of the support of f.
1007 However, it is safe to pass the value returned by Cudd_ReadSize for
1008 numVars when the number of variables is under 1023. If numVars is
1009 larger than 1023, it will overflow. If a 0 parameter is passed then
1010 the procedure will compute a value which will avoid overflow but
1011 will cause underflow with 2046 variables or more.
1014 <dd> <b>Side Effects</b> None
1017 <dd> <b>See Also</b> <code><a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
1018 <a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
1019 <a href="#Cudd_RemapOverApprox">Cudd_RemapOverApprox</a>
1020 <a href="#Cudd_BiasedUnderApprox">Cudd_BiasedUnderApprox</a>
1021 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
1022 </code>
1024 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
1026 <dt><pre>
1027 <A NAME="Cudd_BiasedUnderApprox"></A>
1028 DdNode * <I></I>
1029 <B>Cudd_BiasedUnderApprox</B>(
1030 DdManager * <b>dd</b>, <i>manager</i>
1031 DdNode * <b>f</b>, <i>function to be subset</i>
1032 DdNode * <b>b</b>, <i>bias function</i>
1033 int <b>numVars</b>, <i>number of variables in the support of f</i>
1034 int <b>threshold</b>, <i>when to stop approximation</i>
1035 double <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
1036 double <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
1038 </pre>
1039 <dd> Extracts a dense subset from a BDD. This procedure uses
1040 a biased remapping technique and density as the cost function. The bias
1041 is a function. This procedure tries to approximate where the bias is 0
1042 and preserve the given function where the bias is 1.
1043 Returns a pointer to the BDD of the subset if
1044 successful. NULL if the procedure runs out of memory. The parameter
1045 numVars is the maximum number of variables to be used in minterm
1046 calculation. The optimal number should be as close as possible to
1047 the size of the support of f. However, it is safe to pass the value
1048 returned by Cudd_ReadSize for numVars when the number of variables
1049 is under 1023. If numVars is larger than 1023, it will cause
1050 overflow. If a 0 parameter is passed then the procedure will compute
1051 a value which will avoid overflow but will cause underflow with 2046
1052 variables or more.
1055 <dd> <b>Side Effects</b> None
1058 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
1059 <a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
1060 <a href="#Cudd_UnderApprox">Cudd_UnderApprox</a>
1061 <a href="#Cudd_RemapUnderApprox">Cudd_RemapUnderApprox</a>
1062 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
1063 </code>
1065 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
1067 <dt><pre>
1068 <A NAME="Cudd_CProjection"></A>
1069 DdNode * <I></I>
1070 <B>Cudd_CProjection</B>(
1071 DdManager * <b>dd</b>, <i></i>
1072 DdNode * <b>R</b>, <i></i>
1073 DdNode * <b>Y</b> <i></i>
1075 </pre>
1076 <dd> Computes the compatible projection of relation R with
1077 respect to cube Y. Returns a pointer to the c-projection if
1078 successful; NULL otherwise. For a comparison between Cudd_CProjection
1079 and Cudd_PrioritySelect, see the documentation of the latter.
1082 <dd> <b>Side Effects</b> None
1085 <dd> <b>See Also</b> <code><a href="#Cudd_PrioritySelect">Cudd_PrioritySelect</a>
1086 </code>
1088 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
1090 <dt><pre>
1091 <A NAME="Cudd_CheckKeys"></A>
1092 int <I></I>
1093 <B>Cudd_CheckKeys</B>(
1094 DdManager * <b>table</b> <i></i>
1096 </pre>
1097 <dd> Checks for the following conditions:
1098 <ul>
1099 <li>Wrong sizes of subtables.
1100 <li>Wrong number of keys found in unique subtable.
1101 <li>Wrong number of dead found in unique subtable.
1102 <li>Wrong number of keys found in the constant table
1103 <li>Wrong number of dead found in the constant table
1104 <li>Wrong number of total slots found
1105 <li>Wrong number of maximum keys found
1106 <li>Wrong number of total dead found
1107 </ul>
1108 Reports the average length of non-empty lists. Returns the number of
1109 subtables for which the number of keys is wrong.
1112 <dd> <b>Side Effects</b> None
1115 <dd> <b>See Also</b> <code><a href="#Cudd_DebugCheck">Cudd_DebugCheck</a>
1116 </code>
1118 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
1120 <dt><pre>
1121 <A NAME="Cudd_CheckZeroRef"></A>
1122 int <I></I>
1123 <B>Cudd_CheckZeroRef</B>(
1124 DdManager * <b>manager</b> <i></i>
1126 </pre>
1127 <dd> Checks the unique table for nodes with non-zero
1128 reference counts. It is normally called before Cudd_Quit to make sure
1129 that there are no memory leaks due to missing Cudd_RecursiveDeref's.
1130 Takes into account that reference counts may saturate and that the
1131 basic constants and the projection functions are referenced by the
1132 manager. Returns the number of nodes with non-zero reference count.
1133 (Except for the cases mentioned above.)
1136 <dd> <b>Side Effects</b> None
1139 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
1141 <dt><pre>
1142 <A NAME="Cudd_ClassifySupport"></A>
1143 int <I></I>
1144 <B>Cudd_ClassifySupport</B>(
1145 DdManager * <b>dd</b>, <i>manager</i>
1146 DdNode * <b>f</b>, <i>first DD</i>
1147 DdNode * <b>g</b>, <i>second DD</i>
1148 DdNode ** <b>common</b>, <i>cube of shared variables</i>
1149 DdNode ** <b>onlyF</b>, <i>cube of variables only in f</i>
1150 DdNode ** <b>onlyG</b> <i>cube of variables only in g</i>
1152 </pre>
1153 <dd> Classifies the variables in the support of two DDs
1154 <code>f</code> and <code>g</code>, depending on whther they appear
1155 in both DDs, only in <code>f</code>, or only in <code>g</code>.
1156 Returns 1 if successful; 0 otherwise.
1159 <dd> <b>Side Effects</b> The cubes of the three classes of variables are
1160 returned as side effects.
1163 <dd> <b>See Also</b> <code><a href="#Cudd_Support">Cudd_Support</a>
1164 <a href="#Cudd_VectorSupport">Cudd_VectorSupport</a>
1165 </code>
1167 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1169 <dt><pre>
1170 <A NAME="Cudd_ClearErrorCode"></A>
1171 void <I></I>
1172 <B>Cudd_ClearErrorCode</B>(
1173 DdManager * <b>dd</b> <i></i>
1175 </pre>
1176 <dd> Clear the error code of a manager.
1179 <dd> <b>Side Effects</b> None
1182 <dd> <b>See Also</b> <code><a href="#Cudd_ReadErrorCode">Cudd_ReadErrorCode</a>
1183 </code>
1185 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1187 <dt><pre>
1188 <A NAME="Cudd_CofMinterm"></A>
1189 double * <I></I>
1190 <B>Cudd_CofMinterm</B>(
1191 DdManager * <b>dd</b>, <i></i>
1192 DdNode * <b>node</b> <i></i>
1194 </pre>
1195 <dd> Computes the fraction of minterms in the on-set of all
1196 the positive cofactors of DD. Returns the pointer to an array of
1197 doubles if successful; NULL otherwise. The array has as many
1198 positions as there are BDD variables in the manager plus one. The
1199 last position of the array contains the fraction of the minterms in
1200 the ON-set of the function represented by the BDD or ADD. The other
1201 positions of the array hold the variable signatures.
1204 <dd> <b>Side Effects</b> None
1207 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSign.c"TARGET="ABSTRACT"><CODE>cuddSign.c</CODE></A>
1209 <dt><pre>
1210 <A NAME="Cudd_Cofactor"></A>
1211 DdNode * <I></I>
1212 <B>Cudd_Cofactor</B>(
1213 DdManager * <b>dd</b>, <i></i>
1214 DdNode * <b>f</b>, <i></i>
1215 DdNode * <b>g</b> <i></i>
1217 </pre>
1218 <dd> Computes the cofactor of f with respect to g; g must be
1219 the BDD or the ADD of a cube. Returns a pointer to the cofactor if
1220 successful; NULL otherwise.
1223 <dd> <b>Side Effects</b> None
1226 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
1227 <a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
1228 </code>
1230 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>
1232 <dt><pre>
1233 <A NAME="Cudd_CountLeaves"></A>
1234 int <I></I>
1235 <B>Cudd_CountLeaves</B>(
1236 DdNode * <b>node</b> <i></i>
1238 </pre>
1239 <dd> Counts the number of leaves in a DD. Returns the number
1240 of leaves in the DD rooted at node if successful; CUDD_OUT_OF_MEM
1241 otherwise.
1244 <dd> <b>Side Effects</b> None
1247 <dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1248 </code>
1250 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1252 <dt><pre>
1253 <A NAME="Cudd_CountMinterm"></A>
1254 double <I></I>
1255 <B>Cudd_CountMinterm</B>(
1256 DdManager * <b>manager</b>, <i></i>
1257 DdNode * <b>node</b>, <i></i>
1258 int <b>nvars</b> <i></i>
1260 </pre>
1261 <dd> Counts the number of minterms of a DD. The function is
1262 assumed to depend on nvars variables. The minterm count is
1263 represented as a double, to allow for a larger number of variables.
1264 Returns the number of minterms of the function rooted at node if
1265 successful; (double) CUDD_OUT_OF_MEM otherwise.
1268 <dd> <b>Side Effects</b> None
1271 <dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1272 <a href="#Cudd_CountPath">Cudd_CountPath</a>
1273 </code>
1275 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1277 <dt><pre>
1278 <A NAME="Cudd_CountPathsToNonZero"></A>
1279 double <I></I>
1280 <B>Cudd_CountPathsToNonZero</B>(
1281 DdNode * <b>node</b> <i></i>
1283 </pre>
1284 <dd> Counts the number of paths to a non-zero terminal of a
1285 DD. The path count is
1286 represented as a double, to allow for a larger number of variables.
1287 Returns the number of paths of the function rooted at node.
1290 <dd> <b>Side Effects</b> None
1293 <dd> <b>See Also</b> <code><a href="#Cudd_CountMinterm">Cudd_CountMinterm</a>
1294 <a href="#Cudd_CountPath">Cudd_CountPath</a>
1295 </code>
1297 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1299 <dt><pre>
1300 <A NAME="Cudd_CountPath"></A>
1301 double <I></I>
1302 <B>Cudd_CountPath</B>(
1303 DdNode * <b>node</b> <i></i>
1305 </pre>
1306 <dd> Counts the number of paths of a DD. Paths to all
1307 terminal nodes are counted. The path count is represented as a
1308 double, to allow for a larger number of variables. Returns the
1309 number of paths of the function rooted at node if successful;
1310 (double) CUDD_OUT_OF_MEM otherwise.
1313 <dd> <b>Side Effects</b> None
1316 <dd> <b>See Also</b> <code><a href="#Cudd_CountMinterm">Cudd_CountMinterm</a>
1317 </code>
1319 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1321 <dt><pre>
1322 <A NAME="Cudd_CubeArrayToBdd"></A>
1323 DdNode * <I></I>
1324 <B>Cudd_CubeArrayToBdd</B>(
1325 DdManager * <b>dd</b>, <i></i>
1326 int * <b>array</b> <i></i>
1328 </pre>
1329 <dd> Builds a cube from a positional array. The array must
1330 have one integer entry for each BDD variable. If the i-th entry is
1331 1, the variable of index i appears in true form in the cube; If the
1332 i-th entry is 0, the variable of index i appears complemented in the
1333 cube; otherwise the variable does not appear in the cube. Returns a
1334 pointer to the BDD for the cube if successful; NULL otherwise.
1337 <dd> <b>Side Effects</b> None
1340 <dd> <b>See Also</b> <code><a href="#Cudd_bddComputeCube">Cudd_bddComputeCube</a>
1341 <a href="#Cudd_IndicesToCube">Cudd_IndicesToCube</a>
1342 <a href="#Cudd_BddToCubeArray">Cudd_BddToCubeArray</a>
1343 </code>
1345 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1347 <dt><pre>
1348 <A NAME="Cudd_DagSize"></A>
1349 int <I></I>
1350 <B>Cudd_DagSize</B>(
1351 DdNode * <b>node</b> <i></i>
1353 </pre>
1354 <dd> Counts the number of nodes in a DD. Returns the number
1355 of nodes in the graph rooted at node.
1358 <dd> <b>Side Effects</b> None
1361 <dd> <b>See Also</b> <code><a href="#Cudd_SharingSize">Cudd_SharingSize</a>
1362 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1363 </code>
1365 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1367 <dt><pre>
1368 <A NAME="Cudd_DeadAreCounted"></A>
1369 int <I></I>
1370 <B>Cudd_DeadAreCounted</B>(
1371 DdManager * <b>dd</b> <i></i>
1373 </pre>
1374 <dd> Tells whether dead nodes are counted towards triggering
1375 reordering. Returns 1 if dead nodes are counted; 0 otherwise.
1378 <dd> <b>Side Effects</b> None
1381 <dd> <b>See Also</b> <code><a href="#Cudd_TurnOnCountDead">Cudd_TurnOnCountDead</a>
1382 <a href="#Cudd_TurnOffCountDead">Cudd_TurnOffCountDead</a>
1383 </code>
1385 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1387 <dt><pre>
1388 <A NAME="Cudd_DebugCheck"></A>
1389 int <I></I>
1390 <B>Cudd_DebugCheck</B>(
1391 DdManager * <b>table</b> <i></i>
1393 </pre>
1394 <dd> Checks for inconsistencies in the DD heap:
1395 <ul>
1396 <li> node has illegal index
1397 <li> live node has dead children
1398 <li> node has illegal Then or Else pointers
1399 <li> BDD/ADD node has identical children
1400 <li> ZDD node has zero then child
1401 <li> wrong number of total nodes
1402 <li> wrong number of dead nodes
1403 <li> ref count error at node
1404 </ul>
1405 Returns 0 if no inconsistencies are found; DD_OUT_OF_MEM if there is
1406 not enough memory; 1 otherwise.
1409 <dd> <b>Side Effects</b> None
1412 <dd> <b>See Also</b> <code><a href="#Cudd_CheckKeys">Cudd_CheckKeys</a>
1413 </code>
1415 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
1417 <dt><pre>
1418 <A NAME="Cudd_Decreasing"></A>
1419 DdNode * <I></I>
1420 <B>Cudd_Decreasing</B>(
1421 DdManager * <b>dd</b>, <i></i>
1422 DdNode * <b>f</b>, <i></i>
1423 int <b>i</b> <i></i>
1425 </pre>
1426 <dd> Determines whether the function represented by BDD f is
1427 negative unate (monotonic decreasing) in variable i. Returns the
1428 constant one is f is unate and the (logical) constant zero if it is not.
1429 This function does not generate any new nodes.
1432 <dd> <b>Side Effects</b> None
1435 <dd> <b>See Also</b> <code><a href="#Cudd_Increasing">Cudd_Increasing</a>
1436 </code>
1438 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
1440 <dt><pre>
1441 <A NAME="Cudd_DelayedDerefBdd"></A>
1442 void <I></I>
1443 <B>Cudd_DelayedDerefBdd</B>(
1444 DdManager * <b>table</b>, <i></i>
1445 DdNode * <b>n</b> <i></i>
1447 </pre>
1448 <dd> Enqueues node n for later dereferencing. If the queue
1449 is full decreases the reference count of the oldest node N to make
1450 room for n. If N dies, recursively decreases the reference counts of
1451 its children. It is used to dispose of a BDD that is currently not
1452 needed, but may be useful again in the near future. The dereferencing
1453 proper is done as in Cudd_IterDerefBdd.
1456 <dd> <b>Side Effects</b> None
1459 <dd> <b>See Also</b> <code><a href="#Cudd_RecursiveDeref">Cudd_RecursiveDeref</a>
1460 <a href="#Cudd_IterDerefBdd">Cudd_IterDerefBdd</a>
1461 </code>
1463 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
1465 <dt><pre>
1466 <A NAME="Cudd_Density"></A>
1467 double <I></I>
1468 <B>Cudd_Density</B>(
1469 DdManager * <b>dd</b>, <i>manager</i>
1470 DdNode * <b>f</b>, <i>function whose density is sought</i>
1471 int <b>nvars</b> <i>size of the support of f</i>
1473 </pre>
1474 <dd> Computes the density of a BDD or ADD. The density is
1475 the ratio of the number of minterms to the number of nodes. If 0 is
1476 passed as number of variables, the number of variables existing in
1477 the manager is used. Returns the density if successful; (double)
1478 CUDD_OUT_OF_MEM otherwise.
1481 <dd> <b>Side Effects</b> None
1484 <dd> <b>See Also</b> <code><a href="#Cudd_CountMinterm">Cudd_CountMinterm</a>
1485 <a href="#Cudd_DagSize">Cudd_DagSize</a>
1486 </code>
1488 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1490 <dt><pre>
1491 <A NAME="Cudd_Deref"></A>
1492 void <I></I>
1493 <B>Cudd_Deref</B>(
1494 DdNode * <b>node</b> <i></i>
1496 </pre>
1497 <dd> Decreases the reference count of node. It is primarily
1498 used in recursive procedures to decrease the ref count of a result
1499 node before returning it. This accomplishes the goal of removing the
1500 protection applied by a previous Cudd_Ref.
1503 <dd> <b>Side Effects</b> None
1506 <dd> <b>See Also</b> <code><a href="#Cudd_RecursiveDeref">Cudd_RecursiveDeref</a>
1507 <a href="#Cudd_RecursiveDerefZdd">Cudd_RecursiveDerefZdd</a>
1508 <a href="#Cudd_Ref">Cudd_Ref</a>
1509 </code>
1511 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
1513 <dt><pre>
1514 <A NAME="Cudd_DisableGarbageCollection"></A>
1515 void <I></I>
1516 <B>Cudd_DisableGarbageCollection</B>(
1517 DdManager * <b>dd</b> <i></i>
1519 </pre>
1520 <dd> Disables garbage collection. Garbage collection is
1521 initially enabled. This function may be called to disable it.
1522 However, garbage collection will still occur when a new node must be
1523 created and no memory is left, or when garbage collection is required
1524 for correctness. (E.g., before reordering.)
1527 <dd> <b>Side Effects</b> None
1530 <dd> <b>See Also</b> <code><a href="#Cudd_EnableGarbageCollection">Cudd_EnableGarbageCollection</a>
1531 <a href="#Cudd_GarbageCollectionEnabled">Cudd_GarbageCollectionEnabled</a>
1532 </code>
1534 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1536 <dt><pre>
1537 <A NAME="Cudd_DisableReorderingReporting"></A>
1538 int <I></I>
1539 <B>Cudd_DisableReorderingReporting</B>(
1540 DdManager * <b>dd</b> <i></i>
1542 </pre>
1543 <dd> Disables reporting of reordering stats.
1544 Returns 1 if successful; 0 otherwise.
1547 <dd> <b>Side Effects</b> Removes functions from the pre-reordering and post-reordering
1548 hooks.
1551 <dd> <b>See Also</b> <code><a href="#Cudd_EnableReorderingReporting">Cudd_EnableReorderingReporting</a>
1552 <a href="#Cudd_ReorderingReporting">Cudd_ReorderingReporting</a>
1553 </code>
1555 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1557 <dt><pre>
1558 <A NAME="Cudd_Disequality"></A>
1559 DdNode * <I></I>
1560 <B>Cudd_Disequality</B>(
1561 DdManager * <b>dd</b>, <i>DD manager</i>
1562 int <b>N</b>, <i>number of x and y variables</i>
1563 int <b>c</b>, <i>right-hand side constant</i>
1564 DdNode ** <b>x</b>, <i>array of x variables</i>
1565 DdNode ** <b>y</b> <i>array of y variables</i>
1567 </pre>
1568 <dd> This function generates a BDD for the function x -y != c.
1569 Both x and y are N-bit numbers, x[0] x[1] ... x[N-1] and
1570 y[0] y[1] ... y[N-1], with 0 the most significant bit.
1571 The BDD is built bottom-up.
1572 It has a linear number of nodes if the variables are ordered as follows:
1573 x[0] y[0] x[1] y[1] ... x[N-1] y[N-1].
1576 <dd> <b>Side Effects</b> None
1579 <dd> <b>See Also</b> <code><a href="#Cudd_Xgty">Cudd_Xgty</a>
1580 </code>
1582 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
1584 <dt><pre>
1585 <A NAME="Cudd_DumpBlifBody"></A>
1586 int <I></I>
1587 <B>Cudd_DumpBlifBody</B>(
1588 DdManager * <b>dd</b>, <i>manager</i>
1589 int <b>n</b>, <i>number of output nodes to be dumped</i>
1590 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1591 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1592 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1593 FILE * <b>fp</b>, <i>pointer to the dump file</i>
1594 int <b>mv</b> <i>0: blif, 1: blif-MV</i>
1596 </pre>
1597 <dd> Writes a blif body representing the argument BDDs as a
1598 network of multiplexers. No header (.model, .inputs, and .outputs) and
1599 footer (.end) are produced by this function. One multiplexer is written
1600 for each BDD node. It returns 1 in case of success; 0 otherwise (e.g.,
1601 out-of-memory, file system full, or an ADD with constants different
1602 from 0 and 1). Cudd_DumpBlifBody does not close the file: This is the
1603 caller responsibility. Cudd_DumpBlifBody uses a minimal unique subset of
1604 the hexadecimal address of a node as name for it. If the argument
1605 inames is non-null, it is assumed to hold the pointers to the names
1606 of the inputs. Similarly for onames. This function prints out only
1607 .names part.
1610 <dd> <b>Side Effects</b> None
1613 <dd> <b>See Also</b> <code><a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
1614 <a href="#Cudd_DumpDot">Cudd_DumpDot</a>
1615 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1616 <a href="#Cudd_DumpDDcal">Cudd_DumpDDcal</a>
1617 <a href="#Cudd_DumpDaVinci">Cudd_DumpDaVinci</a>
1618 <a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
1619 </code>
1621 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1623 <dt><pre>
1624 <A NAME="Cudd_DumpBlif"></A>
1625 int <I></I>
1626 <B>Cudd_DumpBlif</B>(
1627 DdManager * <b>dd</b>, <i>manager</i>
1628 int <b>n</b>, <i>number of output nodes to be dumped</i>
1629 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1630 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1631 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1632 char * <b>mname</b>, <i>model name (or NULL)</i>
1633 FILE * <b>fp</b>, <i>pointer to the dump file</i>
1634 int <b>mv</b> <i>0: blif, 1: blif-MV</i>
1636 </pre>
1637 <dd> Writes a blif file representing the argument BDDs as a
1638 network of multiplexers. One multiplexer is written for each BDD
1639 node. It returns 1 in case of success; 0 otherwise (e.g.,
1640 out-of-memory, file system full, or an ADD with constants different
1641 from 0 and 1). Cudd_DumpBlif does not close the file: This is the
1642 caller responsibility. Cudd_DumpBlif uses a minimal unique subset of
1643 the hexadecimal address of a node as name for it. If the argument
1644 inames is non-null, it is assumed to hold the pointers to the names
1645 of the inputs. Similarly for onames.
1648 <dd> <b>Side Effects</b> None
1651 <dd> <b>See Also</b> <code><a href="#Cudd_DumpBlifBody">Cudd_DumpBlifBody</a>
1652 <a href="#Cudd_DumpDot">Cudd_DumpDot</a>
1653 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1654 <a href="#Cudd_DumpDDcal">Cudd_DumpDDcal</a>
1655 <a href="#Cudd_DumpDaVinci">Cudd_DumpDaVinci</a>
1656 <a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
1657 </code>
1659 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1661 <dt><pre>
1662 <A NAME="Cudd_DumpDDcal"></A>
1663 int <I></I>
1664 <B>Cudd_DumpDDcal</B>(
1665 DdManager * <b>dd</b>, <i>manager</i>
1666 int <b>n</b>, <i>number of output nodes to be dumped</i>
1667 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1668 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1669 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1670 FILE * <b>fp</b> <i>pointer to the dump file</i>
1672 </pre>
1673 <dd> Writes a DDcal file representing the argument BDDs.
1674 It returns 1 in case of success; 0 otherwise (e.g., out-of-memory or
1675 file system full). Cudd_DumpDDcal does not close the file: This
1676 is the caller responsibility. Cudd_DumpDDcal uses a minimal unique
1677 subset of the hexadecimal address of a node as name for it. If the
1678 argument inames is non-null, it is assumed to hold the pointers to
1679 the names of the inputs. Similarly for onames.
1682 <dd> <b>Side Effects</b> None
1685 <dd> <b>See Also</b> <code><a href="#Cudd_DumpDot">Cudd_DumpDot</a>
1686 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1687 <a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
1688 <a href="#Cudd_DumpDaVinci">Cudd_DumpDaVinci</a>
1689 <a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
1690 </code>
1692 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1694 <dt><pre>
1695 <A NAME="Cudd_DumpDaVinci"></A>
1696 int <I></I>
1697 <B>Cudd_DumpDaVinci</B>(
1698 DdManager * <b>dd</b>, <i>manager</i>
1699 int <b>n</b>, <i>number of output nodes to be dumped</i>
1700 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1701 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1702 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1703 FILE * <b>fp</b> <i>pointer to the dump file</i>
1705 </pre>
1706 <dd> Writes a daVinci file representing the argument BDDs.
1707 It returns 1 in case of success; 0 otherwise (e.g., out-of-memory or
1708 file system full). Cudd_DumpDaVinci does not close the file: This
1709 is the caller responsibility. Cudd_DumpDaVinci uses a minimal unique
1710 subset of the hexadecimal address of a node as name for it. If the
1711 argument inames is non-null, it is assumed to hold the pointers to
1712 the names of the inputs. Similarly for onames.
1715 <dd> <b>Side Effects</b> None
1718 <dd> <b>See Also</b> <code><a href="#Cudd_DumpDot">Cudd_DumpDot</a>
1719 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1720 <a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
1721 <a href="#Cudd_DumpDDcal">Cudd_DumpDDcal</a>
1722 <a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
1723 </code>
1725 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1727 <dt><pre>
1728 <A NAME="Cudd_DumpDot"></A>
1729 int <I></I>
1730 <B>Cudd_DumpDot</B>(
1731 DdManager * <b>dd</b>, <i>manager</i>
1732 int <b>n</b>, <i>number of output nodes to be dumped</i>
1733 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1734 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1735 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1736 FILE * <b>fp</b> <i>pointer to the dump file</i>
1738 </pre>
1739 <dd> Writes a file representing the argument DDs in a format
1740 suitable for the graph drawing program dot.
1741 It returns 1 in case of success; 0 otherwise (e.g., out-of-memory,
1742 file system full).
1743 Cudd_DumpDot does not close the file: This is the caller
1744 responsibility. Cudd_DumpDot uses a minimal unique subset of the
1745 hexadecimal address of a node as name for it.
1746 If the argument inames is non-null, it is assumed to hold the pointers
1747 to the names of the inputs. Similarly for onames.
1748 Cudd_DumpDot uses the following convention to draw arcs:
1749 <ul>
1750 <li> solid line: THEN arcs;
1751 <li> dotted line: complement arcs;
1752 <li> dashed line: regular ELSE arcs.
1753 </ul>
1754 The dot options are chosen so that the drawing fits on a letter-size
1755 sheet.
1758 <dd> <b>Side Effects</b> None
1761 <dd> <b>See Also</b> <code><a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
1762 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1763 <a href="#Cudd_DumpDDcal">Cudd_DumpDDcal</a>
1764 <a href="#Cudd_DumpDaVinci">Cudd_DumpDaVinci</a>
1765 <a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
1766 </code>
1768 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1770 <dt><pre>
1771 <A NAME="Cudd_DumpFactoredForm"></A>
1772 int <I></I>
1773 <B>Cudd_DumpFactoredForm</B>(
1774 DdManager * <b>dd</b>, <i>manager</i>
1775 int <b>n</b>, <i>number of output nodes to be dumped</i>
1776 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
1777 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
1778 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
1779 FILE * <b>fp</b> <i>pointer to the dump file</i>
1781 </pre>
1782 <dd> Writes factored forms representing the argument BDDs.
1783 The format of the factored form is the one used in the genlib files
1784 for technology mapping in sis. It returns 1 in case of success; 0
1785 otherwise (e.g., file system full). Cudd_DumpFactoredForm does not
1786 close the file: This is the caller responsibility. Caution must be
1787 exercised because a factored form may be exponentially larger than
1788 the argument BDD. If the argument inames is non-null, it is assumed
1789 to hold the pointers to the names of the inputs. Similarly for
1790 onames.
1793 <dd> <b>Side Effects</b> None
1796 <dd> <b>See Also</b> <code><a href="#Cudd_DumpDot">Cudd_DumpDot</a>
1797 <a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1798 <a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
1799 <a href="#Cudd_DumpDaVinci">Cudd_DumpDaVinci</a>
1800 <a href="#Cudd_DumpDDcal">Cudd_DumpDDcal</a>
1801 </code>
1803 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
1805 <dt><pre>
1806 <A NAME="Cudd_Dxygtdxz"></A>
1807 DdNode * <I></I>
1808 <B>Cudd_Dxygtdxz</B>(
1809 DdManager * <b>dd</b>, <i>DD manager</i>
1810 int <b>N</b>, <i>number of x, y, and z variables</i>
1811 DdNode ** <b>x</b>, <i>array of x variables</i>
1812 DdNode ** <b>y</b>, <i>array of y variables</i>
1813 DdNode ** <b>z</b> <i>array of z variables</i>
1815 </pre>
1816 <dd> This function generates a BDD for the function d(x,y)
1817 &gt; d(x,z);
1818 x, y, and z are N-bit numbers, x[0] x[1] ... x[N-1],
1819 y[0] y[1] ... y[N-1], and z[0] z[1] ... z[N-1],
1820 with 0 the most significant bit.
1821 The distance d(x,y) is defined as:
1822 sum_{i=0}^{N-1}(|x_i - y_i| cdot 2^{N-i-1}).
1823 The BDD is built bottom-up.
1824 It has 7*N-3 internal nodes, if the variables are ordered as follows:
1825 x[0] y[0] z[0] x[1] y[1] z[1] ... x[N-1] y[N-1] z[N-1].
1828 <dd> <b>Side Effects</b> None
1831 <dd> <b>See Also</b> <code><a href="#Cudd_PrioritySelect">Cudd_PrioritySelect</a>
1832 <a href="#Cudd_Dxygtdyz">Cudd_Dxygtdyz</a>
1833 <a href="#Cudd_Xgty">Cudd_Xgty</a>
1834 <a href="#Cudd_bddAdjPermuteX">Cudd_bddAdjPermuteX</a>
1835 </code>
1837 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
1839 <dt><pre>
1840 <A NAME="Cudd_Dxygtdyz"></A>
1841 DdNode * <I></I>
1842 <B>Cudd_Dxygtdyz</B>(
1843 DdManager * <b>dd</b>, <i>DD manager</i>
1844 int <b>N</b>, <i>number of x, y, and z variables</i>
1845 DdNode ** <b>x</b>, <i>array of x variables</i>
1846 DdNode ** <b>y</b>, <i>array of y variables</i>
1847 DdNode ** <b>z</b> <i>array of z variables</i>
1849 </pre>
1850 <dd> This function generates a BDD for the function d(x,y)
1851 &gt; d(y,z);
1852 x, y, and z are N-bit numbers, x[0] x[1] ... x[N-1],
1853 y[0] y[1] ... y[N-1], and z[0] z[1] ... z[N-1],
1854 with 0 the most significant bit.
1855 The distance d(x,y) is defined as:
1856 sum_{i=0}^{N-1}(|x_i - y_i| cdot 2^{N-i-1}).
1857 The BDD is built bottom-up.
1858 It has 7*N-3 internal nodes, if the variables are ordered as follows:
1859 x[0] y[0] z[0] x[1] y[1] z[1] ... x[N-1] y[N-1] z[N-1].
1862 <dd> <b>Side Effects</b> None
1865 <dd> <b>See Also</b> <code><a href="#Cudd_PrioritySelect">Cudd_PrioritySelect</a>
1866 <a href="#Cudd_Dxygtdxz">Cudd_Dxygtdxz</a>
1867 <a href="#Cudd_Xgty">Cudd_Xgty</a>
1868 <a href="#Cudd_bddAdjPermuteX">Cudd_bddAdjPermuteX</a>
1869 </code>
1871 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
1873 <dt><pre>
1874 <A NAME="Cudd_EnableGarbageCollection"></A>
1875 void <I></I>
1876 <B>Cudd_EnableGarbageCollection</B>(
1877 DdManager * <b>dd</b> <i></i>
1879 </pre>
1880 <dd> Enables garbage collection. Garbage collection is
1881 initially enabled. Therefore it is necessary to call this function
1882 only if garbage collection has been explicitly disabled.
1885 <dd> <b>Side Effects</b> None
1888 <dd> <b>See Also</b> <code><a href="#Cudd_DisableGarbageCollection">Cudd_DisableGarbageCollection</a>
1889 <a href="#Cudd_GarbageCollectionEnabled">Cudd_GarbageCollectionEnabled</a>
1890 </code>
1892 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1894 <dt><pre>
1895 <A NAME="Cudd_EnableReorderingReporting"></A>
1896 int <I></I>
1897 <B>Cudd_EnableReorderingReporting</B>(
1898 DdManager * <b>dd</b> <i></i>
1900 </pre>
1901 <dd> Enables reporting of reordering stats.
1902 Returns 1 if successful; 0 otherwise.
1905 <dd> <b>Side Effects</b> Installs functions in the pre-reordering and post-reordering
1906 hooks.
1909 <dd> <b>See Also</b> <code><a href="#Cudd_DisableReorderingReporting">Cudd_DisableReorderingReporting</a>
1910 <a href="#Cudd_ReorderingReporting">Cudd_ReorderingReporting</a>
1911 </code>
1913 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
1915 <dt><pre>
1916 <A NAME="Cudd_EpdCountMinterm"></A>
1917 int <I></I>
1918 <B>Cudd_EpdCountMinterm</B>(
1919 DdManager * <b>manager</b>, <i></i>
1920 DdNode * <b>node</b>, <i></i>
1921 int <b>nvars</b>, <i></i>
1922 EpDouble * <b>epd</b> <i></i>
1924 </pre>
1925 <dd> Counts the number of minterms of a DD with extended precision.
1926 The function is assumed to depend on nvars variables. The minterm count is
1927 represented as an EpDouble, to allow any number of variables.
1928 Returns 0 if successful; CUDD_OUT_OF_MEM otherwise.
1931 <dd> <b>Side Effects</b> None
1934 <dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
1935 <a href="#Cudd_CountPath">Cudd_CountPath</a>
1936 </code>
1938 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
1940 <dt><pre>
1941 <A NAME="Cudd_EqualSupNorm"></A>
1942 int <I></I>
1943 <B>Cudd_EqualSupNorm</B>(
1944 DdManager * <b>dd</b>, <i>manager</i>
1945 DdNode * <b>f</b>, <i>first ADD</i>
1946 DdNode * <b>g</b>, <i>second ADD</i>
1947 CUDD_VALUE_TYPE <b>tolerance</b>, <i>maximum allowed difference</i>
1948 int <b>pr</b> <i>verbosity level</i>
1950 </pre>
1951 <dd> Compares two ADDs for equality within tolerance. Two
1952 ADDs are reported to be equal if the maximum difference between them
1953 (the sup norm of their difference) is less than or equal to the
1954 tolerance parameter. Returns 1 if the two ADDs are equal (within
1955 tolerance); 0 otherwise. If parameter <code>pr</code> is positive
1956 the first failure is reported to the standard output.
1959 <dd> <b>Side Effects</b> None
1962 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
1964 <dt><pre>
1965 <A NAME="Cudd_EquivDC"></A>
1966 int <I></I>
1967 <B>Cudd_EquivDC</B>(
1968 DdManager * <b>dd</b>, <i></i>
1969 DdNode * <b>F</b>, <i></i>
1970 DdNode * <b>G</b>, <i></i>
1971 DdNode * <b>D</b> <i></i>
1973 </pre>
1974 <dd> Tells whether F and G are identical wherever D is 0. F
1975 and G are either two ADDs or two BDDs. D is either a 0-1 ADD or a
1976 BDD. The function returns 1 if F and G are equivalent, and 0
1977 otherwise. No new nodes are created.
1980 <dd> <b>Side Effects</b> None
1983 <dd> <b>See Also</b> <code><a href="#Cudd_bddLeqUnless">Cudd_bddLeqUnless</a>
1984 </code>
1986 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
1988 <dt><pre>
1989 <A NAME="Cudd_EstimateCofactorSimple"></A>
1990 int <I></I>
1991 <B>Cudd_EstimateCofactorSimple</B>(
1992 DdNode * <b>node</b>, <i></i>
1993 int <b>i</b> <i></i>
1995 </pre>
1996 <dd> Estimates the number of nodes in a cofactor of a DD.
1997 Returns an estimate of the number of nodes in the positive cofactor of
1998 the graph rooted at node with respect to the variable whose index is i.
1999 This procedure implements with minor changes the algorithm of Cabodi et al.
2000 (ICCAD96). It does not allocate any memory, it does not change the
2001 state of the manager, and it is fast. However, it has been observed to
2002 overestimate the size of the cofactor by as much as a factor of 2.
2005 <dd> <b>Side Effects</b> None
2008 <dd> <b>See Also</b> <code><a href="#Cudd_DagSize">Cudd_DagSize</a>
2009 </code>
2011 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2013 <dt><pre>
2014 <A NAME="Cudd_EstimateCofactor"></A>
2015 int <I></I>
2016 <B>Cudd_EstimateCofactor</B>(
2017 DdManager * <b>dd</b>, <i>manager</i>
2018 DdNode * <b>f</b>, <i>function</i>
2019 int <b>i</b>, <i>index of variable</i>
2020 int <b>phase</b> <i>1: positive; 0: negative</i>
2022 </pre>
2023 <dd> Estimates the number of nodes in a cofactor of a DD.
2024 Returns an estimate of the number of nodes in a cofactor of
2025 the graph rooted at node with respect to the variable whose index is i.
2026 In case of failure, returns CUDD_OUT_OF_MEM.
2027 This function uses a refinement of the algorithm of Cabodi et al.
2028 (ICCAD96). The refinement allows the procedure to account for part
2029 of the recombination that may occur in the part of the cofactor above
2030 the cofactoring variable. This procedure does no create any new node.
2031 It does keep a small table of results; therefore it may run out of memory.
2032 If this is a concern, one should use Cudd_EstimateCofactorSimple, which
2033 is faster, does not allocate any memory, but is less accurate.
2036 <dd> <b>Side Effects</b> None
2039 <dd> <b>See Also</b> <code><a href="#Cudd_DagSize">Cudd_DagSize</a>
2040 <a href="#Cudd_EstimateCofactorSimple">Cudd_EstimateCofactorSimple</a>
2041 </code>
2043 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2045 <dt><pre>
2046 <A NAME="Cudd_Eval"></A>
2047 DdNode * <I></I>
2048 <B>Cudd_Eval</B>(
2049 DdManager * <b>dd</b>, <i></i>
2050 DdNode * <b>f</b>, <i></i>
2051 int * <b>inputs</b> <i></i>
2053 </pre>
2054 <dd> Finds the value of a DD for a given variable
2055 assignment. The variable assignment is passed in an array of int's,
2056 that should specify a zero or a one for each variable in the support
2057 of the function. Returns a pointer to a constant node. No new nodes
2058 are produced.
2061 <dd> <b>Side Effects</b> None
2064 <dd> <b>See Also</b> <code><a href="#Cudd_bddLeq">Cudd_bddLeq</a>
2065 <a href="#Cudd_addEvalConst">Cudd_addEvalConst</a>
2066 </code>
2068 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
2070 <dt><pre>
2071 <A NAME="Cudd_ExpectedUsedSlots"></A>
2072 double <I></I>
2073 <B>Cudd_ExpectedUsedSlots</B>(
2074 DdManager * <b>dd</b> <i></i>
2076 </pre>
2077 <dd> Computes the fraction of slots in the unique table that
2078 should be in use. This expected value is based on the assumption
2079 that the hash function distributes the keys randomly; it can be
2080 compared with the result of Cudd_ReadUsedSlots to monitor the
2081 performance of the unique table hash function.
2084 <dd> <b>Side Effects</b> None
2087 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSlots">Cudd_ReadSlots</a>
2088 <a href="#Cudd_ReadUsedSlots">Cudd_ReadUsedSlots</a>
2089 </code>
2091 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2093 <dt><pre>
2094 <A NAME="Cudd_FindEssential"></A>
2095 DdNode * <I></I>
2096 <B>Cudd_FindEssential</B>(
2097 DdManager * <b>dd</b>, <i></i>
2098 DdNode * <b>f</b> <i></i>
2100 </pre>
2101 <dd> Returns the cube of the essential variables. A positive
2102 literal means that the variable must be set to 1 for the function to be
2103 1. A negative literal means that the variable must be set to 0 for the
2104 function to be 1. Returns a pointer to the cube BDD if successful;
2105 NULL otherwise.
2108 <dd> <b>Side Effects</b> None
2111 <dd> <b>See Also</b> <code><a href="#Cudd_bddIsVarEssential">Cudd_bddIsVarEssential</a>
2112 </code>
2114 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
2116 <dt><pre>
2117 <A NAME="Cudd_FindTwoLiteralClauses"></A>
2118 DdTlcInfo * <I></I>
2119 <B>Cudd_FindTwoLiteralClauses</B>(
2120 DdManager * <b>dd</b>, <i></i>
2121 DdNode * <b>f</b> <i></i>
2123 </pre>
2124 <dd> Returns the one- and two-literal clauses of a DD.
2125 Returns a pointer to the structure holding the clauses if
2126 successful; NULL otherwise. For a constant DD, the empty set of clauses
2127 is returned. This is obviously correct for a non-zero constant. For the
2128 constant zero, it is based on the assumption that only those clauses
2129 containing variables in the support of the function are considered. Since
2130 the support of a constant function is empty, no clauses are returned.
2133 <dd> <b>Side Effects</b> None
2136 <dd> <b>See Also</b> <code><a href="#Cudd_FindEssential">Cudd_FindEssential</a>
2137 </code>
2139 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
2141 <dt><pre>
2142 <A NAME="Cudd_FirstCube"></A>
2143 DdGen * <I></I>
2144 <B>Cudd_FirstCube</B>(
2145 DdManager * <b>dd</b>, <i></i>
2146 DdNode * <b>f</b>, <i></i>
2147 int ** <b>cube</b>, <i></i>
2148 CUDD_VALUE_TYPE * <b>value</b> <i></i>
2150 </pre>
2151 <dd> Defines an iterator on the onset of a decision diagram
2152 and finds its first cube. Returns a generator that contains the
2153 information necessary to continue the enumeration if successful; NULL
2154 otherwise.<p>
2155 A cube is represented as an array of literals, which are integers in
2156 {0, 1, 2}; 0 represents a complemented literal, 1 represents an
2157 uncomplemented literal, and 2 stands for don't care. The enumeration
2158 produces a disjoint cover of the function associated with the diagram.
2159 The size of the array equals the number of variables in the manager at
2160 the time Cudd_FirstCube is called.<p>
2161 For each cube, a value is also returned. This value is always 1 for a
2162 BDD, while it may be different from 1 for an ADD.
2163 For BDDs, the offset is the set of cubes whose value is the logical zero.
2164 For ADDs, the offset is the set of cubes whose value is the
2165 background value. The cubes of the offset are not enumerated.
2168 <dd> <b>Side Effects</b> The first cube and its value are returned as side effects.
2171 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
2172 <a href="#Cudd_NextCube">Cudd_NextCube</a>
2173 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2174 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2175 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
2176 </code>
2178 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2180 <dt><pre>
2181 <A NAME="Cudd_FirstNode"></A>
2182 DdGen * <I></I>
2183 <B>Cudd_FirstNode</B>(
2184 DdManager * <b>dd</b>, <i></i>
2185 DdNode * <b>f</b>, <i></i>
2186 DdNode ** <b>node</b> <i></i>
2188 </pre>
2189 <dd> Defines an iterator on the nodes of a decision diagram
2190 and finds its first node. Returns a generator that contains the
2191 information necessary to continue the enumeration if successful;
2192 NULL otherwise. The nodes are enumerated in a reverse topological
2193 order, so that a node is always preceded in the enumeration by its
2194 descendants.
2197 <dd> <b>Side Effects</b> The first node is returned as a side effect.
2200 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
2201 <a href="#Cudd_NextNode">Cudd_NextNode</a>
2202 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2203 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2204 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
2205 </code>
2207 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2209 <dt><pre>
2210 <A NAME="Cudd_FirstPrime"></A>
2211 DdGen * <I></I>
2212 <B>Cudd_FirstPrime</B>(
2213 DdManager * <b>dd</b>, <i></i>
2214 DdNode * <b>l</b>, <i></i>
2215 DdNode * <b>u</b>, <i></i>
2216 int ** <b>cube</b> <i></i>
2218 </pre>
2219 <dd> Defines an iterator on a pair of BDDs describing a
2220 (possibly incompletely specified) Boolean functions and finds the
2221 first cube of a cover of the function. Returns a generator
2222 that contains the information necessary to continue the enumeration
2223 if successful; NULL otherwise.<p>
2225 The two argument BDDs are the lower and upper bounds of an interval.
2226 It is a mistake to call this function with a lower bound that is not
2227 less than or equal to the upper bound.<p>
2229 A cube is represented as an array of literals, which are integers in
2230 {0, 1, 2}; 0 represents a complemented literal, 1 represents an
2231 uncomplemented literal, and 2 stands for don't care. The enumeration
2232 produces a prime and irredundant cover of the function associated
2233 with the two BDDs. The size of the array equals the number of
2234 variables in the manager at the time Cudd_FirstCube is called.<p>
2236 This iterator can only be used on BDDs.
2239 <dd> <b>Side Effects</b> The first cube is returned as side effect.
2242 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachPrime">Cudd_ForeachPrime</a>
2243 <a href="#Cudd_NextPrime">Cudd_NextPrime</a>
2244 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2245 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2246 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
2247 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
2248 </code>
2250 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2252 <dt><pre>
2253 <A NAME="Cudd_FreeTree"></A>
2254 void <I></I>
2255 <B>Cudd_FreeTree</B>(
2256 DdManager * <b>dd</b> <i></i>
2258 </pre>
2259 <dd> Frees the variable group tree of the manager.
2262 <dd> <b>Side Effects</b> None
2265 <dd> <b>See Also</b> <code><a href="#Cudd_SetTree">Cudd_SetTree</a>
2266 <a href="#Cudd_ReadTree">Cudd_ReadTree</a>
2267 <a href="#Cudd_FreeZddTree">Cudd_FreeZddTree</a>
2268 </code>
2270 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2272 <dt><pre>
2273 <A NAME="Cudd_FreeZddTree"></A>
2274 void <I></I>
2275 <B>Cudd_FreeZddTree</B>(
2276 DdManager * <b>dd</b> <i></i>
2278 </pre>
2279 <dd> Frees the variable group tree of the manager.
2282 <dd> <b>Side Effects</b> None
2285 <dd> <b>See Also</b> <code><a href="#Cudd_SetZddTree">Cudd_SetZddTree</a>
2286 <a href="#Cudd_ReadZddTree">Cudd_ReadZddTree</a>
2287 <a href="#Cudd_FreeTree">Cudd_FreeTree</a>
2288 </code>
2290 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2292 <dt><pre>
2293 <A NAME="Cudd_GarbageCollectionEnabled"></A>
2294 int <I></I>
2295 <B>Cudd_GarbageCollectionEnabled</B>(
2296 DdManager * <b>dd</b> <i></i>
2298 </pre>
2299 <dd> Returns 1 if garbage collection is enabled; 0 otherwise.
2302 <dd> <b>Side Effects</b> None
2305 <dd> <b>See Also</b> <code><a href="#Cudd_EnableGarbageCollection">Cudd_EnableGarbageCollection</a>
2306 <a href="#Cudd_DisableGarbageCollection">Cudd_DisableGarbageCollection</a>
2307 </code>
2309 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2311 <dt><pre>
2312 <A NAME="Cudd_GenFree"></A>
2313 int <I></I>
2314 <B>Cudd_GenFree</B>(
2315 DdGen * <b>gen</b> <i></i>
2317 </pre>
2318 <dd> Frees a CUDD generator. Always returns 0, so that it can
2319 be used in mis-like foreach constructs.
2322 <dd> <b>Side Effects</b> None
2325 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
2326 <a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
2327 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
2328 <a href="#Cudd_NextCube">Cudd_NextCube</a>
2329 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
2330 <a href="#Cudd_NextNode">Cudd_NextNode</a>
2331 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2332 </code>
2334 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2336 <dt><pre>
2337 <A NAME="Cudd_Increasing"></A>
2338 DdNode * <I></I>
2339 <B>Cudd_Increasing</B>(
2340 DdManager * <b>dd</b>, <i></i>
2341 DdNode * <b>f</b>, <i></i>
2342 int <b>i</b> <i></i>
2344 </pre>
2345 <dd> Determines whether the function represented by BDD f is
2346 positive unate (monotonic increasing) in variable i. It is based on
2347 Cudd_Decreasing and the fact that f is monotonic increasing in i if
2348 and only if its complement is monotonic decreasing in i.
2351 <dd> <b>Side Effects</b> None
2354 <dd> <b>See Also</b> <code><a href="#Cudd_Decreasing">Cudd_Decreasing</a>
2355 </code>
2357 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
2359 <dt><pre>
2360 <A NAME="Cudd_IndicesToCube"></A>
2361 DdNode * <I></I>
2362 <B>Cudd_IndicesToCube</B>(
2363 DdManager * <b>dd</b>, <i></i>
2364 int * <b>array</b>, <i></i>
2365 int <b>n</b> <i></i>
2367 </pre>
2368 <dd> Builds a cube of BDD variables from an array of indices.
2369 Returns a pointer to the result if successful; NULL otherwise.
2372 <dd> <b>Side Effects</b> None
2375 <dd> <b>See Also</b> <code><a href="#Cudd_bddComputeCube">Cudd_bddComputeCube</a>
2376 <a href="#Cudd_CubeArrayToBdd">Cudd_CubeArrayToBdd</a>
2377 </code>
2379 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2381 <dt><pre>
2382 <A NAME="Cudd_Inequality"></A>
2383 DdNode * <I></I>
2384 <B>Cudd_Inequality</B>(
2385 DdManager * <b>dd</b>, <i>DD manager</i>
2386 int <b>N</b>, <i>number of x and y variables</i>
2387 int <b>c</b>, <i>right-hand side constant</i>
2388 DdNode ** <b>x</b>, <i>array of x variables</i>
2389 DdNode ** <b>y</b> <i>array of y variables</i>
2391 </pre>
2392 <dd> This function generates a BDD for the function x -y &ge; c.
2393 Both x and y are N-bit numbers, x[0] x[1] ... x[N-1] and
2394 y[0] y[1] ... y[N-1], with 0 the most significant bit.
2395 The BDD is built bottom-up.
2396 It has a linear number of nodes if the variables are ordered as follows:
2397 x[0] y[0] x[1] y[1] ... x[N-1] y[N-1].
2400 <dd> <b>Side Effects</b> None
2403 <dd> <b>See Also</b> <code><a href="#Cudd_Xgty">Cudd_Xgty</a>
2404 </code>
2406 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
2408 <dt><pre>
2409 <A NAME="Cudd_Init"></A>
2410 DdManager * <I></I>
2411 <B>Cudd_Init</B>(
2412 unsigned int <b>numVars</b>, <i>initial number of BDD variables (i.e., subtables)</i>
2413 unsigned int <b>numVarsZ</b>, <i>initial number of ZDD variables (i.e., subtables)</i>
2414 unsigned int <b>numSlots</b>, <i>initial size of the unique tables</i>
2415 unsigned int <b>cacheSize</b>, <i>initial size of the cache</i>
2416 unsigned long <b>maxMemory</b> <i>target maximum memory occupation</i>
2418 </pre>
2419 <dd> Creates a new DD manager, initializes the table, the
2420 basic constants and the projection functions. If maxMemory is 0,
2421 Cudd_Init decides suitable values for the maximum size of the cache
2422 and for the limit for fast unique table growth based on the available
2423 memory. Returns a pointer to the manager if successful; NULL
2424 otherwise.
2427 <dd> <b>Side Effects</b> None
2430 <dd> <b>See Also</b> <code><a href="#Cudd_Quit">Cudd_Quit</a>
2431 </code>
2433 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>
2435 <dt><pre>
2436 <A NAME="Cudd_IsGenEmpty"></A>
2437 int <I></I>
2438 <B>Cudd_IsGenEmpty</B>(
2439 DdGen * <b>gen</b> <i></i>
2441 </pre>
2442 <dd> Queries the status of a generator. Returns 1 if the
2443 generator is empty or NULL; 0 otherswise.
2446 <dd> <b>Side Effects</b> None
2449 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
2450 <a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
2451 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
2452 <a href="#Cudd_NextCube">Cudd_NextCube</a>
2453 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
2454 <a href="#Cudd_NextNode">Cudd_NextNode</a>
2455 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2456 </code>
2458 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2460 <dt><pre>
2461 <A NAME="Cudd_IsInHook"></A>
2462 int <I></I>
2463 <B>Cudd_IsInHook</B>(
2464 DdManager * <b>dd</b>, <i></i>
2465 DD_HFP <b>f</b>, <i></i>
2466 Cudd_HookType <b>where</b> <i></i>
2468 </pre>
2469 <dd> Checks whether a function is in a hook. A hook is a list of
2470 application-provided functions called on certain occasions by the
2471 package. Returns 1 if the function is found; 0 otherwise.
2474 <dd> <b>Side Effects</b> None
2477 <dd> <b>See Also</b> <code><a href="#Cudd_AddHook">Cudd_AddHook</a>
2478 <a href="#Cudd_RemoveHook">Cudd_RemoveHook</a>
2479 </code>
2481 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2483 <dt><pre>
2484 <A NAME="Cudd_IsNonConstant"></A>
2485 int <I></I>
2486 <B>Cudd_IsNonConstant</B>(
2487 DdNode * <b>f</b> <i></i>
2489 </pre>
2490 <dd> Returns 1 if a DD node is not constant. This function is
2491 useful to test the results of Cudd_bddIteConstant, Cudd_addIteConstant,
2492 Cudd_addEvalConst. These results may be a special value signifying
2493 non-constant. In the other cases the macro Cudd_IsConstant can be used.
2496 <dd> <b>Side Effects</b> None
2499 <dd> <b>See Also</b> <code><a href="#Cudd_IsConstant">Cudd_IsConstant</a>
2500 <a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
2501 <a href="#Cudd_addIteConstant">Cudd_addIteConstant</a>
2502 <a href="#Cudd_addEvalConst">Cudd_addEvalConst</a>
2503 </code>
2505 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2507 <dt><pre>
2508 <A NAME="Cudd_IterDerefBdd"></A>
2509 void <I></I>
2510 <B>Cudd_IterDerefBdd</B>(
2511 DdManager * <b>table</b>, <i></i>
2512 DdNode * <b>n</b> <i></i>
2514 </pre>
2515 <dd> Decreases the reference count of node n. If n dies,
2516 recursively decreases the reference counts of its children. It is
2517 used to dispose of a BDD that is no longer needed. It is more
2518 efficient than Cudd_RecursiveDeref, but it cannot be used on
2519 ADDs. The greater efficiency comes from being able to assume that no
2520 constant node will ever die as a result of a call to this
2521 procedure.
2524 <dd> <b>Side Effects</b> None
2527 <dd> <b>See Also</b> <code><a href="#Cudd_RecursiveDeref">Cudd_RecursiveDeref</a>
2528 <a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
2529 </code>
2531 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
2533 <dt><pre>
2534 <A NAME="Cudd_LargestCube"></A>
2535 DdNode * <I></I>
2536 <B>Cudd_LargestCube</B>(
2537 DdManager * <b>manager</b>, <i></i>
2538 DdNode * <b>f</b>, <i></i>
2539 int * <b>length</b> <i></i>
2541 </pre>
2542 <dd> Finds a largest cube in a DD. f is the DD we want to
2543 get the largest cube for. The problem is translated into the one of
2544 finding a shortest path in f, when both THEN and ELSE arcs are assumed to
2545 have unit length. This yields a largest cube in the disjoint cover
2546 corresponding to the DD. Therefore, it is not necessarily the largest
2547 implicant of f. Returns the largest cube as a BDD.
2550 <dd> <b>Side Effects</b> The number of literals of the cube is returned in length.
2553 <dd> <b>See Also</b> <code><a href="#Cudd_ShortestPath">Cudd_ShortestPath</a>
2554 </code>
2556 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
2558 <dt><pre>
2559 <A NAME="Cudd_MakeBddFromZddCover"></A>
2560 DdNode * <I></I>
2561 <B>Cudd_MakeBddFromZddCover</B>(
2562 DdManager * <b>dd</b>, <i></i>
2563 DdNode * <b>node</b> <i></i>
2565 </pre>
2566 <dd> Converts a ZDD cover to a BDD graph. If successful, it
2567 returns a BDD node, otherwise it returns NULL.
2570 <dd> <b>See Also</b> <code><a href="#cuddMakeBddFromZddCover">cuddMakeBddFromZddCover</a>
2571 </code>
2573 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
2575 <dt><pre>
2576 <A NAME="Cudd_MakeTreeNode"></A>
2577 MtrNode * <I></I>
2578 <B>Cudd_MakeTreeNode</B>(
2579 DdManager * <b>dd</b>, <i>manager</i>
2580 unsigned int <b>low</b>, <i>index of the first group variable</i>
2581 unsigned int <b>size</b>, <i>number of variables in the group</i>
2582 unsigned int <b>type</b> <i>MTR_DEFAULT or MTR_FIXED</i>
2584 </pre>
2585 <dd> Creates a new variable group. The group starts at
2586 variable and contains size variables. The parameter low is the index
2587 of the first variable. If the variable already exists, its current
2588 position in the order is known to the manager. If the variable does
2589 not exist yet, the position is assumed to be the same as the index.
2590 The group tree is created if it does not exist yet.
2591 Returns a pointer to the group if successful; NULL otherwise.
2594 <dd> <b>Side Effects</b> The variable tree is changed.
2597 <dd> <b>See Also</b> <code><a href="#Cudd_MakeZddTreeNode">Cudd_MakeZddTreeNode</a>
2598 </code>
2600 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
2602 <dt><pre>
2603 <A NAME="Cudd_MakeZddTreeNode"></A>
2604 MtrNode * <I></I>
2605 <B>Cudd_MakeZddTreeNode</B>(
2606 DdManager * <b>dd</b>, <i>manager</i>
2607 unsigned int <b>low</b>, <i>index of the first group variable</i>
2608 unsigned int <b>size</b>, <i>number of variables in the group</i>
2609 unsigned int <b>type</b> <i>MTR_DEFAULT or MTR_FIXED</i>
2611 </pre>
2612 <dd> Creates a new ZDD variable group. The group starts at
2613 variable and contains size variables. The parameter low is the index
2614 of the first variable. If the variable already exists, its current
2615 position in the order is known to the manager. If the variable does
2616 not exist yet, the position is assumed to be the same as the index.
2617 The group tree is created if it does not exist yet.
2618 Returns a pointer to the group if successful; NULL otherwise.
2621 <dd> <b>Side Effects</b> The ZDD variable tree is changed.
2624 <dd> <b>See Also</b> <code><a href="#Cudd_MakeTreeNode">Cudd_MakeTreeNode</a>
2625 </code>
2627 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
2629 <dt><pre>
2630 <A NAME="Cudd_MinHammingDist"></A>
2631 int <I></I>
2632 <B>Cudd_MinHammingDist</B>(
2633 DdManager * <b>dd</b>, <i>DD manager</i>
2634 DdNode * <b>f</b>, <i>function to examine</i>
2635 int * <b>minterm</b>, <i>reference minterm</i>
2636 int <b>upperBound</b> <i>distance above which an approximate answer is OK</i>
2638 </pre>
2639 <dd> Returns the minimum Hamming distance between the
2640 minterms of a function f and a reference minterm. The function is
2641 given as a BDD; the minterm is given as an array of integers, one
2642 for each variable in the manager. Returns the minimum distance if
2643 it is less than the upper bound; the upper bound if the minimum
2644 distance is at least as large; CUDD_OUT_OF_MEM in case of failure.
2647 <dd> <b>Side Effects</b> None
2650 <dd> <b>See Also</b> <code><a href="#Cudd_addHamming">Cudd_addHamming</a>
2651 <a href="#Cudd_bddClosestCube">Cudd_bddClosestCube</a>
2652 </code>
2654 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
2656 <dt><pre>
2657 <A NAME="Cudd_NewApaNumber"></A>
2658 DdApaNumber <I></I>
2659 <B>Cudd_NewApaNumber</B>(
2660 int <b>digits</b> <i></i>
2662 </pre>
2663 <dd> Allocates memory for an arbitrary precision
2664 integer. Returns a pointer to the allocated memory if successful;
2665 NULL otherwise.
2668 <dd> <b>Side Effects</b> None
2671 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
2673 <dt><pre>
2674 <A NAME="Cudd_NextCube"></A>
2675 int <I></I>
2676 <B>Cudd_NextCube</B>(
2677 DdGen * <b>gen</b>, <i></i>
2678 int ** <b>cube</b>, <i></i>
2679 CUDD_VALUE_TYPE * <b>value</b> <i></i>
2681 </pre>
2682 <dd> Generates the next cube of a decision diagram onset,
2683 using generator gen. Returns 0 if the enumeration is completed; 1
2684 otherwise.
2687 <dd> <b>Side Effects</b> The cube and its value are returned as side effects. The
2688 generator is modified.
2691 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
2692 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
2693 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2694 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2695 <a href="#Cudd_NextNode">Cudd_NextNode</a>
2696 </code>
2698 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2700 <dt><pre>
2701 <A NAME="Cudd_NextNode"></A>
2702 int <I></I>
2703 <B>Cudd_NextNode</B>(
2704 DdGen * <b>gen</b>, <i></i>
2705 DdNode ** <b>node</b> <i></i>
2707 </pre>
2708 <dd> Finds the node of a decision diagram, using generator
2709 gen. Returns 0 if the enumeration is completed; 1 otherwise.
2712 <dd> <b>Side Effects</b> The next node is returned as a side effect.
2715 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
2716 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
2717 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2718 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2719 <a href="#Cudd_NextCube">Cudd_NextCube</a>
2720 </code>
2722 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2724 <dt><pre>
2725 <A NAME="Cudd_NextPrime"></A>
2726 int <I></I>
2727 <B>Cudd_NextPrime</B>(
2728 DdGen * <b>gen</b>, <i></i>
2729 int ** <b>cube</b> <i></i>
2731 </pre>
2732 <dd> Generates the next cube of a Boolean function,
2733 using generator gen. Returns 0 if the enumeration is completed; 1
2734 otherwise.
2737 <dd> <b>Side Effects</b> The cube and is returned as side effects. The
2738 generator is modified.
2741 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachPrime">Cudd_ForeachPrime</a>
2742 <a href="#Cudd_FirstPrime">Cudd_FirstPrime</a>
2743 <a href="#Cudd_GenFree">Cudd_GenFree</a>
2744 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
2745 <a href="#Cudd_NextCube">Cudd_NextCube</a>
2746 <a href="#Cudd_NextNode">Cudd_NextNode</a>
2747 </code>
2749 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2751 <dt><pre>
2752 <A NAME="Cudd_NodeReadIndex"></A>
2753 unsigned int <I></I>
2754 <B>Cudd_NodeReadIndex</B>(
2755 DdNode * <b>node</b> <i></i>
2757 </pre>
2758 <dd> Returns the index of the node. The node pointer can be
2759 either regular or complemented.
2762 <dd> <b>Side Effects</b> None
2765 <dd> <b>See Also</b> <code><a href="#Cudd_ReadIndex">Cudd_ReadIndex</a>
2766 </code>
2768 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2770 <dt><pre>
2771 <A NAME="Cudd_OutOfMem"></A>
2772 void <I></I>
2773 <B>Cudd_OutOfMem</B>(
2774 long <b>size</b> <i>size of the allocation that failed</i>
2776 </pre>
2777 <dd> Warns that a memory allocation failed.
2778 This function can be used as replacement of MMout_of_memory to prevent
2779 the safe_mem functions of the util package from exiting when malloc
2780 returns NULL. One possible use is in case of discretionary allocations;
2781 for instance, the allocation of memory to enlarge the computed table.
2784 <dd> <b>Side Effects</b> None
2787 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2789 <dt><pre>
2790 <A NAME="Cudd_OverApprox"></A>
2791 DdNode * <I></I>
2792 <B>Cudd_OverApprox</B>(
2793 DdManager * <b>dd</b>, <i>manager</i>
2794 DdNode * <b>f</b>, <i>function to be superset</i>
2795 int <b>numVars</b>, <i>number of variables in the support of f</i>
2796 int <b>threshold</b>, <i>when to stop approximation</i>
2797 int <b>safe</b>, <i>enforce safe approximation</i>
2798 double <b>quality</b> <i>minimum improvement for accepted changes</i>
2800 </pre>
2801 <dd> Extracts a dense superset from a BDD. The procedure is
2802 identical to the underapproximation procedure except for the fact that it
2803 works on the complement of the given function. Extracting the subset
2804 of the complement function is equivalent to extracting the superset
2805 of the function.
2806 Returns a pointer to the BDD of the superset if successful. NULL if
2807 intermediate result causes the procedure to run out of memory. The
2808 parameter numVars is the maximum number of variables to be used in
2809 minterm calculation. The optimal number
2810 should be as close as possible to the size of the support of f.
2811 However, it is safe to pass the value returned by Cudd_ReadSize for
2812 numVars when the number of variables is under 1023. If numVars is
2813 larger than 1023, it will overflow. If a 0 parameter is passed then
2814 the procedure will compute a value which will avoid overflow but
2815 will cause underflow with 2046 variables or more.
2818 <dd> <b>Side Effects</b> None
2821 <dd> <b>See Also</b> <code><a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
2822 <a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
2823 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
2824 </code>
2826 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
2828 <dt><pre>
2829 <A NAME="Cudd_Prime"></A>
2830 unsigned int <I></I>
2831 <B>Cudd_Prime</B>(
2832 unsigned int <b>p</b> <i></i>
2834 </pre>
2835 <dd> Returns the next prime &gt;= p.
2838 <dd> <b>Side Effects</b> None
2841 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
2843 <dt><pre>
2844 <A NAME="Cudd_PrintDebug"></A>
2845 int <I></I>
2846 <B>Cudd_PrintDebug</B>(
2847 DdManager * <b>dd</b>, <i></i>
2848 DdNode * <b>f</b>, <i></i>
2849 int <b>n</b>, <i></i>
2850 int <b>pr</b> <i></i>
2852 </pre>
2853 <dd> Prints to the standard output a DD and its statistics.
2854 The statistics include the number of nodes, the number of leaves, and
2855 the number of minterms. (The number of minterms is the number of
2856 assignments to the variables that cause the function to be different
2857 from the logical zero (for BDDs) and from the background value (for
2858 ADDs.) The statistics are printed if pr &gt; 0. Specifically:
2859 <ul>
2860 <li> pr = 0 : prints nothing
2861 <li> pr = 1 : prints counts of nodes and minterms
2862 <li> pr = 2 : prints counts + disjoint sum of product
2863 <li> pr = 3 : prints counts + list of nodes
2864 <li> pr &gt; 3 : prints counts + disjoint sum of product + list of nodes
2865 </ul>
2866 For the purpose of counting the number of minterms, the function is
2867 supposed to depend on n variables. Returns 1 if successful; 0 otherwise.
2870 <dd> <b>Side Effects</b> None
2873 <dd> <b>See Also</b> <code><a href="#Cudd_DagSize">Cudd_DagSize</a>
2874 <a href="#Cudd_CountLeaves">Cudd_CountLeaves</a>
2875 <a href="#Cudd_CountMinterm">Cudd_CountMinterm</a>
2876 <a href="#Cudd_PrintMinterm">Cudd_PrintMinterm</a>
2877 </code>
2879 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2881 <dt><pre>
2882 <A NAME="Cudd_PrintInfo"></A>
2883 int <I></I>
2884 <B>Cudd_PrintInfo</B>(
2885 DdManager * <b>dd</b>, <i></i>
2886 FILE * <b>fp</b> <i></i>
2888 </pre>
2889 <dd> Prints out statistics and settings for a CUDD manager.
2890 Returns 1 if successful; 0 otherwise.
2893 <dd> <b>Side Effects</b> None
2896 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
2898 <dt><pre>
2899 <A NAME="Cudd_PrintLinear"></A>
2900 int <I></I>
2901 <B>Cudd_PrintLinear</B>(
2902 DdManager * <b>table</b> <i></i>
2904 </pre>
2905 <dd> Prints the linear transform matrix. Returns 1 in case of
2906 success; 0 otherwise.
2909 <dd> <b>Side Effects</b> none
2912 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
2914 <dt><pre>
2915 <A NAME="Cudd_PrintMinterm"></A>
2916 int <I></I>
2917 <B>Cudd_PrintMinterm</B>(
2918 DdManager * <b>manager</b>, <i></i>
2919 DdNode * <b>node</b> <i></i>
2921 </pre>
2922 <dd> Prints a disjoint sum of product cover for the function
2923 rooted at node. Each product corresponds to a path from node to a
2924 leaf node different from the logical zero, and different from the
2925 background value. Uses the package default output file. Returns 1
2926 if successful; 0 otherwise.
2929 <dd> <b>Side Effects</b> None
2932 <dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
2933 <a href="#Cudd_bddPrintCover">Cudd_bddPrintCover</a>
2934 </code>
2936 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2938 <dt><pre>
2939 <A NAME="Cudd_PrintTwoLiteralClauses"></A>
2940 int <I></I>
2941 <B>Cudd_PrintTwoLiteralClauses</B>(
2942 DdManager * <b>dd</b>, <i></i>
2943 DdNode * <b>f</b>, <i></i>
2944 char ** <b>names</b>, <i></i>
2945 FILE * <b>fp</b> <i></i>
2947 </pre>
2948 <dd> Prints the one- and two-literal clauses. Returns 1 if
2949 successful; 0 otherwise. The argument "names" can be NULL, in which case
2950 the variable indices are printed.
2953 <dd> <b>Side Effects</b> None
2956 <dd> <b>See Also</b> <code><a href="#Cudd_FindTwoLiteralClauses">Cudd_FindTwoLiteralClauses</a>
2957 </code>
2959 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
2961 <dt><pre>
2962 <A NAME="Cudd_PrintVersion"></A>
2963 void <I></I>
2964 <B>Cudd_PrintVersion</B>(
2965 FILE * <b>fp</b> <i></i>
2967 </pre>
2968 <dd> Prints the package version number.
2971 <dd> <b>Side Effects</b> None
2974 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
2976 <dt><pre>
2977 <A NAME="Cudd_PrioritySelect"></A>
2978 DdNode * <I></I>
2979 <B>Cudd_PrioritySelect</B>(
2980 DdManager * <b>dd</b>, <i>manager</i>
2981 DdNode * <b>R</b>, <i>BDD of the relation</i>
2982 DdNode ** <b>x</b>, <i>array of x variables</i>
2983 DdNode ** <b>y</b>, <i>array of y variables</i>
2984 DdNode ** <b>z</b>, <i>array of z variables (optional: may be NULL)</i>
2985 DdNode * <b>Pi</b>, <i>BDD of the priority function (optional: may be NULL)</i>
2986 int <b>n</b>, <i>size of x, y, and z</i>
2987 DD_PRFP <b>Pifunc</b> <i>function used to build Pi if it is NULL</i>
2989 </pre>
2990 <dd> Selects pairs from a relation R(x,y) (given as a BDD)
2991 in such a way that a given x appears in one pair only. Uses a
2992 priority function to determine which y should be paired to a given x.
2993 Cudd_PrioritySelect returns a pointer to
2994 the selected function if successful; NULL otherwise.
2995 Three of the arguments--x, y, and z--are vectors of BDD variables.
2996 The first two are the variables on which R depends. The third vectore
2997 is a vector of auxiliary variables, used during the computation. This
2998 vector is optional. If a NULL value is passed instead,
2999 Cudd_PrioritySelect will create the working variables on the fly.
3000 The sizes of x and y (and z if it is not NULL) should equal n.
3001 The priority function Pi can be passed as a BDD, or can be built by
3002 Cudd_PrioritySelect. If NULL is passed instead of a DdNode *,
3003 parameter Pifunc is used by Cudd_PrioritySelect to build a BDD for the
3004 priority function. (Pifunc is a pointer to a C function.) If Pi is not
3005 NULL, then Pifunc is ignored. Pifunc should have the same interface as
3006 the standard priority functions (e.g., Cudd_Dxygtdxz).
3007 Cudd_PrioritySelect and Cudd_CProjection can sometimes be used
3008 interchangeably. Specifically, calling Cudd_PrioritySelect with
3009 Cudd_Xgty as Pifunc produces the same result as calling
3010 Cudd_CProjection with the all-zero minterm as reference minterm.
3011 However, depending on the application, one or the other may be
3012 preferable:
3013 <ul>
3014 <li> When extracting representatives from an equivalence relation,
3015 Cudd_CProjection has the advantage of nor requiring the auxiliary
3016 variables.
3017 <li> When computing matchings in general bipartite graphs,
3018 Cudd_PrioritySelect normally obtains better results because it can use
3019 more powerful matching schemes (e.g., Cudd_Dxygtdxz).
3020 </ul>
3023 <dd> <b>Side Effects</b> If called with z == NULL, will create new variables in
3024 the manager.
3027 <dd> <b>See Also</b> <code><a href="#Cudd_Dxygtdxz">Cudd_Dxygtdxz</a>
3028 <a href="#Cudd_Dxygtdyz">Cudd_Dxygtdyz</a>
3029 <a href="#Cudd_Xgty">Cudd_Xgty</a>
3030 <a href="#Cudd_bddAdjPermuteX">Cudd_bddAdjPermuteX</a>
3031 <a href="#Cudd_CProjection">Cudd_CProjection</a>
3032 </code>
3034 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
3036 <dt><pre>
3037 <A NAME="Cudd_Quit"></A>
3038 void <I></I>
3039 <B>Cudd_Quit</B>(
3040 DdManager * <b>unique</b> <i></i>
3042 </pre>
3043 <dd> Deletes resources associated with a DD manager and
3044 resets the global statistical counters. (Otherwise, another manaqger
3045 subsequently created would inherit the stats of this one.)
3048 <dd> <b>Side Effects</b> None
3051 <dd> <b>See Also</b> <code><a href="#Cudd_Init">Cudd_Init</a>
3052 </code>
3054 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>
3056 <dt><pre>
3057 <A NAME="Cudd_Random"></A>
3058 long <I></I>
3059 <B>Cudd_Random</B>(
3060 <b></b> <i></i>
3062 </pre>
3063 <dd> Portable number generator based on ran2 from "Numerical
3064 Recipes in C." It is a long period (> 2 * 10^18) random number generator
3065 of L'Ecuyer with Bays-Durham shuffle. Returns a long integer uniformly
3066 distributed between 0 and 2147483561 (inclusive of the endpoint values).
3067 The random generator can be explicitly initialized by calling
3068 Cudd_Srandom. If no explicit initialization is performed, then the
3069 seed 1 is assumed.
3072 <dd> <b>Side Effects</b> None
3075 <dd> <b>See Also</b> <code><a href="#Cudd_Srandom">Cudd_Srandom</a>
3076 </code>
3078 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
3080 <dt><pre>
3081 <A NAME="Cudd_ReadArcviolation"></A>
3082 int <I></I>
3083 <B>Cudd_ReadArcviolation</B>(
3084 DdManager * <b>dd</b> <i></i>
3086 </pre>
3087 <dd> Returns the current value of the arcviolation
3088 parameter. This parameter is used in group sifting to decide how
3089 many arcs into <code>y</code> not coming from <code>x</code> are
3090 tolerable when checking for aggregation due to extended
3091 symmetry. The value should be between 0 and 100. A small value
3092 causes fewer variables to be aggregated. The default value is 0.
3095 <dd> <b>Side Effects</b> None
3098 <dd> <b>See Also</b> <code><a href="#Cudd_SetArcviolation">Cudd_SetArcviolation</a>
3099 </code>
3101 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3103 <dt><pre>
3104 <A NAME="Cudd_ReadBackground"></A>
3105 DdNode * <I></I>
3106 <B>Cudd_ReadBackground</B>(
3107 DdManager * <b>dd</b> <i></i>
3109 </pre>
3110 <dd> Reads the background constant of the manager.
3113 <dd> <b>Side Effects</b> None
3116 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3118 <dt><pre>
3119 <A NAME="Cudd_ReadCacheHits"></A>
3120 double <I></I>
3121 <B>Cudd_ReadCacheHits</B>(
3122 DdManager * <b>dd</b> <i></i>
3124 </pre>
3125 <dd> Returns the number of cache hits.
3128 <dd> <b>Side Effects</b> None
3131 <dd> <b>See Also</b> <code><a href="#Cudd_ReadCacheLookUps">Cudd_ReadCacheLookUps</a>
3132 </code>
3134 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3136 <dt><pre>
3137 <A NAME="Cudd_ReadCacheLookUps"></A>
3138 double <I></I>
3139 <B>Cudd_ReadCacheLookUps</B>(
3140 DdManager * <b>dd</b> <i></i>
3142 </pre>
3143 <dd> Returns the number of cache look-ups.
3146 <dd> <b>Side Effects</b> None
3149 <dd> <b>See Also</b> <code><a href="#Cudd_ReadCacheHits">Cudd_ReadCacheHits</a>
3150 </code>
3152 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3154 <dt><pre>
3155 <A NAME="Cudd_ReadCacheSlots"></A>
3156 unsigned int <I></I>
3157 <B>Cudd_ReadCacheSlots</B>(
3158 DdManager * <b>dd</b> <i></i>
3160 </pre>
3161 <dd> Reads the number of slots in the cache.
3164 <dd> <b>Side Effects</b> None
3167 <dd> <b>See Also</b> <code><a href="#Cudd_ReadCacheUsedSlots">Cudd_ReadCacheUsedSlots</a>
3168 </code>
3170 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3172 <dt><pre>
3173 <A NAME="Cudd_ReadCacheUsedSlots"></A>
3174 double <I></I>
3175 <B>Cudd_ReadCacheUsedSlots</B>(
3176 DdManager * <b>dd</b> <i></i>
3178 </pre>
3179 <dd> Reads the fraction of used slots in the cache. The unused
3180 slots are those in which no valid data is stored. Garbage collection,
3181 variable reordering, and cache resizing may cause used slots to become
3182 unused.
3185 <dd> <b>Side Effects</b> None
3188 <dd> <b>See Also</b> <code><a href="#Cudd_ReadCacheSlots">Cudd_ReadCacheSlots</a>
3189 </code>
3191 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3193 <dt><pre>
3194 <A NAME="Cudd_ReadDead"></A>
3195 unsigned int <I></I>
3196 <B>Cudd_ReadDead</B>(
3197 DdManager * <b>dd</b> <i></i>
3199 </pre>
3200 <dd> Returns the number of dead nodes in the unique table.
3203 <dd> <b>Side Effects</b> None
3206 <dd> <b>See Also</b> <code><a href="#Cudd_ReadKeys">Cudd_ReadKeys</a>
3207 </code>
3209 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3211 <dt><pre>
3212 <A NAME="Cudd_ReadEpsilon"></A>
3213 CUDD_VALUE_TYPE <I></I>
3214 <B>Cudd_ReadEpsilon</B>(
3215 DdManager * <b>dd</b> <i></i>
3217 </pre>
3218 <dd> Reads the epsilon parameter of the manager. The epsilon
3219 parameter control the comparison between floating point numbers.
3222 <dd> <b>Side Effects</b> None
3225 <dd> <b>See Also</b> <code><a href="#Cudd_SetEpsilon">Cudd_SetEpsilon</a>
3226 </code>
3228 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3230 <dt><pre>
3231 <A NAME="Cudd_ReadErrorCode"></A>
3232 Cudd_ErrorType <I></I>
3233 <B>Cudd_ReadErrorCode</B>(
3234 DdManager * <b>dd</b> <i></i>
3236 </pre>
3237 <dd> Returns the code of the last error. The error codes are
3238 defined in cudd.h.
3241 <dd> <b>Side Effects</b> None
3244 <dd> <b>See Also</b> <code><a href="#Cudd_ClearErrorCode">Cudd_ClearErrorCode</a>
3245 </code>
3247 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3249 <dt><pre>
3250 <A NAME="Cudd_ReadGarbageCollectionTime"></A>
3251 long <I></I>
3252 <B>Cudd_ReadGarbageCollectionTime</B>(
3253 DdManager * <b>dd</b> <i></i>
3255 </pre>
3256 <dd> Returns the number of milliseconds spent doing garbage
3257 collection since the manager was initialized.
3260 <dd> <b>Side Effects</b> None
3263 <dd> <b>See Also</b> <code><a href="#Cudd_ReadGarbageCollections">Cudd_ReadGarbageCollections</a>
3264 </code>
3266 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3268 <dt><pre>
3269 <A NAME="Cudd_ReadGarbageCollections"></A>
3270 int <I></I>
3271 <B>Cudd_ReadGarbageCollections</B>(
3272 DdManager * <b>dd</b> <i></i>
3274 </pre>
3275 <dd> Returns the number of times garbage collection has
3276 occurred in the manager. The number includes both the calls from
3277 reordering procedures and those caused by requests to create new
3278 nodes.
3281 <dd> <b>Side Effects</b> None
3284 <dd> <b>See Also</b> <code><a href="#Cudd_ReadGarbageCollectionTime">Cudd_ReadGarbageCollectionTime</a>
3285 </code>
3287 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3289 <dt><pre>
3290 <A NAME="Cudd_ReadGroupcheck"></A>
3291 Cudd_AggregationType <I></I>
3292 <B>Cudd_ReadGroupcheck</B>(
3293 DdManager * <b>dd</b> <i></i>
3295 </pre>
3296 <dd> Reads the groupcheck parameter of the manager. The
3297 groupcheck parameter determines the aggregation criterion in group
3298 sifting.
3301 <dd> <b>Side Effects</b> None
3304 <dd> <b>See Also</b> <code><a href="#Cudd_SetGroupcheck">Cudd_SetGroupcheck</a>
3305 </code>
3307 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3309 <dt><pre>
3310 <A NAME="Cudd_ReadInvPermZdd"></A>
3311 int <I></I>
3312 <B>Cudd_ReadInvPermZdd</B>(
3313 DdManager * <b>dd</b>, <i></i>
3314 int <b>i</b> <i></i>
3316 </pre>
3317 <dd> Returns the index of the ZDD variable currently in the
3318 i-th position of the order. If the index is CUDD_CONST_INDEX, returns
3319 CUDD_CONST_INDEX; otherwise, if the index is out of bounds returns -1.
3322 <dd> <b>Side Effects</b> None
3325 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
3326 <a href="#Cudd_ReadInvPermZdd">Cudd_ReadInvPermZdd</a>
3327 </code>
3329 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3331 <dt><pre>
3332 <A NAME="Cudd_ReadInvPerm"></A>
3333 int <I></I>
3334 <B>Cudd_ReadInvPerm</B>(
3335 DdManager * <b>dd</b>, <i></i>
3336 int <b>i</b> <i></i>
3338 </pre>
3339 <dd> Returns the index of the variable currently in the i-th
3340 position of the order. If the index is CUDD_CONST_INDEX, returns
3341 CUDD_CONST_INDEX; otherwise, if the index is out of bounds returns -1.
3344 <dd> <b>Side Effects</b> None
3347 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
3348 <a href="#Cudd_ReadInvPermZdd">Cudd_ReadInvPermZdd</a>
3349 </code>
3351 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3353 <dt><pre>
3354 <A NAME="Cudd_ReadIthClause"></A>
3355 int <I></I>
3356 <B>Cudd_ReadIthClause</B>(
3357 DdTlcInfo * <b>tlc</b>, <i></i>
3358 int <b>i</b>, <i></i>
3359 DdHalfWord * <b>var1</b>, <i></i>
3360 DdHalfWord * <b>var2</b>, <i></i>
3361 int * <b>phase1</b>, <i></i>
3362 int * <b>phase2</b> <i></i>
3364 </pre>
3365 <dd> Accesses the i-th clause of a DD given the clause set which
3366 must be already computed. Returns 1 if successful; 0 if i is out of range,
3367 or in case of error.
3370 <dd> <b>Side Effects</b> the four components of a clause are returned as side effects.
3373 <dd> <b>See Also</b> <code><a href="#Cudd_FindTwoLiteralClauses">Cudd_FindTwoLiteralClauses</a>
3374 </code>
3376 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
3378 <dt><pre>
3379 <A NAME="Cudd_ReadKeys"></A>
3380 unsigned int <I></I>
3381 <B>Cudd_ReadKeys</B>(
3382 DdManager * <b>dd</b> <i></i>
3384 </pre>
3385 <dd> Returns the total number of nodes currently in the unique
3386 table, including the dead nodes.
3389 <dd> <b>Side Effects</b> None
3392 <dd> <b>See Also</b> <code><a href="#Cudd_ReadDead">Cudd_ReadDead</a>
3393 </code>
3395 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3397 <dt><pre>
3398 <A NAME="Cudd_ReadLinear"></A>
3399 int <I></I>
3400 <B>Cudd_ReadLinear</B>(
3401 DdManager * <b>table</b>, <i>CUDD manager</i>
3402 int <b>x</b>, <i>row index</i>
3403 int <b>y</b> <i>column index</i>
3405 </pre>
3406 <dd> Reads an entry of the linear transform matrix.
3409 <dd> <b>Side Effects</b> none
3412 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
3414 <dt><pre>
3415 <A NAME="Cudd_ReadLogicZero"></A>
3416 DdNode * <I></I>
3417 <B>Cudd_ReadLogicZero</B>(
3418 DdManager * <b>dd</b> <i></i>
3420 </pre>
3421 <dd> Returns the zero constant of the manager. The logic zero
3422 constant is the complement of the one constant, and is distinct from
3423 the arithmetic zero.
3426 <dd> <b>Side Effects</b> None
3429 <dd> <b>See Also</b> <code><a href="#Cudd_ReadOne">Cudd_ReadOne</a>
3430 <a href="#Cudd_ReadZero">Cudd_ReadZero</a>
3431 </code>
3433 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3435 <dt><pre>
3436 <A NAME="Cudd_ReadLooseUpTo"></A>
3437 unsigned int <I></I>
3438 <B>Cudd_ReadLooseUpTo</B>(
3439 DdManager * <b>dd</b> <i></i>
3441 </pre>
3442 <dd> Reads the looseUpTo parameter of the manager.
3445 <dd> <b>Side Effects</b> None
3448 <dd> <b>See Also</b> <code><a href="#Cudd_SetLooseUpTo">Cudd_SetLooseUpTo</a>
3449 <a href="#Cudd_ReadMinHit">Cudd_ReadMinHit</a>
3450 <a href="#Cudd_ReadMinDead">Cudd_ReadMinDead</a>
3451 </code>
3453 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3455 <dt><pre>
3456 <A NAME="Cudd_ReadMaxCacheHard"></A>
3457 unsigned int <I></I>
3458 <B>Cudd_ReadMaxCacheHard</B>(
3459 DdManager * <b>dd</b> <i></i>
3461 </pre>
3462 <dd> Reads the maxCacheHard parameter of the manager.
3465 <dd> <b>Side Effects</b> None
3468 <dd> <b>See Also</b> <code><a href="#Cudd_SetMaxCacheHard">Cudd_SetMaxCacheHard</a>
3469 <a href="#Cudd_ReadMaxCache">Cudd_ReadMaxCache</a>
3470 </code>
3472 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3474 <dt><pre>
3475 <A NAME="Cudd_ReadMaxCache"></A>
3476 unsigned int <I></I>
3477 <B>Cudd_ReadMaxCache</B>(
3478 DdManager * <b>dd</b> <i></i>
3480 </pre>
3481 <dd> Returns the soft limit for the cache size. The soft limit
3484 <dd> <b>Side Effects</b> None
3487 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxCache">Cudd_ReadMaxCache</a>
3488 </code>
3490 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3492 <dt><pre>
3493 <A NAME="Cudd_ReadMaxGrowthAlternate"></A>
3494 double <I></I>
3495 <B>Cudd_ReadMaxGrowthAlternate</B>(
3496 DdManager * <b>dd</b> <i></i>
3498 </pre>
3499 <dd> Reads the maxGrowthAlt parameter of the manager. This
3500 parameter is analogous to the maxGrowth paramter, and is used every
3501 given number of reorderings instead of maxGrowth. The number of
3502 reorderings is set with Cudd_SetReorderingCycle. If the number of
3503 reorderings is 0 (default) maxGrowthAlt is never used.
3506 <dd> <b>Side Effects</b> None
3509 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxGrowth">Cudd_ReadMaxGrowth</a>
3510 <a href="#Cudd_SetMaxGrowthAlternate">Cudd_SetMaxGrowthAlternate</a>
3511 <a href="#Cudd_SetReorderingCycle">Cudd_SetReorderingCycle</a>
3512 <a href="#Cudd_ReadReorderingCycle">Cudd_ReadReorderingCycle</a>
3513 </code>
3515 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3517 <dt><pre>
3518 <A NAME="Cudd_ReadMaxGrowth"></A>
3519 double <I></I>
3520 <B>Cudd_ReadMaxGrowth</B>(
3521 DdManager * <b>dd</b> <i></i>
3523 </pre>
3524 <dd> Reads the maxGrowth parameter of the manager. This
3525 parameter determines how much the number of nodes can grow during
3526 sifting of a variable. Overall, sifting never increases the size of
3527 the decision diagrams. This parameter only refers to intermediate
3528 results. A lower value will speed up sifting, possibly at the
3529 expense of quality.
3532 <dd> <b>Side Effects</b> None
3535 <dd> <b>See Also</b> <code><a href="#Cudd_SetMaxGrowth">Cudd_SetMaxGrowth</a>
3536 <a href="#Cudd_ReadMaxGrowthAlternate">Cudd_ReadMaxGrowthAlternate</a>
3537 </code>
3539 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3541 <dt><pre>
3542 <A NAME="Cudd_ReadMaxLive"></A>
3543 unsigned int <I></I>
3544 <B>Cudd_ReadMaxLive</B>(
3545 DdManager * <b>dd</b> <i></i>
3547 </pre>
3548 <dd> Reads the maximum allowed number of live nodes. When this
3549 number is exceeded, the package returns NULL.
3552 <dd> <b>Side Effects</b> none
3555 <dd> <b>See Also</b> <code><a href="#Cudd_SetMaxLive">Cudd_SetMaxLive</a>
3556 </code>
3558 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3560 <dt><pre>
3561 <A NAME="Cudd_ReadMaxMemory"></A>
3562 unsigned long <I></I>
3563 <B>Cudd_ReadMaxMemory</B>(
3564 DdManager * <b>dd</b> <i></i>
3566 </pre>
3567 <dd> Reads the maximum allowed memory. When this
3568 number is exceeded, the package returns NULL.
3571 <dd> <b>Side Effects</b> none
3574 <dd> <b>See Also</b> <code><a href="#Cudd_SetMaxMemory">Cudd_SetMaxMemory</a>
3575 </code>
3577 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3579 <dt><pre>
3580 <A NAME="Cudd_ReadMemoryInUse"></A>
3581 unsigned long <I></I>
3582 <B>Cudd_ReadMemoryInUse</B>(
3583 DdManager * <b>dd</b> <i></i>
3585 </pre>
3586 <dd> Returns the memory in use by the manager measured in bytes.
3589 <dd> <b>Side Effects</b> None
3592 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3594 <dt><pre>
3595 <A NAME="Cudd_ReadMinDead"></A>
3596 unsigned int <I></I>
3597 <B>Cudd_ReadMinDead</B>(
3598 DdManager * <b>dd</b> <i></i>
3600 </pre>
3601 <dd> Reads the minDead parameter of the manager. The minDead
3602 parameter is used by the package to decide whether to collect garbage
3603 or resize a subtable of the unique table when the subtable becomes
3604 too full. The application can indirectly control the value of minDead
3605 by setting the looseUpTo parameter.
3608 <dd> <b>Side Effects</b> None
3611 <dd> <b>See Also</b> <code><a href="#Cudd_ReadDead">Cudd_ReadDead</a>
3612 <a href="#Cudd_ReadLooseUpTo">Cudd_ReadLooseUpTo</a>
3613 <a href="#Cudd_SetLooseUpTo">Cudd_SetLooseUpTo</a>
3614 </code>
3616 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3618 <dt><pre>
3619 <A NAME="Cudd_ReadMinHit"></A>
3620 unsigned int <I></I>
3621 <B>Cudd_ReadMinHit</B>(
3622 DdManager * <b>dd</b> <i></i>
3624 </pre>
3625 <dd> Reads the hit rate that causes resizinig of the computed
3626 table.
3629 <dd> <b>Side Effects</b> None
3632 <dd> <b>See Also</b> <code><a href="#Cudd_SetMinHit">Cudd_SetMinHit</a>
3633 </code>
3635 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3637 <dt><pre>
3638 <A NAME="Cudd_ReadMinusInfinity"></A>
3639 DdNode * <I></I>
3640 <B>Cudd_ReadMinusInfinity</B>(
3641 DdManager * <b>dd</b> <i></i>
3643 </pre>
3644 <dd> Reads the minus-infinity constant from the manager.
3647 <dd> <b>Side Effects</b> None
3650 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3652 <dt><pre>
3653 <A NAME="Cudd_ReadNextReordering"></A>
3654 unsigned int <I></I>
3655 <B>Cudd_ReadNextReordering</B>(
3656 DdManager * <b>dd</b> <i></i>
3658 </pre>
3659 <dd> Returns the threshold for the next dynamic reordering.
3660 The threshold is in terms of number of nodes and is in effect only
3661 if reordering is enabled. The count does not include the dead nodes,
3662 unless the countDead parameter of the manager has been changed from
3663 its default setting.
3666 <dd> <b>Side Effects</b> None
3669 <dd> <b>See Also</b> <code><a href="#Cudd_SetNextReordering">Cudd_SetNextReordering</a>
3670 </code>
3672 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3674 <dt><pre>
3675 <A NAME="Cudd_ReadNodeCount"></A>
3676 long <I></I>
3677 <B>Cudd_ReadNodeCount</B>(
3678 DdManager * <b>dd</b> <i></i>
3680 </pre>
3681 <dd> Reports the number of live nodes in BDDs and ADDs. This
3682 number does not include the isolated projection functions and the
3683 unused constants. These nodes that are not counted are not part of
3684 the DDs manipulated by the application.
3687 <dd> <b>Side Effects</b> None
3690 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPeakNodeCount">Cudd_ReadPeakNodeCount</a>
3691 <a href="#Cudd_zddReadNodeCount">Cudd_zddReadNodeCount</a>
3692 </code>
3694 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3696 <dt><pre>
3697 <A NAME="Cudd_ReadNodesDropped"></A>
3698 double <I></I>
3699 <B>Cudd_ReadNodesDropped</B>(
3700 DdManager * <b>dd</b> <i></i>
3702 </pre>
3703 <dd> Returns the number of nodes killed by dereferencing if the
3704 keeping of this statistic is enabled; -1 otherwise. This statistic is
3705 enabled only if the package is compiled with DD_STATS defined.
3708 <dd> <b>Side Effects</b> None
3711 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNodesFreed">Cudd_ReadNodesFreed</a>
3712 </code>
3714 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3716 <dt><pre>
3717 <A NAME="Cudd_ReadNodesFreed"></A>
3718 double <I></I>
3719 <B>Cudd_ReadNodesFreed</B>(
3720 DdManager * <b>dd</b> <i></i>
3722 </pre>
3723 <dd> Returns the number of nodes returned to the free list if the
3724 keeping of this statistic is enabled; -1 otherwise. This statistic is
3725 enabled only if the package is compiled with DD_STATS defined.
3728 <dd> <b>Side Effects</b> None
3731 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNodesDropped">Cudd_ReadNodesDropped</a>
3732 </code>
3734 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3736 <dt><pre>
3737 <A NAME="Cudd_ReadNumberXovers"></A>
3738 int <I></I>
3739 <B>Cudd_ReadNumberXovers</B>(
3740 DdManager * <b>dd</b> <i></i>
3742 </pre>
3743 <dd> Reads the current number of crossovers used by the
3744 genetic algorithm for variable reordering. A larger number of crossovers will
3745 cause the genetic algorithm to take more time, but will generally
3746 produce better results. The default value is 0, in which case the
3747 package uses three times the number of variables as number of crossovers,
3748 with a maximum of 60.
3751 <dd> <b>Side Effects</b> None
3754 <dd> <b>See Also</b> <code><a href="#Cudd_SetNumberXovers">Cudd_SetNumberXovers</a>
3755 </code>
3757 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3759 <dt><pre>
3760 <A NAME="Cudd_ReadOne"></A>
3761 DdNode * <I></I>
3762 <B>Cudd_ReadOne</B>(
3763 DdManager * <b>dd</b> <i></i>
3765 </pre>
3766 <dd> Returns the one constant of the manager. The one
3767 constant is common to ADDs and BDDs.
3770 <dd> <b>Side Effects</b> None
3773 <dd> <b>See Also</b> <code><a href="#Cudd_ReadZero">Cudd_ReadZero</a>
3774 <a href="#Cudd_ReadLogicZero">Cudd_ReadLogicZero</a>
3775 <a href="#Cudd_ReadZddOne">Cudd_ReadZddOne</a>
3776 </code>
3778 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3780 <dt><pre>
3781 <A NAME="Cudd_ReadPeakLiveNodeCount"></A>
3782 int <I></I>
3783 <B>Cudd_ReadPeakLiveNodeCount</B>(
3784 DdManager * <b>dd</b> <i></i>
3786 </pre>
3787 <dd> Reports the peak number of live nodes. This count is kept
3788 only if CUDD is compiled with DD_STATS defined. If DD_STATS is not
3789 defined, this function returns -1.
3792 <dd> <b>Side Effects</b> None
3795 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNodeCount">Cudd_ReadNodeCount</a>
3796 <a href="#Cudd_PrintInfo">Cudd_PrintInfo</a>
3797 <a href="#Cudd_ReadPeakNodeCount">Cudd_ReadPeakNodeCount</a>
3798 </code>
3800 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3802 <dt><pre>
3803 <A NAME="Cudd_ReadPeakNodeCount"></A>
3804 long <I></I>
3805 <B>Cudd_ReadPeakNodeCount</B>(
3806 DdManager * <b>dd</b> <i></i>
3808 </pre>
3809 <dd> Reports the peak number of nodes. This number includes
3810 node on the free list. At the peak, the number of nodes on the free
3811 list is guaranteed to be less than DD_MEM_CHUNK.
3814 <dd> <b>Side Effects</b> None
3817 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNodeCount">Cudd_ReadNodeCount</a>
3818 <a href="#Cudd_PrintInfo">Cudd_PrintInfo</a>
3819 </code>
3821 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3823 <dt><pre>
3824 <A NAME="Cudd_ReadPermZdd"></A>
3825 int <I></I>
3826 <B>Cudd_ReadPermZdd</B>(
3827 DdManager * <b>dd</b>, <i></i>
3828 int <b>i</b> <i></i>
3830 </pre>
3831 <dd> Returns the current position of the i-th ZDD variable
3832 in the order. If the index is CUDD_CONST_INDEX, returns
3833 CUDD_CONST_INDEX; otherwise, if the index is out of bounds returns
3837 <dd> <b>Side Effects</b> None
3840 <dd> <b>See Also</b> <code><a href="#Cudd_ReadInvPermZdd">Cudd_ReadInvPermZdd</a>
3841 <a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
3842 </code>
3844 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3846 <dt><pre>
3847 <A NAME="Cudd_ReadPerm"></A>
3848 int <I></I>
3849 <B>Cudd_ReadPerm</B>(
3850 DdManager * <b>dd</b>, <i></i>
3851 int <b>i</b> <i></i>
3853 </pre>
3854 <dd> Returns the current position of the i-th variable in
3855 the order. If the index is CUDD_CONST_INDEX, returns
3856 CUDD_CONST_INDEX; otherwise, if the index is out of bounds returns
3860 <dd> <b>Side Effects</b> None
3863 <dd> <b>See Also</b> <code><a href="#Cudd_ReadInvPerm">Cudd_ReadInvPerm</a>
3864 <a href="#Cudd_ReadPermZdd">Cudd_ReadPermZdd</a>
3865 </code>
3867 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3869 <dt><pre>
3870 <A NAME="Cudd_ReadPlusInfinity"></A>
3871 DdNode * <I></I>
3872 <B>Cudd_ReadPlusInfinity</B>(
3873 DdManager * <b>dd</b> <i></i>
3875 </pre>
3876 <dd> Reads the plus-infinity constant from the manager.
3879 <dd> <b>Side Effects</b> None
3882 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3884 <dt><pre>
3885 <A NAME="Cudd_ReadPopulationSize"></A>
3886 int <I></I>
3887 <B>Cudd_ReadPopulationSize</B>(
3888 DdManager * <b>dd</b> <i></i>
3890 </pre>
3891 <dd> Reads the current size of the population used by the
3892 genetic algorithm for variable reordering. A larger population size will
3893 cause the genetic algorithm to take more time, but will generally
3894 produce better results. The default value is 0, in which case the
3895 package uses three times the number of variables as population size,
3896 with a maximum of 120.
3899 <dd> <b>Side Effects</b> None
3902 <dd> <b>See Also</b> <code><a href="#Cudd_SetPopulationSize">Cudd_SetPopulationSize</a>
3903 </code>
3905 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3907 <dt><pre>
3908 <A NAME="Cudd_ReadRecomb"></A>
3909 int <I></I>
3910 <B>Cudd_ReadRecomb</B>(
3911 DdManager * <b>dd</b> <i></i>
3913 </pre>
3914 <dd> Returns the current value of the recombination
3915 parameter used in group sifting. A larger (positive) value makes the
3916 aggregation of variables due to the second difference criterion more
3917 likely. A smaller (negative) value makes aggregation less likely.
3920 <dd> <b>Side Effects</b> None
3923 <dd> <b>See Also</b> <code><a href="#Cudd_SetRecomb">Cudd_SetRecomb</a>
3924 </code>
3926 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3928 <dt><pre>
3929 <A NAME="Cudd_ReadRecursiveCalls"></A>
3930 double <I></I>
3931 <B>Cudd_ReadRecursiveCalls</B>(
3932 DdManager * <b>dd</b> <i></i>
3934 </pre>
3935 <dd> Returns the number of recursive calls if the package is
3936 compiled with DD_COUNT defined.
3939 <dd> <b>Side Effects</b> None
3942 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3944 <dt><pre>
3945 <A NAME="Cudd_ReadReorderingCycle"></A>
3946 int <I></I>
3947 <B>Cudd_ReadReorderingCycle</B>(
3948 DdManager * <b>dd</b> <i></i>
3950 </pre>
3951 <dd> Reads the reordCycle parameter of the manager. This
3952 parameter determines how often the alternate threshold on maximum
3953 growth is used in reordering.
3956 <dd> <b>Side Effects</b> None
3959 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxGrowthAlternate">Cudd_ReadMaxGrowthAlternate</a>
3960 <a href="#Cudd_SetMaxGrowthAlternate">Cudd_SetMaxGrowthAlternate</a>
3961 <a href="#Cudd_SetReorderingCycle">Cudd_SetReorderingCycle</a>
3962 </code>
3964 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3966 <dt><pre>
3967 <A NAME="Cudd_ReadReorderingTime"></A>
3968 long <I></I>
3969 <B>Cudd_ReadReorderingTime</B>(
3970 DdManager * <b>dd</b> <i></i>
3972 </pre>
3973 <dd> Returns the number of milliseconds spent reordering
3974 variables since the manager was initialized. The time spent in collecting
3975 garbage before reordering is included.
3978 <dd> <b>Side Effects</b> None
3981 <dd> <b>See Also</b> <code><a href="#Cudd_ReadReorderings">Cudd_ReadReorderings</a>
3982 </code>
3984 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
3986 <dt><pre>
3987 <A NAME="Cudd_ReadReorderings"></A>
3988 int <I></I>
3989 <B>Cudd_ReadReorderings</B>(
3990 DdManager * <b>dd</b> <i></i>
3992 </pre>
3993 <dd> Returns the number of times reordering has occurred in the
3994 manager. The number includes both the calls to Cudd_ReduceHeap from
3995 the application program and those automatically performed by the
3996 package. However, calls that do not even initiate reordering are not
3997 counted. A call may not initiate reordering if there are fewer than
3998 minsize live nodes in the manager, or if CUDD_REORDER_NONE is specified
3999 as reordering method. The calls to Cudd_ShuffleHeap are not counted.
4002 <dd> <b>Side Effects</b> None
4005 <dd> <b>See Also</b> <code><a href="#Cudd_ReduceHeap">Cudd_ReduceHeap</a>
4006 <a href="#Cudd_ReadReorderingTime">Cudd_ReadReorderingTime</a>
4007 </code>
4009 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4011 <dt><pre>
4012 <A NAME="Cudd_ReadSiftMaxSwap"></A>
4013 int <I></I>
4014 <B>Cudd_ReadSiftMaxSwap</B>(
4015 DdManager * <b>dd</b> <i></i>
4017 </pre>
4018 <dd> Reads the siftMaxSwap parameter of the manager. This
4019 parameter gives the maximum number of swaps that will be attempted
4020 for each invocation of sifting. The real number of swaps may exceed
4021 the set limit because the package will always complete the sifting
4022 of the variable that causes the limit to be reached.
4025 <dd> <b>Side Effects</b> None
4028 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSiftMaxVar">Cudd_ReadSiftMaxVar</a>
4029 <a href="#Cudd_SetSiftMaxSwap">Cudd_SetSiftMaxSwap</a>
4030 </code>
4032 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4034 <dt><pre>
4035 <A NAME="Cudd_ReadSiftMaxVar"></A>
4036 int <I></I>
4037 <B>Cudd_ReadSiftMaxVar</B>(
4038 DdManager * <b>dd</b> <i></i>
4040 </pre>
4041 <dd> Reads the siftMaxVar parameter of the manager. This
4042 parameter gives the maximum number of variables that will be sifted
4043 for each invocation of sifting.
4046 <dd> <b>Side Effects</b> None
4049 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSiftMaxSwap">Cudd_ReadSiftMaxSwap</a>
4050 <a href="#Cudd_SetSiftMaxVar">Cudd_SetSiftMaxVar</a>
4051 </code>
4053 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4055 <dt><pre>
4056 <A NAME="Cudd_ReadSize"></A>
4057 int <I></I>
4058 <B>Cudd_ReadSize</B>(
4059 DdManager * <b>dd</b> <i></i>
4061 </pre>
4062 <dd> Returns the number of BDD variables in existance.
4065 <dd> <b>Side Effects</b> None
4068 <dd> <b>See Also</b> <code><a href="#Cudd_ReadZddSize">Cudd_ReadZddSize</a>
4069 </code>
4071 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4073 <dt><pre>
4074 <A NAME="Cudd_ReadSlots"></A>
4075 unsigned int <I></I>
4076 <B>Cudd_ReadSlots</B>(
4077 DdManager * <b>dd</b> <i></i>
4079 </pre>
4080 <dd> Returns the total number of slots of the unique table.
4081 This number ismainly for diagnostic purposes.
4084 <dd> <b>Side Effects</b> None
4087 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4089 <dt><pre>
4090 <A NAME="Cudd_ReadStderr"></A>
4091 FILE * <I></I>
4092 <B>Cudd_ReadStderr</B>(
4093 DdManager * <b>dd</b> <i></i>
4095 </pre>
4096 <dd> Reads the stderr of a manager. This is the file pointer to
4097 which messages normally going to stderr are written. It is initialized
4098 to stderr. Cudd_SetStderr allows the application to redirect it.
4101 <dd> <b>Side Effects</b> None
4104 <dd> <b>See Also</b> <code><a href="#Cudd_SetStderr">Cudd_SetStderr</a>
4105 <a href="#Cudd_ReadStdout">Cudd_ReadStdout</a>
4106 </code>
4108 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4110 <dt><pre>
4111 <A NAME="Cudd_ReadStdout"></A>
4112 FILE * <I></I>
4113 <B>Cudd_ReadStdout</B>(
4114 DdManager * <b>dd</b> <i></i>
4116 </pre>
4117 <dd> Reads the stdout of a manager. This is the file pointer to
4118 which messages normally going to stdout are written. It is initialized
4119 to stdout. Cudd_SetStdout allows the application to redirect it.
4122 <dd> <b>Side Effects</b> None
4125 <dd> <b>See Also</b> <code><a href="#Cudd_SetStdout">Cudd_SetStdout</a>
4126 <a href="#Cudd_ReadStderr">Cudd_ReadStderr</a>
4127 </code>
4129 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4131 <dt><pre>
4132 <A NAME="Cudd_ReadSwapSteps"></A>
4133 double <I></I>
4134 <B>Cudd_ReadSwapSteps</B>(
4135 DdManager * <b>dd</b> <i></i>
4137 </pre>
4138 <dd> Reads the number of elementary reordering steps.
4141 <dd> <b>Side Effects</b> none
4144 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4146 <dt><pre>
4147 <A NAME="Cudd_ReadSymmviolation"></A>
4148 int <I></I>
4149 <B>Cudd_ReadSymmviolation</B>(
4150 DdManager * <b>dd</b> <i></i>
4152 </pre>
4153 <dd> Returns the current value of the symmviolation
4154 parameter. This parameter is used in group sifting to decide how
4155 many violations to the symmetry conditions <code>f10 = f01</code> or
4156 <code>f11 = f00</code> are tolerable when checking for aggregation
4157 due to extended symmetry. The value should be between 0 and 100. A
4158 small value causes fewer variables to be aggregated. The default
4159 value is 0.
4162 <dd> <b>Side Effects</b> None
4165 <dd> <b>See Also</b> <code><a href="#Cudd_SetSymmviolation">Cudd_SetSymmviolation</a>
4166 </code>
4168 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4170 <dt><pre>
4171 <A NAME="Cudd_ReadTree"></A>
4172 MtrNode * <I></I>
4173 <B>Cudd_ReadTree</B>(
4174 DdManager * <b>dd</b> <i></i>
4176 </pre>
4177 <dd> Returns the variable group tree of the manager.
4180 <dd> <b>Side Effects</b> None
4183 <dd> <b>See Also</b> <code><a href="#Cudd_SetTree">Cudd_SetTree</a>
4184 <a href="#Cudd_FreeTree">Cudd_FreeTree</a>
4185 <a href="#Cudd_ReadZddTree">Cudd_ReadZddTree</a>
4186 </code>
4188 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4190 <dt><pre>
4191 <A NAME="Cudd_ReadUniqueLinks"></A>
4192 double <I></I>
4193 <B>Cudd_ReadUniqueLinks</B>(
4194 DdManager * <b>dd</b> <i></i>
4196 </pre>
4197 <dd> Returns the number of links followed during look-ups in the
4198 unique table if the keeping of this statistic is enabled; -1 otherwise.
4199 If an item is found in the first position of its collision list, the
4200 number of links followed is taken to be 0. If it is in second position,
4201 the number of links is 1, and so on. This statistic is enabled only if
4202 the package is compiled with DD_UNIQUE_PROFILE defined.
4205 <dd> <b>Side Effects</b> None
4208 <dd> <b>See Also</b> <code><a href="#Cudd_ReadUniqueLookUps">Cudd_ReadUniqueLookUps</a>
4209 </code>
4211 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4213 <dt><pre>
4214 <A NAME="Cudd_ReadUniqueLookUps"></A>
4215 double <I></I>
4216 <B>Cudd_ReadUniqueLookUps</B>(
4217 DdManager * <b>dd</b> <i></i>
4219 </pre>
4220 <dd> Returns the number of look-ups in the unique table if the
4221 keeping of this statistic is enabled; -1 otherwise. This statistic is
4222 enabled only if the package is compiled with DD_UNIQUE_PROFILE defined.
4225 <dd> <b>Side Effects</b> None
4228 <dd> <b>See Also</b> <code><a href="#Cudd_ReadUniqueLinks">Cudd_ReadUniqueLinks</a>
4229 </code>
4231 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4233 <dt><pre>
4234 <A NAME="Cudd_ReadUsedSlots"></A>
4235 double <I></I>
4236 <B>Cudd_ReadUsedSlots</B>(
4237 DdManager * <b>dd</b> <i></i>
4239 </pre>
4240 <dd> Reads the fraction of used slots in the unique
4241 table. The unused slots are those in which no valid data is
4242 stored. Garbage collection, variable reordering, and subtable
4243 resizing may cause used slots to become unused.
4246 <dd> <b>Side Effects</b> None
4249 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSlots">Cudd_ReadSlots</a>
4250 </code>
4252 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4254 <dt><pre>
4255 <A NAME="Cudd_ReadVars"></A>
4256 DdNode * <I></I>
4257 <B>Cudd_ReadVars</B>(
4258 DdManager * <b>dd</b>, <i></i>
4259 int <b>i</b> <i></i>
4261 </pre>
4262 <dd> Returns the i-th element of the vars array if it falls
4263 within the array bounds; NULL otherwise. If i is the index of an
4264 existing variable, this function produces the same result as
4265 Cudd_bddIthVar. However, if the i-th var does not exist yet,
4266 Cudd_bddIthVar will create it, whereas Cudd_ReadVars will not.
4269 <dd> <b>Side Effects</b> None
4272 <dd> <b>See Also</b> <code><a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
4273 </code>
4275 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4277 <dt><pre>
4278 <A NAME="Cudd_ReadZddOne"></A>
4279 DdNode * <I></I>
4280 <B>Cudd_ReadZddOne</B>(
4281 DdManager * <b>dd</b>, <i></i>
4282 int <b>i</b> <i></i>
4284 </pre>
4285 <dd> Returns the ZDD for the constant 1 function.
4286 The representation of the constant 1 function as a ZDD depends on
4287 how many variables it (nominally) depends on. The index of the
4288 topmost variable in the support is given as argument <code>i</code>.
4291 <dd> <b>Side Effects</b> None
4294 <dd> <b>See Also</b> <code><a href="#Cudd_ReadOne">Cudd_ReadOne</a>
4295 </code>
4297 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4299 <dt><pre>
4300 <A NAME="Cudd_ReadZddSize"></A>
4301 int <I></I>
4302 <B>Cudd_ReadZddSize</B>(
4303 DdManager * <b>dd</b> <i></i>
4305 </pre>
4306 <dd> Returns the number of ZDD variables in existance.
4309 <dd> <b>Side Effects</b> None
4312 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSize">Cudd_ReadSize</a>
4313 </code>
4315 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4317 <dt><pre>
4318 <A NAME="Cudd_ReadZddTree"></A>
4319 MtrNode * <I></I>
4320 <B>Cudd_ReadZddTree</B>(
4321 DdManager * <b>dd</b> <i></i>
4323 </pre>
4324 <dd> Returns the variable group tree of the manager.
4327 <dd> <b>Side Effects</b> None
4330 <dd> <b>See Also</b> <code><a href="#Cudd_SetZddTree">Cudd_SetZddTree</a>
4331 <a href="#Cudd_FreeZddTree">Cudd_FreeZddTree</a>
4332 <a href="#Cudd_ReadTree">Cudd_ReadTree</a>
4333 </code>
4335 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4337 <dt><pre>
4338 <A NAME="Cudd_ReadZero"></A>
4339 DdNode * <I></I>
4340 <B>Cudd_ReadZero</B>(
4341 DdManager * <b>dd</b> <i></i>
4343 </pre>
4344 <dd> Returns the zero constant of the manager. The zero
4345 constant is the arithmetic zero, rather than the logic zero. The
4346 latter is the complement of the one constant.
4349 <dd> <b>Side Effects</b> None
4352 <dd> <b>See Also</b> <code><a href="#Cudd_ReadOne">Cudd_ReadOne</a>
4353 <a href="#Cudd_ReadLogicZero">Cudd_ReadLogicZero</a>
4354 </code>
4356 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4358 <dt><pre>
4359 <A NAME="Cudd_RecursiveDerefZdd"></A>
4360 void <I></I>
4361 <B>Cudd_RecursiveDerefZdd</B>(
4362 DdManager * <b>table</b>, <i></i>
4363 DdNode * <b>n</b> <i></i>
4365 </pre>
4366 <dd> Decreases the reference count of ZDD node n. If n dies,
4367 recursively decreases the reference counts of its children. It is
4368 used to dispose of a ZDD that is no longer needed.
4371 <dd> <b>Side Effects</b> None
4374 <dd> <b>See Also</b> <code><a href="#Cudd_Deref">Cudd_Deref</a>
4375 <a href="#Cudd_Ref">Cudd_Ref</a>
4376 <a href="#Cudd_RecursiveDeref">Cudd_RecursiveDeref</a>
4377 </code>
4379 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
4381 <dt><pre>
4382 <A NAME="Cudd_RecursiveDeref"></A>
4383 void <I></I>
4384 <B>Cudd_RecursiveDeref</B>(
4385 DdManager * <b>table</b>, <i></i>
4386 DdNode * <b>n</b> <i></i>
4388 </pre>
4389 <dd> Decreases the reference count of node n. If n dies,
4390 recursively decreases the reference counts of its children. It is
4391 used to dispose of a DD that is no longer needed.
4394 <dd> <b>Side Effects</b> None
4397 <dd> <b>See Also</b> <code><a href="#Cudd_Deref">Cudd_Deref</a>
4398 <a href="#Cudd_Ref">Cudd_Ref</a>
4399 <a href="#Cudd_RecursiveDerefZdd">Cudd_RecursiveDerefZdd</a>
4400 </code>
4402 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
4404 <dt><pre>
4405 <A NAME="Cudd_ReduceHeap"></A>
4406 int <I></I>
4407 <B>Cudd_ReduceHeap</B>(
4408 DdManager * <b>table</b>, <i>DD manager</i>
4409 Cudd_ReorderingType <b>heuristic</b>, <i>method used for reordering</i>
4410 int <b>minsize</b> <i>bound below which no reordering occurs</i>
4412 </pre>
4413 <dd> Main dynamic reordering routine.
4414 Calls one of the possible reordering procedures:
4415 <ul>
4416 <li>Swapping
4417 <li>Sifting
4418 <li>Symmetric Sifting
4419 <li>Group Sifting
4420 <li>Window Permutation
4421 <li>Simulated Annealing
4422 <li>Genetic Algorithm
4423 <li>Dynamic Programming (exact)
4424 </ul>
4426 For sifting, symmetric sifting, group sifting, and window
4427 permutation it is possible to request reordering to convergence.<p>
4429 The core of all methods is the reordering procedure
4430 cuddSwapInPlace() which swaps two adjacent variables and is based
4431 on Rudell's paper.
4432 Returns 1 in case of success; 0 otherwise. In the case of symmetric
4433 sifting (with and without convergence) returns 1 plus the number of
4434 symmetric variables, in case of success.
4437 <dd> <b>Side Effects</b> Changes the variable order for all diagrams and clears
4438 the cache.
4441 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
4443 <dt><pre>
4444 <A NAME="Cudd_Ref"></A>
4445 void <I></I>
4446 <B>Cudd_Ref</B>(
4447 DdNode * <b>n</b> <i></i>
4449 </pre>
4450 <dd> Increases the reference count of a node, if it is not
4451 saturated.
4454 <dd> <b>Side Effects</b> None
4457 <dd> <b>See Also</b> <code><a href="#Cudd_RecursiveDeref">Cudd_RecursiveDeref</a>
4458 <a href="#Cudd_Deref">Cudd_Deref</a>
4459 </code>
4461 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
4463 <dt><pre>
4464 <A NAME="Cudd_RemapOverApprox"></A>
4465 DdNode * <I></I>
4466 <B>Cudd_RemapOverApprox</B>(
4467 DdManager * <b>dd</b>, <i>manager</i>
4468 DdNode * <b>f</b>, <i>function to be superset</i>
4469 int <b>numVars</b>, <i>number of variables in the support of f</i>
4470 int <b>threshold</b>, <i>when to stop approximation</i>
4471 double <b>quality</b> <i>minimum improvement for accepted changes</i>
4473 </pre>
4474 <dd> Extracts a dense superset from a BDD. The procedure is
4475 identical to the underapproximation procedure except for the fact that it
4476 works on the complement of the given function. Extracting the subset
4477 of the complement function is equivalent to extracting the superset
4478 of the function.
4479 Returns a pointer to the BDD of the superset if successful. NULL if
4480 intermediate result causes the procedure to run out of memory. The
4481 parameter numVars is the maximum number of variables to be used in
4482 minterm calculation. The optimal number
4483 should be as close as possible to the size of the support of f.
4484 However, it is safe to pass the value returned by Cudd_ReadSize for
4485 numVars when the number of variables is under 1023. If numVars is
4486 larger than 1023, it will overflow. If a 0 parameter is passed then
4487 the procedure will compute a value which will avoid overflow but
4488 will cause underflow with 2046 variables or more.
4491 <dd> <b>Side Effects</b> None
4494 <dd> <b>See Also</b> <code><a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
4495 <a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
4496 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
4497 </code>
4499 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
4501 <dt><pre>
4502 <A NAME="Cudd_RemapUnderApprox"></A>
4503 DdNode * <I></I>
4504 <B>Cudd_RemapUnderApprox</B>(
4505 DdManager * <b>dd</b>, <i>manager</i>
4506 DdNode * <b>f</b>, <i>function to be subset</i>
4507 int <b>numVars</b>, <i>number of variables in the support of f</i>
4508 int <b>threshold</b>, <i>when to stop approximation</i>
4509 double <b>quality</b> <i>minimum improvement for accepted changes</i>
4511 </pre>
4512 <dd> Extracts a dense subset from a BDD. This procedure uses
4513 a remapping technique and density as the cost function.
4514 Returns a pointer to the BDD of the subset if
4515 successful. NULL if the procedure runs out of memory. The parameter
4516 numVars is the maximum number of variables to be used in minterm
4517 calculation. The optimal number should be as close as possible to
4518 the size of the support of f. However, it is safe to pass the value
4519 returned by Cudd_ReadSize for numVars when the number of variables
4520 is under 1023. If numVars is larger than 1023, it will cause
4521 overflow. If a 0 parameter is passed then the procedure will compute
4522 a value which will avoid overflow but will cause underflow with 2046
4523 variables or more.
4526 <dd> <b>Side Effects</b> None
4529 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
4530 <a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
4531 <a href="#Cudd_UnderApprox">Cudd_UnderApprox</a>
4532 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
4533 </code>
4535 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
4537 <dt><pre>
4538 <A NAME="Cudd_RemoveHook"></A>
4539 int <I></I>
4540 <B>Cudd_RemoveHook</B>(
4541 DdManager * <b>dd</b>, <i></i>
4542 DD_HFP <b>f</b>, <i></i>
4543 Cudd_HookType <b>where</b> <i></i>
4545 </pre>
4546 <dd> Removes a function from a hook. A hook is a list of
4547 application-provided functions called on certain occasions by the
4548 package. Returns 1 if successful; 0 the function was not in the list.
4551 <dd> <b>Side Effects</b> None
4554 <dd> <b>See Also</b> <code><a href="#Cudd_AddHook">Cudd_AddHook</a>
4555 </code>
4557 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4559 <dt><pre>
4560 <A NAME="Cudd_ReorderingReporting"></A>
4561 int <I></I>
4562 <B>Cudd_ReorderingReporting</B>(
4563 DdManager * <b>dd</b> <i></i>
4565 </pre>
4566 <dd> Returns 1 if reporting of reordering stats is enabled;
4567 0 otherwise.
4570 <dd> <b>Side Effects</b> none
4573 <dd> <b>See Also</b> <code><a href="#Cudd_EnableReorderingReporting">Cudd_EnableReorderingReporting</a>
4574 <a href="#Cudd_DisableReorderingReporting">Cudd_DisableReorderingReporting</a>
4575 </code>
4577 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4579 <dt><pre>
4580 <A NAME="Cudd_ReorderingStatusZdd"></A>
4581 int <I></I>
4582 <B>Cudd_ReorderingStatusZdd</B>(
4583 DdManager * <b>unique</b>, <i></i>
4584 Cudd_ReorderingType * <b>method</b> <i></i>
4586 </pre>
4587 <dd> Reports the status of automatic dynamic reordering of
4588 ZDDs. Parameter method is set to the ZDD reordering method currently
4589 selected. Returns 1 if automatic reordering is enabled; 0
4590 otherwise.
4593 <dd> <b>Side Effects</b> Parameter method is set to the ZDD reordering method currently
4594 selected.
4597 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynEnableZdd">Cudd_AutodynEnableZdd</a>
4598 <a href="#Cudd_AutodynDisableZdd">Cudd_AutodynDisableZdd</a>
4599 <a href="#Cudd_ReorderingStatus">Cudd_ReorderingStatus</a>
4600 </code>
4602 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4604 <dt><pre>
4605 <A NAME="Cudd_ReorderingStatus"></A>
4606 int <I></I>
4607 <B>Cudd_ReorderingStatus</B>(
4608 DdManager * <b>unique</b>, <i></i>
4609 Cudd_ReorderingType * <b>method</b> <i></i>
4611 </pre>
4612 <dd> Reports the status of automatic dynamic reordering of
4613 BDDs and ADDs. Parameter method is set to the reordering method
4614 currently selected. Returns 1 if automatic reordering is enabled; 0
4615 otherwise.
4618 <dd> <b>Side Effects</b> Parameter method is set to the reordering method currently
4619 selected.
4622 <dd> <b>See Also</b> <code><a href="#Cudd_AutodynEnable">Cudd_AutodynEnable</a>
4623 <a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
4624 <a href="#Cudd_ReorderingStatusZdd">Cudd_ReorderingStatusZdd</a>
4625 </code>
4627 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4629 <dt><pre>
4630 <A NAME="Cudd_SetArcviolation"></A>
4631 void <I></I>
4632 <B>Cudd_SetArcviolation</B>(
4633 DdManager * <b>dd</b>, <i></i>
4634 int <b>arcviolation</b> <i></i>
4636 </pre>
4637 <dd> Sets the value of the arcviolation
4638 parameter. This parameter is used in group sifting to decide how
4639 many arcs into <code>y</code> not coming from <code>x</code> are
4640 tolerable when checking for aggregation due to extended
4641 symmetry. The value should be between 0 and 100. A small value
4642 causes fewer variables to be aggregated. The default value is 0.
4645 <dd> <b>Side Effects</b> None
4648 <dd> <b>See Also</b> <code><a href="#Cudd_ReadArcviolation">Cudd_ReadArcviolation</a>
4649 </code>
4651 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4653 <dt><pre>
4654 <A NAME="Cudd_SetBackground"></A>
4655 void <I></I>
4656 <B>Cudd_SetBackground</B>(
4657 DdManager * <b>dd</b>, <i></i>
4658 DdNode * <b>bck</b> <i></i>
4660 </pre>
4661 <dd> Sets the background constant of the manager. It assumes
4662 that the DdNode pointer bck is already referenced.
4665 <dd> <b>Side Effects</b> None
4668 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4670 <dt><pre>
4671 <A NAME="Cudd_SetEpsilon"></A>
4672 void <I></I>
4673 <B>Cudd_SetEpsilon</B>(
4674 DdManager * <b>dd</b>, <i></i>
4675 CUDD_VALUE_TYPE <b>ep</b> <i></i>
4677 </pre>
4678 <dd> Sets the epsilon parameter of the manager to ep. The epsilon
4679 parameter control the comparison between floating point numbers.
4682 <dd> <b>Side Effects</b> None
4685 <dd> <b>See Also</b> <code><a href="#Cudd_ReadEpsilon">Cudd_ReadEpsilon</a>
4686 </code>
4688 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4690 <dt><pre>
4691 <A NAME="Cudd_SetGroupcheck"></A>
4692 void <I></I>
4693 <B>Cudd_SetGroupcheck</B>(
4694 DdManager * <b>dd</b>, <i></i>
4695 Cudd_AggregationType <b>gc</b> <i></i>
4697 </pre>
4698 <dd> Sets the parameter groupcheck of the manager to gc. The
4699 groupcheck parameter determines the aggregation criterion in group
4700 sifting.
4703 <dd> <b>Side Effects</b> None
4706 <dd> <b>See Also</b> <code><a href="#Cudd_ReadGroupCheck">Cudd_ReadGroupCheck</a>
4707 </code>
4709 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4711 <dt><pre>
4712 <A NAME="Cudd_SetLooseUpTo"></A>
4713 void <I></I>
4714 <B>Cudd_SetLooseUpTo</B>(
4715 DdManager * <b>dd</b>, <i></i>
4716 unsigned int <b>lut</b> <i></i>
4718 </pre>
4719 <dd> Sets the looseUpTo parameter of the manager. This
4720 parameter of the manager controls the threshold beyond which no fast
4721 growth of the unique table is allowed. The threshold is given as a
4722 number of slots. If the value passed to this function is 0, the
4723 function determines a suitable value based on the available memory.
4726 <dd> <b>Side Effects</b> None
4729 <dd> <b>See Also</b> <code><a href="#Cudd_ReadLooseUpTo">Cudd_ReadLooseUpTo</a>
4730 <a href="#Cudd_SetMinHit">Cudd_SetMinHit</a>
4731 </code>
4733 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4735 <dt><pre>
4736 <A NAME="Cudd_SetMaxCacheHard"></A>
4737 void <I></I>
4738 <B>Cudd_SetMaxCacheHard</B>(
4739 DdManager * <b>dd</b>, <i></i>
4740 unsigned int <b>mc</b> <i></i>
4742 </pre>
4743 <dd> Sets the maxCacheHard parameter of the manager. The
4744 cache cannot grow larger than maxCacheHard entries. This parameter
4745 allows an application to control the trade-off of memory versus
4746 speed. If the value passed to this function is 0, the function
4747 determines a suitable maximum cache size based on the available memory.
4750 <dd> <b>Side Effects</b> None
4753 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxCacheHard">Cudd_ReadMaxCacheHard</a>
4754 <a href="#Cudd_SetMaxCache">Cudd_SetMaxCache</a>
4755 </code>
4757 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4759 <dt><pre>
4760 <A NAME="Cudd_SetMaxGrowthAlternate"></A>
4761 void <I></I>
4762 <B>Cudd_SetMaxGrowthAlternate</B>(
4763 DdManager * <b>dd</b>, <i></i>
4764 double <b>mg</b> <i></i>
4766 </pre>
4767 <dd> Sets the maxGrowthAlt parameter of the manager. This
4768 parameter is analogous to the maxGrowth paramter, and is used every
4769 given number of reorderings instead of maxGrowth. The number of
4770 reorderings is set with Cudd_SetReorderingCycle. If the number of
4771 reorderings is 0 (default) maxGrowthAlt is never used.
4774 <dd> <b>Side Effects</b> None
4777 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxGrowthAlternate">Cudd_ReadMaxGrowthAlternate</a>
4778 <a href="#Cudd_SetMaxGrowth">Cudd_SetMaxGrowth</a>
4779 <a href="#Cudd_SetReorderingCycle">Cudd_SetReorderingCycle</a>
4780 <a href="#Cudd_ReadReorderingCycle">Cudd_ReadReorderingCycle</a>
4781 </code>
4783 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4785 <dt><pre>
4786 <A NAME="Cudd_SetMaxGrowth"></A>
4787 void <I></I>
4788 <B>Cudd_SetMaxGrowth</B>(
4789 DdManager * <b>dd</b>, <i></i>
4790 double <b>mg</b> <i></i>
4792 </pre>
4793 <dd> Sets the maxGrowth parameter of the manager. This
4794 parameter determines how much the number of nodes can grow during
4795 sifting of a variable. Overall, sifting never increases the size of
4796 the decision diagrams. This parameter only refers to intermediate
4797 results. A lower value will speed up sifting, possibly at the
4798 expense of quality.
4801 <dd> <b>Side Effects</b> None
4804 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxGrowth">Cudd_ReadMaxGrowth</a>
4805 <a href="#Cudd_SetMaxGrowthAlternate">Cudd_SetMaxGrowthAlternate</a>
4806 </code>
4808 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4810 <dt><pre>
4811 <A NAME="Cudd_SetMaxLive"></A>
4812 void <I></I>
4813 <B>Cudd_SetMaxLive</B>(
4814 DdManager * <b>dd</b>, <i></i>
4815 unsigned int <b>maxLive</b> <i></i>
4817 </pre>
4818 <dd> Sets the maximum allowed number of live nodes. When this
4819 number is exceeded, the package returns NULL.
4822 <dd> <b>Side Effects</b> none
4825 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxLive">Cudd_ReadMaxLive</a>
4826 </code>
4828 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4830 <dt><pre>
4831 <A NAME="Cudd_SetMaxMemory"></A>
4832 void <I></I>
4833 <B>Cudd_SetMaxMemory</B>(
4834 DdManager * <b>dd</b>, <i></i>
4835 unsigned long <b>maxMemory</b> <i></i>
4837 </pre>
4838 <dd> Sets the maximum allowed memory. When this
4839 number is exceeded, the package returns NULL.
4842 <dd> <b>Side Effects</b> none
4845 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxMemory">Cudd_ReadMaxMemory</a>
4846 </code>
4848 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4850 <dt><pre>
4851 <A NAME="Cudd_SetMinHit"></A>
4852 void <I></I>
4853 <B>Cudd_SetMinHit</B>(
4854 DdManager * <b>dd</b>, <i></i>
4855 unsigned int <b>hr</b> <i></i>
4857 </pre>
4858 <dd> Sets the minHit parameter of the manager. This
4859 parameter controls the resizing of the computed table. If the hit
4860 rate is larger than the specified value, and the cache is not
4861 already too large, then its size is doubled.
4864 <dd> <b>Side Effects</b> None
4867 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMinHit">Cudd_ReadMinHit</a>
4868 </code>
4870 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4872 <dt><pre>
4873 <A NAME="Cudd_SetNextReordering"></A>
4874 void <I></I>
4875 <B>Cudd_SetNextReordering</B>(
4876 DdManager * <b>dd</b>, <i></i>
4877 unsigned int <b>next</b> <i></i>
4879 </pre>
4880 <dd> Sets the threshold for the next dynamic reordering.
4881 The threshold is in terms of number of nodes and is in effect only
4882 if reordering is enabled. The count does not include the dead nodes,
4883 unless the countDead parameter of the manager has been changed from
4884 its default setting.
4887 <dd> <b>Side Effects</b> None
4890 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNextReordering">Cudd_ReadNextReordering</a>
4891 </code>
4893 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4895 <dt><pre>
4896 <A NAME="Cudd_SetNumberXovers"></A>
4897 void <I></I>
4898 <B>Cudd_SetNumberXovers</B>(
4899 DdManager * <b>dd</b>, <i></i>
4900 int <b>numberXovers</b> <i></i>
4902 </pre>
4903 <dd> Sets the number of crossovers used by the genetic
4904 algorithm for variable reordering. A larger number of crossovers
4905 will cause the genetic algorithm to take more time, but will
4906 generally produce better results. The default value is 0, in which
4907 case the package uses three times the number of variables as number
4908 of crossovers, with a maximum of 60.
4911 <dd> <b>Side Effects</b> None
4914 <dd> <b>See Also</b> <code><a href="#Cudd_ReadNumberXovers">Cudd_ReadNumberXovers</a>
4915 </code>
4917 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4919 <dt><pre>
4920 <A NAME="Cudd_SetPopulationSize"></A>
4921 void <I></I>
4922 <B>Cudd_SetPopulationSize</B>(
4923 DdManager * <b>dd</b>, <i></i>
4924 int <b>populationSize</b> <i></i>
4926 </pre>
4927 <dd> Sets the size of the population used by the
4928 genetic algorithm for variable reordering. A larger population size will
4929 cause the genetic algorithm to take more time, but will generally
4930 produce better results. The default value is 0, in which case the
4931 package uses three times the number of variables as population size,
4932 with a maximum of 120.
4935 <dd> <b>Side Effects</b> Changes the manager.
4938 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPopulationSize">Cudd_ReadPopulationSize</a>
4939 </code>
4941 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4943 <dt><pre>
4944 <A NAME="Cudd_SetRecomb"></A>
4945 void <I></I>
4946 <B>Cudd_SetRecomb</B>(
4947 DdManager * <b>dd</b>, <i></i>
4948 int <b>recomb</b> <i></i>
4950 </pre>
4951 <dd> Sets the value of the recombination parameter used in
4952 group sifting. A larger (positive) value makes the aggregation of
4953 variables due to the second difference criterion more likely. A
4954 smaller (negative) value makes aggregation less likely. The default
4955 value is 0.
4958 <dd> <b>Side Effects</b> Changes the manager.
4961 <dd> <b>See Also</b> <code><a href="#Cudd_ReadRecomb">Cudd_ReadRecomb</a>
4962 </code>
4964 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4966 <dt><pre>
4967 <A NAME="Cudd_SetReorderingCycle"></A>
4968 void <I></I>
4969 <B>Cudd_SetReorderingCycle</B>(
4970 DdManager * <b>dd</b>, <i></i>
4971 int <b>cycle</b> <i></i>
4973 </pre>
4974 <dd> Sets the reordCycle parameter of the manager. This
4975 parameter determines how often the alternate threshold on maximum
4976 growth is used in reordering.
4979 <dd> <b>Side Effects</b> None
4982 <dd> <b>See Also</b> <code><a href="#Cudd_ReadMaxGrowthAlternate">Cudd_ReadMaxGrowthAlternate</a>
4983 <a href="#Cudd_SetMaxGrowthAlternate">Cudd_SetMaxGrowthAlternate</a>
4984 <a href="#Cudd_ReadReorderingCycle">Cudd_ReadReorderingCycle</a>
4985 </code>
4987 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
4989 <dt><pre>
4990 <A NAME="Cudd_SetSiftMaxSwap"></A>
4991 void <I></I>
4992 <B>Cudd_SetSiftMaxSwap</B>(
4993 DdManager * <b>dd</b>, <i></i>
4994 int <b>sms</b> <i></i>
4996 </pre>
4997 <dd> Sets the siftMaxSwap parameter of the manager. This
4998 parameter gives the maximum number of swaps that will be attempted
4999 for each invocation of sifting. The real number of swaps may exceed
5000 the set limit because the package will always complete the sifting
5001 of the variable that causes the limit to be reached.
5004 <dd> <b>Side Effects</b> None
5007 <dd> <b>See Also</b> <code><a href="#Cudd_SetSiftMaxVar">Cudd_SetSiftMaxVar</a>
5008 <a href="#Cudd_ReadSiftMaxSwap">Cudd_ReadSiftMaxSwap</a>
5009 </code>
5011 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5013 <dt><pre>
5014 <A NAME="Cudd_SetSiftMaxVar"></A>
5015 void <I></I>
5016 <B>Cudd_SetSiftMaxVar</B>(
5017 DdManager * <b>dd</b>, <i></i>
5018 int <b>smv</b> <i></i>
5020 </pre>
5021 <dd> Sets the siftMaxVar parameter of the manager. This
5022 parameter gives the maximum number of variables that will be sifted
5023 for each invocation of sifting.
5026 <dd> <b>Side Effects</b> None
5029 <dd> <b>See Also</b> <code><a href="#Cudd_SetSiftMaxSwap">Cudd_SetSiftMaxSwap</a>
5030 <a href="#Cudd_ReadSiftMaxVar">Cudd_ReadSiftMaxVar</a>
5031 </code>
5033 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5035 <dt><pre>
5036 <A NAME="Cudd_SetStderr"></A>
5037 void <I></I>
5038 <B>Cudd_SetStderr</B>(
5039 DdManager * <b>dd</b>, <i></i>
5040 FILE * <b>fp</b> <i></i>
5042 </pre>
5043 <dd> Sets the stderr of a manager.
5046 <dd> <b>Side Effects</b> None
5049 <dd> <b>See Also</b> <code><a href="#Cudd_ReadStderr">Cudd_ReadStderr</a>
5050 <a href="#Cudd_SetStdout">Cudd_SetStdout</a>
5051 </code>
5053 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5055 <dt><pre>
5056 <A NAME="Cudd_SetStdout"></A>
5057 void <I></I>
5058 <B>Cudd_SetStdout</B>(
5059 DdManager * <b>dd</b>, <i></i>
5060 FILE * <b>fp</b> <i></i>
5062 </pre>
5063 <dd> Sets the stdout of a manager.
5066 <dd> <b>Side Effects</b> None
5069 <dd> <b>See Also</b> <code><a href="#Cudd_ReadStdout">Cudd_ReadStdout</a>
5070 <a href="#Cudd_SetStderr">Cudd_SetStderr</a>
5071 </code>
5073 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5075 <dt><pre>
5076 <A NAME="Cudd_SetSymmviolation"></A>
5077 void <I></I>
5078 <B>Cudd_SetSymmviolation</B>(
5079 DdManager * <b>dd</b>, <i></i>
5080 int <b>symmviolation</b> <i></i>
5082 </pre>
5083 <dd> Sets the value of the symmviolation
5084 parameter. This parameter is used in group sifting to decide how
5085 many violations to the symmetry conditions <code>f10 = f01</code> or
5086 <code>f11 = f00</code> are tolerable when checking for aggregation
5087 due to extended symmetry. The value should be between 0 and 100. A
5088 small value causes fewer variables to be aggregated. The default
5089 value is 0.
5092 <dd> <b>Side Effects</b> Changes the manager.
5095 <dd> <b>See Also</b> <code><a href="#Cudd_ReadSymmviolation">Cudd_ReadSymmviolation</a>
5096 </code>
5098 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5100 <dt><pre>
5101 <A NAME="Cudd_SetTree"></A>
5102 void <I></I>
5103 <B>Cudd_SetTree</B>(
5104 DdManager * <b>dd</b>, <i></i>
5105 MtrNode * <b>tree</b> <i></i>
5107 </pre>
5108 <dd> Sets the variable group tree of the manager.
5111 <dd> <b>Side Effects</b> None
5114 <dd> <b>See Also</b> <code><a href="#Cudd_FreeTree">Cudd_FreeTree</a>
5115 <a href="#Cudd_ReadTree">Cudd_ReadTree</a>
5116 <a href="#Cudd_SetZddTree">Cudd_SetZddTree</a>
5117 </code>
5119 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5121 <dt><pre>
5122 <A NAME="Cudd_SetVarMap"></A>
5123 int <I></I>
5124 <B>Cudd_SetVarMap</B>(
5125 DdManager * <b>manager</b>, <i>DD manager</i>
5126 DdNode ** <b>x</b>, <i>first array of variables</i>
5127 DdNode ** <b>y</b>, <i>second array of variables</i>
5128 int <b>n</b> <i>length of both arrays</i>
5130 </pre>
5131 <dd> Registers with the manager a variable mapping described
5132 by two sets of variables. This variable mapping is then used by
5133 functions like Cudd_bddVarMap. This function is convenient for
5134 those applications that perform the same mapping several times.
5135 However, if several different permutations are used, it may be more
5136 efficient not to rely on the registered mapping, because changing
5137 mapping causes the cache to be cleared. (The initial setting,
5138 however, does not clear the cache.) The two sets of variables (x and
5139 y) must have the same size (x and y). The size is given by n. The
5140 two sets of variables are normally disjoint, but this restriction is
5141 not imposeded by the function. When new variables are created, the
5142 map is automatically extended (each new variable maps to
5143 itself). The typical use, however, is to wait until all variables
5144 are created, and then create the map. Returns 1 if the mapping is
5145 successfully registered with the manager; 0 otherwise.
5148 <dd> <b>Side Effects</b> Modifies the manager. May clear the cache.
5151 <dd> <b>See Also</b> <code><a href="#Cudd_bddVarMap">Cudd_bddVarMap</a>
5152 <a href="#Cudd_bddPermute">Cudd_bddPermute</a>
5153 <a href="#Cudd_bddSwapVariables">Cudd_bddSwapVariables</a>
5154 </code>
5156 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
5158 <dt><pre>
5159 <A NAME="Cudd_SetZddTree"></A>
5160 void <I></I>
5161 <B>Cudd_SetZddTree</B>(
5162 DdManager * <b>dd</b>, <i></i>
5163 MtrNode * <b>tree</b> <i></i>
5165 </pre>
5166 <dd> Sets the ZDD variable group tree of the manager.
5169 <dd> <b>Side Effects</b> None
5172 <dd> <b>See Also</b> <code><a href="#Cudd_FreeZddTree">Cudd_FreeZddTree</a>
5173 <a href="#Cudd_ReadZddTree">Cudd_ReadZddTree</a>
5174 <a href="#Cudd_SetTree">Cudd_SetTree</a>
5175 </code>
5177 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5179 <dt><pre>
5180 <A NAME="Cudd_SharingSize"></A>
5181 int <I></I>
5182 <B>Cudd_SharingSize</B>(
5183 DdNode ** <b>nodeArray</b>, <i></i>
5184 int <b>n</b> <i></i>
5186 </pre>
5187 <dd> Counts the number of nodes in an array of DDs. Shared
5188 nodes are counted only once. Returns the total number of nodes.
5191 <dd> <b>Side Effects</b> None
5194 <dd> <b>See Also</b> <code><a href="#Cudd_DagSize">Cudd_DagSize</a>
5195 </code>
5197 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5199 <dt><pre>
5200 <A NAME="Cudd_ShortestLength"></A>
5201 int <I></I>
5202 <B>Cudd_ShortestLength</B>(
5203 DdManager * <b>manager</b>, <i></i>
5204 DdNode * <b>f</b>, <i></i>
5205 int * <b>weight</b> <i></i>
5207 </pre>
5208 <dd> Find the length of the shortest path(s) in a DD. f is
5209 the DD we want to get the shortest path for; weight[i] is the
5210 weight of the THEN edge coming from the node whose index is i. All
5211 ELSE edges have 0 weight. Returns the length of the shortest
5212 path(s) if such a path is found; a large number if the function is
5213 identically 0, and CUDD_OUT_OF_MEM in case of failure.
5216 <dd> <b>Side Effects</b> None
5219 <dd> <b>See Also</b> <code><a href="#Cudd_ShortestPath">Cudd_ShortestPath</a>
5220 </code>
5222 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
5224 <dt><pre>
5225 <A NAME="Cudd_ShortestPath"></A>
5226 DdNode * <I></I>
5227 <B>Cudd_ShortestPath</B>(
5228 DdManager * <b>manager</b>, <i></i>
5229 DdNode * <b>f</b>, <i></i>
5230 int * <b>weight</b>, <i></i>
5231 int * <b>support</b>, <i></i>
5232 int * <b>length</b> <i></i>
5234 </pre>
5235 <dd> Finds a shortest path in a DD. f is the DD we want to
5236 get the shortest path for; weight[i] is the weight of the THEN arc
5237 coming from the node whose index is i. If weight is NULL, then unit
5238 weights are assumed for all THEN arcs. All ELSE arcs have 0 weight.
5239 If non-NULL, both weight and support should point to arrays with at
5240 least as many entries as there are variables in the manager.
5241 Returns the shortest path as the BDD of a cube.
5244 <dd> <b>Side Effects</b> support contains on return the true support of f.
5245 If support is NULL on entry, then Cudd_ShortestPath does not compute
5246 the true support info. length contains the length of the path.
5249 <dd> <b>See Also</b> <code><a href="#Cudd_ShortestLength">Cudd_ShortestLength</a>
5250 <a href="#Cudd_LargestCube">Cudd_LargestCube</a>
5251 </code>
5253 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
5255 <dt><pre>
5256 <A NAME="Cudd_ShuffleHeap"></A>
5257 int <I></I>
5258 <B>Cudd_ShuffleHeap</B>(
5259 DdManager * <b>table</b>, <i>DD manager</i>
5260 int * <b>permutation</b> <i>required variable permutation</i>
5262 </pre>
5263 <dd> Reorders variables according to given permutation.
5264 The i-th entry of the permutation array contains the index of the variable
5265 that should be brought to the i-th level. The size of the array should be
5266 equal or greater to the number of variables currently in use.
5267 Returns 1 in case of success; 0 otherwise.
5270 <dd> <b>Side Effects</b> Changes the variable order for all diagrams and clears
5271 the cache.
5274 <dd> <b>See Also</b> <code><a href="#Cudd_ReduceHeap">Cudd_ReduceHeap</a>
5275 </code>
5277 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
5279 <dt><pre>
5280 <A NAME="Cudd_SolveEqn"></A>
5281 DdNode * <I></I>
5282 <B>Cudd_SolveEqn</B>(
5283 DdManager * <b>bdd</b>, <i></i>
5284 DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
5285 DdNode * <b>Y</b>, <i>the cube of the y variables</i>
5286 DdNode ** <b>G</b>, <i>the array of solutions (return parameter)</i>
5287 int ** <b>yIndex</b>, <i>index of y variables</i>
5288 int <b>n</b> <i>numbers of unknowns</i>
5290 </pre>
5291 <dd> Implements the solution for F(x,y) = 0. The return
5292 value is the consistency condition. The y variables are the unknowns
5293 and the remaining variables are the parameters. Returns the
5294 consistency condition if successful; NULL otherwise. Cudd_SolveEqn
5295 allocates an array and fills it with the indices of the
5296 unknowns. This array is used by Cudd_VerifySol.
5299 <dd> <b>Side Effects</b> The solution is returned in G; the indices of the y
5300 variables are returned in yIndex.
5303 <dd> <b>See Also</b> <code><a href="#Cudd_VerifySol">Cudd_VerifySol</a>
5304 </code>
5306 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>
5308 <dt><pre>
5309 <A NAME="Cudd_SplitSet"></A>
5310 DdNode * <I></I>
5311 <B>Cudd_SplitSet</B>(
5312 DdManager * <b>manager</b>, <i></i>
5313 DdNode * <b>S</b>, <i></i>
5314 DdNode ** <b>xVars</b>, <i></i>
5315 int <b>n</b>, <i></i>
5316 double <b>m</b> <i></i>
5318 </pre>
5319 <dd> Returns <code>m</code> minterms from a BDD whose
5320 support has <code>n</code> variables at most. The procedure tries
5321 to create as few extra nodes as possible. The function represented
5322 by <code>S</code> depends on at most <code>n</code> of the variables
5323 in <code>xVars</code>. Returns a BDD with <code>m</code> minterms
5324 of the on-set of S if successful; NULL otherwise.
5327 <dd> <b>Side Effects</b> None
5330 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>
5332 <dt><pre>
5333 <A NAME="Cudd_Srandom"></A>
5334 void <I></I>
5335 <B>Cudd_Srandom</B>(
5336 long <b>seed</b> <i></i>
5338 </pre>
5339 <dd> Initializer for the portable number generator based on
5340 ran2 in "Numerical Recipes in C." The input is the seed for the
5341 generator. If it is negative, its absolute value is taken as seed.
5342 If it is 0, then 1 is taken as seed. The initialized sets up the two
5343 recurrences used to generate a long-period stream, and sets up the
5344 shuffle table.
5347 <dd> <b>Side Effects</b> None
5350 <dd> <b>See Also</b> <code><a href="#Cudd_Random">Cudd_Random</a>
5351 </code>
5353 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5355 <dt><pre>
5356 <A NAME="Cudd_StdPostReordHook"></A>
5357 int <I></I>
5358 <B>Cudd_StdPostReordHook</B>(
5359 DdManager * <b>dd</b>, <i></i>
5360 const char * <b>str</b>, <i></i>
5361 void * <b>data</b> <i></i>
5363 </pre>
5364 <dd> Sample hook function to call after reordering.
5365 Prints on the manager's stdout final size and reordering time.
5366 Returns 1 if successful; 0 otherwise.
5369 <dd> <b>Side Effects</b> None
5372 <dd> <b>See Also</b> <code><a href="#Cudd_StdPreReordHook">Cudd_StdPreReordHook</a>
5373 </code>
5375 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5377 <dt><pre>
5378 <A NAME="Cudd_StdPreReordHook"></A>
5379 int <I></I>
5380 <B>Cudd_StdPreReordHook</B>(
5381 DdManager * <b>dd</b>, <i></i>
5382 const char * <b>str</b>, <i></i>
5383 void * <b>data</b> <i></i>
5385 </pre>
5386 <dd> Sample hook function to call before reordering.
5387 Prints on the manager's stdout reordering method and initial size.
5388 Returns 1 if successful; 0 otherwise.
5391 <dd> <b>Side Effects</b> None
5394 <dd> <b>See Also</b> <code><a href="#Cudd_StdPostReordHook">Cudd_StdPostReordHook</a>
5395 </code>
5397 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5399 <dt><pre>
5400 <A NAME="Cudd_SubsetCompress"></A>
5401 DdNode * <I></I>
5402 <B>Cudd_SubsetCompress</B>(
5403 DdManager * <b>dd</b>, <i>manager</i>
5404 DdNode * <b>f</b>, <i>BDD whose subset is sought</i>
5405 int <b>nvars</b>, <i>number of variables in the support of f</i>
5406 int <b>threshold</b> <i>maximum number of nodes in the subset</i>
5408 </pre>
5409 <dd> Finds a dense subset of BDD <code>f</code>. Density is
5410 the ratio of number of minterms to number of nodes. Uses several
5411 techniques in series. It is more expensive than other subsetting
5412 procedures, but often produces better results. See
5413 Cudd_SubsetShortPaths for a description of the threshold and nvars
5414 parameters. Returns a pointer to the result if successful; NULL
5415 otherwise.
5418 <dd> <b>Side Effects</b> None
5421 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetRemap">Cudd_SubsetRemap</a>
5422 <a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
5423 <a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
5424 <a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
5425 </code>
5427 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
5429 <dt><pre>
5430 <A NAME="Cudd_SubsetHeavyBranch"></A>
5431 DdNode * <I></I>
5432 <B>Cudd_SubsetHeavyBranch</B>(
5433 DdManager * <b>dd</b>, <i>manager</i>
5434 DdNode * <b>f</b>, <i>function to be subset</i>
5435 int <b>numVars</b>, <i>number of variables in the support of f</i>
5436 int <b>threshold</b> <i>maximum number of nodes in the subset</i>
5438 </pre>
5439 <dd> Extracts a dense subset from a BDD. This procedure
5440 builds a subset by throwing away one of the children of each node,
5441 starting from the root, until the result is small enough. The child
5442 that is eliminated from the result is the one that contributes the
5443 fewer minterms. Returns a pointer to the BDD of the subset if
5444 successful. NULL if the procedure runs out of memory. The parameter
5445 numVars is the maximum number of variables to be used in minterm
5446 calculation and node count calculation. The optimal number should
5447 be as close as possible to the size of the support of f. However,
5448 it is safe to pass the value returned by Cudd_ReadSize for numVars
5449 when the number of variables is under 1023. If numVars is larger
5450 than 1023, it will overflow. If a 0 parameter is passed then the
5451 procedure will compute a value which will avoid overflow but will
5452 cause underflow with 2046 variables or more.
5455 <dd> <b>Side Effects</b> None
5458 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
5459 <a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
5460 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
5461 </code>
5463 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
5465 <dt><pre>
5466 <A NAME="Cudd_SubsetShortPaths"></A>
5467 DdNode * <I></I>
5468 <B>Cudd_SubsetShortPaths</B>(
5469 DdManager * <b>dd</b>, <i>manager</i>
5470 DdNode * <b>f</b>, <i>function to be subset</i>
5471 int <b>numVars</b>, <i>number of variables in the support of f</i>
5472 int <b>threshold</b>, <i>maximum number of nodes in the subset</i>
5473 int <b>hardlimit</b> <i>flag: 1 if threshold is a hard limit</i>
5475 </pre>
5476 <dd> Extracts a dense subset from a BDD. This procedure
5477 tries to preserve the shortest paths of the input BDD, because they
5478 give many minterms and contribute few nodes. This procedure may
5479 increase the number of nodes in trying to create the subset or
5480 reduce the number of nodes due to recombination as compared to the
5481 original BDD. Hence the threshold may not be strictly adhered to. In
5482 practice, recombination overshadows the increase in the number of
5483 nodes and results in small BDDs as compared to the threshold. The
5484 hardlimit specifies whether threshold needs to be strictly adhered
5485 to. If it is set to 1, the procedure ensures that result is never
5486 larger than the specified limit but may be considerably less than
5487 the threshold. Returns a pointer to the BDD for the subset if
5488 successful; NULL otherwise. The value for numVars should be as
5489 close as possible to the size of the support of f for better
5490 efficiency. However, it is safe to pass the value returned by
5491 Cudd_ReadSize for numVars. If 0 is passed, then the value returned
5492 by Cudd_ReadSize is used.
5495 <dd> <b>Side Effects</b> None
5498 <dd> <b>See Also</b> <code><a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
5499 <a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
5500 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
5501 </code>
5503 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
5505 <dt><pre>
5506 <A NAME="Cudd_SubsetWithMaskVars"></A>
5507 DdNode * <I></I>
5508 <B>Cudd_SubsetWithMaskVars</B>(
5509 DdManager * <b>dd</b>, <i>manager</i>
5510 DdNode * <b>f</b>, <i>function from which to pick a cube</i>
5511 DdNode ** <b>vars</b>, <i>array of variables</i>
5512 int <b>nvars</b>, <i>size of <code>vars</code></i>
5513 DdNode ** <b>maskVars</b>, <i>array of variables</i>
5514 int <b>mvars</b> <i>size of <code>maskVars</code></i>
5516 </pre>
5517 <dd> Extracts a subset from a BDD in the following procedure.
5518 1. Compute the weight for each mask variable by counting the number of
5519 minterms for both positive and negative cofactors of the BDD with
5520 respect to each mask variable. (weight = #positive - #negative)
5521 2. Find a representative cube of the BDD by using the weight. From the
5522 top variable of the BDD, for each variable, if the weight is greater
5523 than 0.0, choose THEN branch, othereise ELSE branch, until meeting
5524 the constant 1.
5525 3. Quantify out the variables not in maskVars from the representative
5526 cube and if a variable in maskVars is don't care, replace the
5527 variable with a constant(1 or 0) depending on the weight.
5528 4. Make a subset of the BDD by multiplying with the modified cube.
5531 <dd> <b>Side Effects</b> None
5534 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5536 <dt><pre>
5537 <A NAME="Cudd_SupersetCompress"></A>
5538 DdNode * <I></I>
5539 <B>Cudd_SupersetCompress</B>(
5540 DdManager * <b>dd</b>, <i>manager</i>
5541 DdNode * <b>f</b>, <i>BDD whose superset is sought</i>
5542 int <b>nvars</b>, <i>number of variables in the support of f</i>
5543 int <b>threshold</b> <i>maximum number of nodes in the superset</i>
5545 </pre>
5546 <dd> Finds a dense superset of BDD <code>f</code>. Density is
5547 the ratio of number of minterms to number of nodes. Uses several
5548 techniques in series. It is more expensive than other supersetting
5549 procedures, but often produces better results. See
5550 Cudd_SupersetShortPaths for a description of the threshold and nvars
5551 parameters. Returns a pointer to the result if successful; NULL
5552 otherwise.
5555 <dd> <b>Side Effects</b> None
5558 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetCompress">Cudd_SubsetCompress</a>
5559 <a href="#Cudd_SupersetRemap">Cudd_SupersetRemap</a>
5560 <a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
5561 <a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
5562 <a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
5563 </code>
5565 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
5567 <dt><pre>
5568 <A NAME="Cudd_SupersetHeavyBranch"></A>
5569 DdNode * <I></I>
5570 <B>Cudd_SupersetHeavyBranch</B>(
5571 DdManager * <b>dd</b>, <i>manager</i>
5572 DdNode * <b>f</b>, <i>function to be superset</i>
5573 int <b>numVars</b>, <i>number of variables in the support of f</i>
5574 int <b>threshold</b> <i>maximum number of nodes in the superset</i>
5576 </pre>
5577 <dd> Extracts a dense superset from a BDD. The procedure is
5578 identical to the subset procedure except for the fact that it
5579 receives the complement of the given function. Extracting the subset
5580 of the complement function is equivalent to extracting the superset
5581 of the function. This procedure builds a superset by throwing away
5582 one of the children of each node starting from the root of the
5583 complement function, until the result is small enough. The child
5584 that is eliminated from the result is the one that contributes the
5585 fewer minterms.
5586 Returns a pointer to the BDD of the superset if successful. NULL if
5587 intermediate result causes the procedure to run out of memory. The
5588 parameter numVars is the maximum number of variables to be used in
5589 minterm calculation and node count calculation. The optimal number
5590 should be as close as possible to the size of the support of f.
5591 However, it is safe to pass the value returned by Cudd_ReadSize for
5592 numVars when the number of variables is under 1023. If numVars is
5593 larger than 1023, it will overflow. If a 0 parameter is passed then
5594 the procedure will compute a value which will avoid overflow but
5595 will cause underflow with 2046 variables or more.
5598 <dd> <b>Side Effects</b> None
5601 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
5602 <a href="#Cudd_SupersetShortPaths">Cudd_SupersetShortPaths</a>
5603 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
5604 </code>
5606 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
5608 <dt><pre>
5609 <A NAME="Cudd_SupersetShortPaths"></A>
5610 DdNode * <I></I>
5611 <B>Cudd_SupersetShortPaths</B>(
5612 DdManager * <b>dd</b>, <i>manager</i>
5613 DdNode * <b>f</b>, <i>function to be superset</i>
5614 int <b>numVars</b>, <i>number of variables in the support of f</i>
5615 int <b>threshold</b>, <i>maximum number of nodes in the subset</i>
5616 int <b>hardlimit</b> <i>flag: 1 if threshold is a hard limit</i>
5618 </pre>
5619 <dd> Extracts a dense superset from a BDD. The procedure is
5620 identical to the subset procedure except for the fact that it
5621 receives the complement of the given function. Extracting the subset
5622 of the complement function is equivalent to extracting the superset
5623 of the function. This procedure tries to preserve the shortest
5624 paths of the complement BDD, because they give many minterms and
5625 contribute few nodes. This procedure may increase the number of
5626 nodes in trying to create the superset or reduce the number of nodes
5627 due to recombination as compared to the original BDD. Hence the
5628 threshold may not be strictly adhered to. In practice, recombination
5629 overshadows the increase in the number of nodes and results in small
5630 BDDs as compared to the threshold. The hardlimit specifies whether
5631 threshold needs to be strictly adhered to. If it is set to 1, the
5632 procedure ensures that result is never larger than the specified
5633 limit but may be considerably less than the threshold. Returns a
5634 pointer to the BDD for the superset if successful; NULL
5635 otherwise. The value for numVars should be as close as possible to
5636 the size of the support of f for better efficiency. However, it is
5637 safe to pass the value returned by Cudd_ReadSize for numVar. If 0
5638 is passed, then the value returned by Cudd_ReadSize is used.
5641 <dd> <b>Side Effects</b> None
5644 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
5645 <a href="#Cudd_SupersetHeavyBranch">Cudd_SupersetHeavyBranch</a>
5646 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
5647 </code>
5649 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
5651 <dt><pre>
5652 <A NAME="Cudd_SupportIndex"></A>
5653 int * <I></I>
5654 <B>Cudd_SupportIndex</B>(
5655 DdManager * <b>dd</b>, <i>manager</i>
5656 DdNode * <b>f</b> <i>DD whose support is sought</i>
5658 </pre>
5659 <dd> Finds the variables on which a DD depends. Returns an
5660 index array of the variables if successful; NULL otherwise. The
5661 size of the array equals the number of variables in the manager.
5662 Each entry of the array is 1 if the corresponding variable is in the
5663 support of the DD and 0 otherwise.
5666 <dd> <b>Side Effects</b> None
5669 <dd> <b>See Also</b> <code><a href="#Cudd_Support">Cudd_Support</a>
5670 <a href="#Cudd_VectorSupport">Cudd_VectorSupport</a>
5671 <a href="#Cudd_ClassifySupport">Cudd_ClassifySupport</a>
5672 </code>
5674 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5676 <dt><pre>
5677 <A NAME="Cudd_SupportSize"></A>
5678 int <I></I>
5679 <B>Cudd_SupportSize</B>(
5680 DdManager * <b>dd</b>, <i>manager</i>
5681 DdNode * <b>f</b> <i>DD whose support size is sought</i>
5683 </pre>
5684 <dd> Counts the variables on which a DD depends.
5685 Returns the number of the variables if successful; CUDD_OUT_OF_MEM
5686 otherwise.
5689 <dd> <b>Side Effects</b> None
5692 <dd> <b>See Also</b> <code><a href="#Cudd_Support">Cudd_Support</a>
5693 </code>
5695 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5697 <dt><pre>
5698 <A NAME="Cudd_Support"></A>
5699 DdNode * <I></I>
5700 <B>Cudd_Support</B>(
5701 DdManager * <b>dd</b>, <i>manager</i>
5702 DdNode * <b>f</b> <i>DD whose support is sought</i>
5704 </pre>
5705 <dd> Finds the variables on which a DD depends.
5706 Returns a BDD consisting of the product of the variables if
5707 successful; NULL otherwise.
5710 <dd> <b>Side Effects</b> None
5713 <dd> <b>See Also</b> <code><a href="#Cudd_VectorSupport">Cudd_VectorSupport</a>
5714 <a href="#Cudd_ClassifySupport">Cudd_ClassifySupport</a>
5715 </code>
5717 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5719 <dt><pre>
5720 <A NAME="Cudd_SymmProfile"></A>
5721 void <I></I>
5722 <B>Cudd_SymmProfile</B>(
5723 DdManager * <b>table</b>, <i></i>
5724 int <b>lower</b>, <i></i>
5725 int <b>upper</b> <i></i>
5727 </pre>
5728 <dd> Prints statistics on symmetric variables.
5731 <dd> <b>Side Effects</b> None
5734 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
5736 <dt><pre>
5737 <A NAME="Cudd_TurnOffCountDead"></A>
5738 void <I></I>
5739 <B>Cudd_TurnOffCountDead</B>(
5740 DdManager * <b>dd</b> <i></i>
5742 </pre>
5743 <dd> Causes the dead nodes not to be counted towards
5744 triggering reordering. This causes less frequent reorderings. By
5745 default dead nodes are not counted. Therefore there is no need to
5746 call this function unless Cudd_TurnOnCountDead has been previously
5747 called.
5750 <dd> <b>Side Effects</b> Changes the manager.
5753 <dd> <b>See Also</b> <code><a href="#Cudd_TurnOnCountDead">Cudd_TurnOnCountDead</a>
5754 <a href="#Cudd_DeadAreCounted">Cudd_DeadAreCounted</a>
5755 </code>
5757 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5759 <dt><pre>
5760 <A NAME="Cudd_TurnOnCountDead"></A>
5761 void <I></I>
5762 <B>Cudd_TurnOnCountDead</B>(
5763 DdManager * <b>dd</b> <i></i>
5765 </pre>
5766 <dd> Causes the dead nodes to be counted towards triggering
5767 reordering. This causes more frequent reorderings. By default dead
5768 nodes are not counted.
5771 <dd> <b>Side Effects</b> Changes the manager.
5774 <dd> <b>See Also</b> <code><a href="#Cudd_TurnOffCountDead">Cudd_TurnOffCountDead</a>
5775 <a href="#Cudd_DeadAreCounted">Cudd_DeadAreCounted</a>
5776 </code>
5778 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
5780 <dt><pre>
5781 <A NAME="Cudd_UnderApprox"></A>
5782 DdNode * <I></I>
5783 <B>Cudd_UnderApprox</B>(
5784 DdManager * <b>dd</b>, <i>manager</i>
5785 DdNode * <b>f</b>, <i>function to be subset</i>
5786 int <b>numVars</b>, <i>number of variables in the support of f</i>
5787 int <b>threshold</b>, <i>when to stop approximation</i>
5788 int <b>safe</b>, <i>enforce safe approximation</i>
5789 double <b>quality</b> <i>minimum improvement for accepted changes</i>
5791 </pre>
5792 <dd> Extracts a dense subset from a BDD. This procedure uses
5793 a variant of Tom Shiple's underapproximation method. The main
5794 difference from the original method is that density is used as cost
5795 function. Returns a pointer to the BDD of the subset if
5796 successful. NULL if the procedure runs out of memory. The parameter
5797 numVars is the maximum number of variables to be used in minterm
5798 calculation. The optimal number should be as close as possible to
5799 the size of the support of f. However, it is safe to pass the value
5800 returned by Cudd_ReadSize for numVars when the number of variables
5801 is under 1023. If numVars is larger than 1023, it will cause
5802 overflow. If a 0 parameter is passed then the procedure will compute
5803 a value which will avoid overflow but will cause underflow with 2046
5804 variables or more.
5807 <dd> <b>Side Effects</b> None
5810 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
5811 <a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
5812 <a href="#Cudd_ReadSize">Cudd_ReadSize</a>
5813 </code>
5815 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
5817 <dt><pre>
5818 <A NAME="Cudd_VectorSupportIndex"></A>
5819 int * <I></I>
5820 <B>Cudd_VectorSupportIndex</B>(
5821 DdManager * <b>dd</b>, <i>manager</i>
5822 DdNode ** <b>F</b>, <i>array of DDs whose support is sought</i>
5823 int <b>n</b> <i>size of the array</i>
5825 </pre>
5826 <dd> Finds the variables on which a set of DDs depends.
5827 The set must contain either BDDs and ADDs, or ZDDs.
5828 Returns an index array of the variables if successful; NULL otherwise.
5831 <dd> <b>Side Effects</b> None
5834 <dd> <b>See Also</b> <code><a href="#Cudd_SupportIndex">Cudd_SupportIndex</a>
5835 <a href="#Cudd_VectorSupport">Cudd_VectorSupport</a>
5836 <a href="#Cudd_ClassifySupport">Cudd_ClassifySupport</a>
5837 </code>
5839 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5841 <dt><pre>
5842 <A NAME="Cudd_VectorSupportSize"></A>
5843 int <I></I>
5844 <B>Cudd_VectorSupportSize</B>(
5845 DdManager * <b>dd</b>, <i>manager</i>
5846 DdNode ** <b>F</b>, <i>array of DDs whose support is sought</i>
5847 int <b>n</b> <i>size of the array</i>
5849 </pre>
5850 <dd> Counts the variables on which a set of DDs depends.
5851 The set must contain either BDDs and ADDs, or ZDDs.
5852 Returns the number of the variables if successful; CUDD_OUT_OF_MEM
5853 otherwise.
5856 <dd> <b>Side Effects</b> None
5859 <dd> <b>See Also</b> <code><a href="#Cudd_VectorSupport">Cudd_VectorSupport</a>
5860 <a href="#Cudd_SupportSize">Cudd_SupportSize</a>
5861 </code>
5863 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5865 <dt><pre>
5866 <A NAME="Cudd_VectorSupport"></A>
5867 DdNode * <I></I>
5868 <B>Cudd_VectorSupport</B>(
5869 DdManager * <b>dd</b>, <i>manager</i>
5870 DdNode ** <b>F</b>, <i>array of DDs whose support is sought</i>
5871 int <b>n</b> <i>size of the array</i>
5873 </pre>
5874 <dd> Finds the variables on which a set of DDs depends.
5875 The set must contain either BDDs and ADDs, or ZDDs.
5876 Returns a BDD consisting of the product of the variables if
5877 successful; NULL otherwise.
5880 <dd> <b>Side Effects</b> None
5883 <dd> <b>See Also</b> <code><a href="#Cudd_Support">Cudd_Support</a>
5884 <a href="#Cudd_ClassifySupport">Cudd_ClassifySupport</a>
5885 </code>
5887 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
5889 <dt><pre>
5890 <A NAME="Cudd_VerifySol"></A>
5891 DdNode * <I></I>
5892 <B>Cudd_VerifySol</B>(
5893 DdManager * <b>bdd</b>, <i></i>
5894 DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
5895 DdNode ** <b>G</b>, <i>the array of solutions</i>
5896 int * <b>yIndex</b>, <i>index of y variables</i>
5897 int <b>n</b> <i>numbers of unknowns</i>
5899 </pre>
5900 <dd> Checks the solution of F(x,y) = 0. This procedure
5901 substitutes the solution components for the unknowns of F and returns
5902 the resulting BDD for F.
5905 <dd> <b>Side Effects</b> Frees the memory pointed by yIndex.
5908 <dd> <b>See Also</b> <code><a href="#Cudd_SolveEqn">Cudd_SolveEqn</a>
5909 </code>
5911 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>
5913 <dt><pre>
5914 <A NAME="Cudd_Xeqy"></A>
5915 DdNode * <I></I>
5916 <B>Cudd_Xeqy</B>(
5917 DdManager * <b>dd</b>, <i>DD manager</i>
5918 int <b>N</b>, <i>number of x and y variables</i>
5919 DdNode ** <b>x</b>, <i>array of x variables</i>
5920 DdNode ** <b>y</b> <i>array of y variables</i>
5922 </pre>
5923 <dd> This function generates a BDD for the function x==y.
5924 Both x and y are N-bit numbers, x[0] x[1] ... x[N-1] and
5925 y[0] y[1] ... y[N-1], with 0 the most significant bit.
5926 The BDD is built bottom-up.
5927 It has 3*N-1 internal nodes, if the variables are ordered as follows:
5928 x[0] y[0] x[1] y[1] ... x[N-1] y[N-1].
5931 <dd> <b>Side Effects</b> None
5934 <dd> <b>See Also</b> <code><a href="#Cudd_addXeqy">Cudd_addXeqy</a>
5935 </code>
5937 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
5939 <dt><pre>
5940 <A NAME="Cudd_Xgty"></A>
5941 DdNode * <I></I>
5942 <B>Cudd_Xgty</B>(
5943 DdManager * <b>dd</b>, <i>DD manager</i>
5944 int <b>N</b>, <i>number of x and y variables</i>
5945 DdNode ** <b>z</b>, <i>array of z variables: unused</i>
5946 DdNode ** <b>x</b>, <i>array of x variables</i>
5947 DdNode ** <b>y</b> <i>array of y variables</i>
5949 </pre>
5950 <dd> This function generates a BDD for the function x &gt; y.
5951 Both x and y are N-bit numbers, x[0] x[1] ... x[N-1] and
5952 y[0] y[1] ... y[N-1], with 0 the most significant bit.
5953 The BDD is built bottom-up.
5954 It has 3*N-1 internal nodes, if the variables are ordered as follows:
5955 x[0] y[0] x[1] y[1] ... x[N-1] y[N-1].
5956 Argument z is not used by Cudd_Xgty: it is included to make it
5957 call-compatible to Cudd_Dxygtdxz and Cudd_Dxygtdyz.
5960 <dd> <b>Side Effects</b> None
5963 <dd> <b>See Also</b> <code><a href="#Cudd_PrioritySelect">Cudd_PrioritySelect</a>
5964 <a href="#Cudd_Dxygtdxz">Cudd_Dxygtdxz</a>
5965 <a href="#Cudd_Dxygtdyz">Cudd_Dxygtdyz</a>
5966 </code>
5968 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
5970 <dt><pre>
5971 <A NAME="Cudd_addAgreement"></A>
5972 DdNode * <I></I>
5973 <B>Cudd_addAgreement</B>(
5974 DdManager * <b>dd</b>, <i></i>
5975 DdNode ** <b>f</b>, <i></i>
5976 DdNode ** <b>g</b> <i></i>
5978 </pre>
5979 <dd> Returns NULL if not a terminal case; f op g otherwise,
5980 where f op g is f if f==g; background if f!=g.
5983 <dd> <b>Side Effects</b> None
5986 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
5987 </code>
5989 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
5991 <dt><pre>
5992 <A NAME="Cudd_addApply"></A>
5993 DdNode * <I></I>
5994 <B>Cudd_addApply</B>(
5995 DdManager * <b>dd</b>, <i></i>
5996 DD_AOP <b>op</b>, <i></i>
5997 DdNode * <b>f</b>, <i></i>
5998 DdNode * <b>g</b> <i></i>
6000 </pre>
6001 <dd> Applies op to the corresponding discriminants of f and g.
6002 Returns a pointer to the result if succssful; NULL otherwise.
6005 <dd> <b>Side Effects</b> None
6008 <dd> <b>See Also</b> <code><a href="#Cudd_addMonadicApply">Cudd_addMonadicApply</a>
6009 <a href="#Cudd_addPlus">Cudd_addPlus</a>
6010 <a href="#Cudd_addTimes">Cudd_addTimes</a>
6011 <a href="#Cudd_addThreshold">Cudd_addThreshold</a>
6012 <a href="#Cudd_addSetNZ">Cudd_addSetNZ</a>
6013 <a href="#Cudd_addDivide">Cudd_addDivide</a>
6014 <a href="#Cudd_addMinus">Cudd_addMinus</a>
6015 <a href="#Cudd_addMinimum">Cudd_addMinimum</a>
6016 <a href="#Cudd_addMaximum">Cudd_addMaximum</a>
6017 <a href="#Cudd_addOneZeroMaximum">Cudd_addOneZeroMaximum</a>
6018 <a href="#Cudd_addDiff">Cudd_addDiff</a>
6019 <a href="#Cudd_addAgreement">Cudd_addAgreement</a>
6020 <a href="#Cudd_addOr">Cudd_addOr</a>
6021 <a href="#Cudd_addNand">Cudd_addNand</a>
6022 <a href="#Cudd_addNor">Cudd_addNor</a>
6023 <a href="#Cudd_addXor">Cudd_addXor</a>
6024 <a href="#Cudd_addXnor">Cudd_addXnor</a>
6025 </code>
6027 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6029 <dt><pre>
6030 <A NAME="Cudd_addBddInterval"></A>
6031 DdNode * <I></I>
6032 <B>Cudd_addBddInterval</B>(
6033 DdManager * <b>dd</b>, <i></i>
6034 DdNode * <b>f</b>, <i></i>
6035 CUDD_VALUE_TYPE <b>lower</b>, <i></i>
6036 CUDD_VALUE_TYPE <b>upper</b> <i></i>
6038 </pre>
6039 <dd> Converts an ADD to a BDD by replacing all
6040 discriminants greater than or equal to lower and less than or equal to
6041 upper with 1, and all other discriminants with 0. Returns a pointer to
6042 the resulting BDD if successful; NULL otherwise.
6045 <dd> <b>Side Effects</b> None
6048 <dd> <b>See Also</b> <code><a href="#Cudd_addBddThreshold">Cudd_addBddThreshold</a>
6049 <a href="#Cudd_addBddStrictThreshold">Cudd_addBddStrictThreshold</a>
6050 <a href="#Cudd_addBddPattern">Cudd_addBddPattern</a>
6051 <a href="#Cudd_BddToAdd">Cudd_BddToAdd</a>
6052 </code>
6054 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
6056 <dt><pre>
6057 <A NAME="Cudd_addBddIthBit"></A>
6058 DdNode * <I></I>
6059 <B>Cudd_addBddIthBit</B>(
6060 DdManager * <b>dd</b>, <i></i>
6061 DdNode * <b>f</b>, <i></i>
6062 int <b>bit</b> <i></i>
6064 </pre>
6065 <dd> Converts an ADD to a BDD by replacing all
6066 discriminants whose i-th bit is equal to 1 with 1, and all other
6067 discriminants with 0. The i-th bit refers to the integer
6068 representation of the leaf value. If the value is has a fractional
6069 part, it is ignored. Repeated calls to this procedure allow one to
6070 transform an integer-valued ADD into an array of BDDs, one for each
6071 bit of the leaf values. Returns a pointer to the resulting BDD if
6072 successful; NULL otherwise.
6075 <dd> <b>Side Effects</b> None
6078 <dd> <b>See Also</b> <code><a href="#Cudd_addBddInterval">Cudd_addBddInterval</a>
6079 <a href="#Cudd_addBddPattern">Cudd_addBddPattern</a>
6080 <a href="#Cudd_BddToAdd">Cudd_BddToAdd</a>
6081 </code>
6083 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
6085 <dt><pre>
6086 <A NAME="Cudd_addBddPattern"></A>
6087 DdNode * <I></I>
6088 <B>Cudd_addBddPattern</B>(
6089 DdManager * <b>dd</b>, <i></i>
6090 DdNode * <b>f</b> <i></i>
6092 </pre>
6093 <dd> Converts an ADD to a BDD by replacing all
6094 discriminants different from 0 with 1. Returns a pointer to the
6095 resulting BDD if successful; NULL otherwise.
6098 <dd> <b>Side Effects</b> None
6101 <dd> <b>See Also</b> <code><a href="#Cudd_BddToAdd">Cudd_BddToAdd</a>
6102 <a href="#Cudd_addBddThreshold">Cudd_addBddThreshold</a>
6103 <a href="#Cudd_addBddInterval">Cudd_addBddInterval</a>
6104 <a href="#Cudd_addBddStrictThreshold">Cudd_addBddStrictThreshold</a>
6105 </code>
6107 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
6109 <dt><pre>
6110 <A NAME="Cudd_addBddStrictThreshold"></A>
6111 DdNode * <I></I>
6112 <B>Cudd_addBddStrictThreshold</B>(
6113 DdManager * <b>dd</b>, <i></i>
6114 DdNode * <b>f</b>, <i></i>
6115 CUDD_VALUE_TYPE <b>value</b> <i></i>
6117 </pre>
6118 <dd> Converts an ADD to a BDD by replacing all
6119 discriminants STRICTLY greater than value with 1, and all other
6120 discriminants with 0. Returns a pointer to the resulting BDD if
6121 successful; NULL otherwise.
6124 <dd> <b>Side Effects</b> None
6127 <dd> <b>See Also</b> <code><a href="#Cudd_addBddInterval">Cudd_addBddInterval</a>
6128 <a href="#Cudd_addBddPattern">Cudd_addBddPattern</a>
6129 <a href="#Cudd_BddToAdd">Cudd_BddToAdd</a>
6130 <a href="#Cudd_addBddThreshold">Cudd_addBddThreshold</a>
6131 </code>
6133 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
6135 <dt><pre>
6136 <A NAME="Cudd_addBddThreshold"></A>
6137 DdNode * <I></I>
6138 <B>Cudd_addBddThreshold</B>(
6139 DdManager * <b>dd</b>, <i></i>
6140 DdNode * <b>f</b>, <i></i>
6141 CUDD_VALUE_TYPE <b>value</b> <i></i>
6143 </pre>
6144 <dd> Converts an ADD to a BDD by replacing all
6145 discriminants greater than or equal to value with 1, and all other
6146 discriminants with 0. Returns a pointer to the resulting BDD if
6147 successful; NULL otherwise.
6150 <dd> <b>Side Effects</b> None
6153 <dd> <b>See Also</b> <code><a href="#Cudd_addBddInterval">Cudd_addBddInterval</a>
6154 <a href="#Cudd_addBddPattern">Cudd_addBddPattern</a>
6155 <a href="#Cudd_BddToAdd">Cudd_BddToAdd</a>
6156 <a href="#Cudd_addBddStrictThreshold">Cudd_addBddStrictThreshold</a>
6157 </code>
6159 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
6161 <dt><pre>
6162 <A NAME="Cudd_addCmpl"></A>
6163 DdNode * <I></I>
6164 <B>Cudd_addCmpl</B>(
6165 DdManager * <b>dd</b>, <i></i>
6166 DdNode * <b>f</b> <i></i>
6168 </pre>
6169 <dd> Computes the complement of an ADD a la C language: The
6170 complement of 0 is 1 and the complement of everything else is 0.
6171 Returns a pointer to the resulting ADD if successful; NULL otherwise.
6174 <dd> <b>Side Effects</b> None
6177 <dd> <b>See Also</b> <code><a href="#Cudd_addNegate">Cudd_addNegate</a>
6178 </code>
6180 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
6182 <dt><pre>
6183 <A NAME="Cudd_addCompose"></A>
6184 DdNode * <I></I>
6185 <B>Cudd_addCompose</B>(
6186 DdManager * <b>dd</b>, <i></i>
6187 DdNode * <b>f</b>, <i></i>
6188 DdNode * <b>g</b>, <i></i>
6189 int <b>v</b> <i></i>
6191 </pre>
6192 <dd> Substitutes g for x_v in the ADD for f. v is the index of the
6193 variable to be substituted. g must be a 0-1 ADD. Cudd_bddCompose passes
6194 the corresponding projection function to the recursive procedure, so
6195 that the cache may be used. Returns the composed ADD if successful;
6196 NULL otherwise.
6199 <dd> <b>Side Effects</b> None
6202 <dd> <b>See Also</b> <code><a href="#Cudd_bddCompose">Cudd_bddCompose</a>
6203 </code>
6205 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
6207 <dt><pre>
6208 <A NAME="Cudd_addComputeCube"></A>
6209 DdNode * <I></I>
6210 <B>Cudd_addComputeCube</B>(
6211 DdManager * <b>dd</b>, <i></i>
6212 DdNode ** <b>vars</b>, <i></i>
6213 int * <b>phase</b>, <i></i>
6214 int <b>n</b> <i></i>
6216 </pre>
6217 <dd> Computes the cube of an array of ADD variables. If
6218 non-null, the phase argument indicates which literal of each
6219 variable should appear in the cube. If phase[i] is nonzero, then the
6220 positive literal is used. If phase is NULL, the cube is positive unate.
6221 Returns a pointer to the result if successful; NULL otherwise.
6224 <dd> <b>Side Effects</b> none
6227 <dd> <b>See Also</b> <code><a href="#Cudd_bddComputeCube">Cudd_bddComputeCube</a>
6228 </code>
6230 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
6232 <dt><pre>
6233 <A NAME="Cudd_addConstrain"></A>
6234 DdNode * <I></I>
6235 <B>Cudd_addConstrain</B>(
6236 DdManager * <b>dd</b>, <i></i>
6237 DdNode * <b>f</b>, <i></i>
6238 DdNode * <b>c</b> <i></i>
6240 </pre>
6241 <dd> Computes f constrain c (f @ c), for f an ADD and c a 0-1
6242 ADD. List of special cases:
6243 <ul>
6244 <li> F @ 0 = 0
6245 <li> F @ 1 = F
6246 <li> 0 @ c = 0
6247 <li> 1 @ c = 1
6248 <li> F @ F = 1
6249 </ul>
6250 Returns a pointer to the result if successful; NULL otherwise.
6253 <dd> <b>Side Effects</b> None
6256 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
6257 </code>
6259 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
6261 <dt><pre>
6262 <A NAME="Cudd_addConst"></A>
6263 DdNode * <I></I>
6264 <B>Cudd_addConst</B>(
6265 DdManager * <b>dd</b>, <i></i>
6266 CUDD_VALUE_TYPE <b>c</b> <i></i>
6268 </pre>
6269 <dd> Retrieves the ADD for constant c if it already
6270 exists, or creates a new ADD. Returns a pointer to the
6271 ADD if successful; NULL otherwise.
6274 <dd> <b>Side Effects</b> None
6277 <dd> <b>See Also</b> <code><a href="#Cudd_addNewVar">Cudd_addNewVar</a>
6278 <a href="#Cudd_addIthVar">Cudd_addIthVar</a>
6279 </code>
6281 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
6283 <dt><pre>
6284 <A NAME="Cudd_addDiff"></A>
6285 DdNode * <I></I>
6286 <B>Cudd_addDiff</B>(
6287 DdManager * <b>dd</b>, <i></i>
6288 DdNode ** <b>f</b>, <i></i>
6289 DdNode ** <b>g</b> <i></i>
6291 </pre>
6292 <dd> Returns NULL if not a terminal case; f op g otherwise,
6293 where f op g is plusinfinity if f=g; min(f,g) if f!=g.
6296 <dd> <b>Side Effects</b> None
6299 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6300 </code>
6302 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6304 <dt><pre>
6305 <A NAME="Cudd_addDivide"></A>
6306 DdNode * <I></I>
6307 <B>Cudd_addDivide</B>(
6308 DdManager * <b>dd</b>, <i></i>
6309 DdNode ** <b>f</b>, <i></i>
6310 DdNode ** <b>g</b> <i></i>
6312 </pre>
6313 <dd> Integer and floating point division. Returns NULL if not
6314 a terminal case; f / g otherwise.
6317 <dd> <b>Side Effects</b> None
6320 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6321 </code>
6323 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6325 <dt><pre>
6326 <A NAME="Cudd_addEvalConst"></A>
6327 DdNode * <I></I>
6328 <B>Cudd_addEvalConst</B>(
6329 DdManager * <b>dd</b>, <i></i>
6330 DdNode * <b>f</b>, <i></i>
6331 DdNode * <b>g</b> <i></i>
6333 </pre>
6334 <dd> Checks whether ADD g is constant whenever ADD f is 1. f
6335 must be a 0-1 ADD. Returns a pointer to the resulting ADD (which may
6336 or may not be constant) or DD_NON_CONSTANT. If f is identically 0,
6337 the check is assumed to be successful, and the background value is
6338 returned. No new nodes are created.
6341 <dd> <b>Side Effects</b> None
6344 <dd> <b>See Also</b> <code><a href="#Cudd_addIteConstant">Cudd_addIteConstant</a>
6345 <a href="#Cudd_addLeq">Cudd_addLeq</a>
6346 </code>
6348 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
6350 <dt><pre>
6351 <A NAME="Cudd_addExistAbstract"></A>
6352 DdNode * <I></I>
6353 <B>Cudd_addExistAbstract</B>(
6354 DdManager * <b>manager</b>, <i></i>
6355 DdNode * <b>f</b>, <i></i>
6356 DdNode * <b>cube</b> <i></i>
6358 </pre>
6359 <dd> Abstracts all the variables in cube from f by summing
6360 over all possible values taken by the variables. Returns the
6361 abstracted ADD.
6364 <dd> <b>Side Effects</b> None
6367 <dd> <b>See Also</b> <code><a href="#Cudd_addUnivAbstract">Cudd_addUnivAbstract</a>
6368 <a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
6369 <a href="#Cudd_addOrAbstract">Cudd_addOrAbstract</a>
6370 </code>
6372 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
6374 <dt><pre>
6375 <A NAME="Cudd_addFindMax"></A>
6376 DdNode * <I></I>
6377 <B>Cudd_addFindMax</B>(
6378 DdManager * <b>dd</b>, <i></i>
6379 DdNode * <b>f</b> <i></i>
6381 </pre>
6382 <dd> Returns a pointer to a constant ADD.
6385 <dd> <b>Side Effects</b> None
6388 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddFind.c"TARGET="ABSTRACT"><CODE>cuddAddFind.c</CODE></A>
6390 <dt><pre>
6391 <A NAME="Cudd_addFindMin"></A>
6392 DdNode * <I></I>
6393 <B>Cudd_addFindMin</B>(
6394 DdManager * <b>dd</b>, <i></i>
6395 DdNode * <b>f</b> <i></i>
6397 </pre>
6398 <dd> Returns a pointer to a constant ADD.
6401 <dd> <b>Side Effects</b> None
6404 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddFind.c"TARGET="ABSTRACT"><CODE>cuddAddFind.c</CODE></A>
6406 <dt><pre>
6407 <A NAME="Cudd_addGeneralVectorCompose"></A>
6408 DdNode * <I></I>
6409 <B>Cudd_addGeneralVectorCompose</B>(
6410 DdManager * <b>dd</b>, <i></i>
6411 DdNode * <b>f</b>, <i></i>
6412 DdNode ** <b>vectorOn</b>, <i></i>
6413 DdNode ** <b>vectorOff</b> <i></i>
6415 </pre>
6416 <dd> Given a vector of ADDs, creates a new ADD by substituting the
6417 ADDs for the variables of the ADD f. vectorOn contains ADDs to be substituted
6418 for the x_v and vectorOff the ADDs to be substituted for x_v'. There should
6419 be an entry in vector for each variable in the manager. If no substitution
6420 is sought for a given variable, the corresponding projection function should
6421 be specified in the vector. This function implements simultaneous
6422 composition. Returns a pointer to the resulting ADD if successful; NULL
6423 otherwise.
6426 <dd> <b>Side Effects</b> None
6429 <dd> <b>See Also</b> <code><a href="#Cudd_addVectorCompose">Cudd_addVectorCompose</a>
6430 <a href="#Cudd_addNonSimCompose">Cudd_addNonSimCompose</a>
6431 <a href="#Cudd_addPermute">Cudd_addPermute</a>
6432 <a href="#Cudd_addCompose">Cudd_addCompose</a>
6433 <a href="#Cudd_bddVectorCompose">Cudd_bddVectorCompose</a>
6434 </code>
6436 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
6438 <dt><pre>
6439 <A NAME="Cudd_addHamming"></A>
6440 DdNode * <I></I>
6441 <B>Cudd_addHamming</B>(
6442 DdManager * <b>dd</b>, <i></i>
6443 DdNode ** <b>xVars</b>, <i></i>
6444 DdNode ** <b>yVars</b>, <i></i>
6445 int <b>nVars</b> <i></i>
6447 </pre>
6448 <dd> Computes the Hamming distance ADD. Returns an ADD that
6449 gives the Hamming distance between its two arguments if successful;
6450 NULL otherwise. The two vectors xVars and yVars identify the variables
6451 that form the two arguments.
6454 <dd> <b>Side Effects</b> None
6457 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
6459 <dt><pre>
6460 <A NAME="Cudd_addHarwell"></A>
6461 int <I></I>
6462 <B>Cudd_addHarwell</B>(
6463 FILE * <b>fp</b>, <i>pointer to the input file</i>
6464 DdManager * <b>dd</b>, <i>DD manager</i>
6465 DdNode ** <b>E</b>, <i>characteristic function of the graph</i>
6466 DdNode *** <b>x</b>, <i>array of row variables</i>
6467 DdNode *** <b>y</b>, <i>array of column variables</i>
6468 DdNode *** <b>xn</b>, <i>array of complemented row variables</i>
6469 DdNode *** <b>yn_</b>, <i>array of complemented column variables</i>
6470 int * <b>nx</b>, <i>number or row variables</i>
6471 int * <b>ny</b>, <i>number or column variables</i>
6472 int * <b>m</b>, <i>number of rows</i>
6473 int * <b>n</b>, <i>number of columns</i>
6474 int <b>bx</b>, <i>first index of row variables</i>
6475 int <b>sx</b>, <i>step of row variables</i>
6476 int <b>by</b>, <i>first index of column variables</i>
6477 int <b>sy</b>, <i>step of column variables</i>
6478 int <b>pr</b> <i>verbosity level</i>
6480 </pre>
6481 <dd> Reads in a matrix in the format of the Harwell-Boeing
6482 benchmark suite. The variables are ordered as follows:
6483 <blockquote>
6484 x[0] y[0] x[1] y[1] ...
6485 </blockquote>
6486 0 is the most significant bit. On input, nx and ny hold the numbers
6487 of row and column variables already in existence. On output, they
6488 hold the numbers of row and column variables actually used by the
6489 matrix. m and n are set to the numbers of rows and columns of the
6490 matrix. Their values on input are immaterial. Returns 1 on
6491 success; 0 otherwise. The ADD for the sparse matrix is returned in
6492 E, and its reference count is > 0.
6495 <dd> <b>Side Effects</b> None
6498 <dd> <b>See Also</b> <code><a href="#Cudd_addRead">Cudd_addRead</a>
6499 <a href="#Cudd_bddRead">Cudd_bddRead</a>
6500 </code>
6502 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddHarwell.c"TARGET="ABSTRACT"><CODE>cuddHarwell.c</CODE></A>
6504 <dt><pre>
6505 <A NAME="Cudd_addIteConstant"></A>
6506 DdNode * <I></I>
6507 <B>Cudd_addIteConstant</B>(
6508 DdManager * <b>dd</b>, <i></i>
6509 DdNode * <b>f</b>, <i></i>
6510 DdNode * <b>g</b>, <i></i>
6511 DdNode * <b>h</b> <i></i>
6513 </pre>
6514 <dd> Implements ITEconstant for ADDs. f must be a 0-1 ADD.
6515 Returns a pointer to the resulting ADD (which may or may not be
6516 constant) or DD_NON_CONSTANT. No new nodes are created. This function
6517 can be used, for instance, to check that g has a constant value
6518 (specified by h) whenever f is 1. If the constant value is unknown,
6519 then one should use Cudd_addEvalConst.
6522 <dd> <b>Side Effects</b> None
6525 <dd> <b>See Also</b> <code><a href="#Cudd_addIte">Cudd_addIte</a>
6526 <a href="#Cudd_addEvalConst">Cudd_addEvalConst</a>
6527 <a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
6528 </code>
6530 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
6532 <dt><pre>
6533 <A NAME="Cudd_addIte"></A>
6534 DdNode * <I></I>
6535 <B>Cudd_addIte</B>(
6536 DdManager * <b>dd</b>, <i></i>
6537 DdNode * <b>f</b>, <i></i>
6538 DdNode * <b>g</b>, <i></i>
6539 DdNode * <b>h</b> <i></i>
6541 </pre>
6542 <dd> Implements ITE(f,g,h). This procedure assumes that f is
6543 a 0-1 ADD. Returns a pointer to the resulting ADD if successful; NULL
6544 otherwise.
6547 <dd> <b>Side Effects</b> None
6550 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
6551 <a href="#Cudd_addIteConstant">Cudd_addIteConstant</a>
6552 <a href="#Cudd_addApply">Cudd_addApply</a>
6553 </code>
6555 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
6557 <dt><pre>
6558 <A NAME="Cudd_addIthBit"></A>
6559 DdNode * <I></I>
6560 <B>Cudd_addIthBit</B>(
6561 DdManager * <b>dd</b>, <i></i>
6562 DdNode * <b>f</b>, <i></i>
6563 int <b>bit</b> <i></i>
6565 </pre>
6566 <dd> Produces an ADD from another ADD by replacing all
6567 discriminants whose i-th bit is equal to 1 with 1, and all other
6568 discriminants with 0. The i-th bit refers to the integer
6569 representation of the leaf value. If the value is has a fractional
6570 part, it is ignored. Repeated calls to this procedure allow one to
6571 transform an integer-valued ADD into an array of ADDs, one for each
6572 bit of the leaf values. Returns a pointer to the resulting ADD if
6573 successful; NULL otherwise.
6576 <dd> <b>Side Effects</b> None
6579 <dd> <b>See Also</b> <code><a href="#Cudd_addBddIthBit">Cudd_addBddIthBit</a>
6580 </code>
6582 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddFind.c"TARGET="ABSTRACT"><CODE>cuddAddFind.c</CODE></A>
6584 <dt><pre>
6585 <A NAME="Cudd_addIthVar"></A>
6586 DdNode * <I></I>
6587 <B>Cudd_addIthVar</B>(
6588 DdManager * <b>dd</b>, <i></i>
6589 int <b>i</b> <i></i>
6591 </pre>
6592 <dd> Retrieves the ADD variable with index i if it already
6593 exists, or creates a new ADD variable. Returns a pointer to the
6594 variable if successful; NULL otherwise. An ADD variable differs from
6595 a BDD variable because it points to the arithmetic zero, instead of
6596 having a complement pointer to 1.
6599 <dd> <b>Side Effects</b> None
6602 <dd> <b>See Also</b> <code><a href="#Cudd_addNewVar">Cudd_addNewVar</a>
6603 <a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
6604 <a href="#Cudd_addConst">Cudd_addConst</a>
6605 <a href="#Cudd_addNewVarAtLevel">Cudd_addNewVarAtLevel</a>
6606 </code>
6608 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
6610 <dt><pre>
6611 <A NAME="Cudd_addLeq"></A>
6612 int <I></I>
6613 <B>Cudd_addLeq</B>(
6614 DdManager * <b>dd</b>, <i></i>
6615 DdNode * <b>f</b>, <i></i>
6616 DdNode * <b>g</b> <i></i>
6618 </pre>
6619 <dd> Returns 1 if f is less than or equal to g; 0 otherwise.
6620 No new nodes are created. This procedure works for arbitrary ADDs.
6621 For 0-1 ADDs Cudd_addEvalConst is more efficient.
6624 <dd> <b>Side Effects</b> None
6627 <dd> <b>See Also</b> <code><a href="#Cudd_addIteConstant">Cudd_addIteConstant</a>
6628 <a href="#Cudd_addEvalConst">Cudd_addEvalConst</a>
6629 <a href="#Cudd_bddLeq">Cudd_bddLeq</a>
6630 </code>
6632 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
6634 <dt><pre>
6635 <A NAME="Cudd_addLog"></A>
6636 DdNode * <I></I>
6637 <B>Cudd_addLog</B>(
6638 DdManager * <b>dd</b>, <i></i>
6639 DdNode * <b>f</b> <i></i>
6641 </pre>
6642 <dd> Natural logarithm of an ADDs. Returns NULL
6643 if not a terminal case; log(f) otherwise. The discriminants of f must
6644 be positive double's.
6647 <dd> <b>Side Effects</b> None
6650 <dd> <b>See Also</b> <code><a href="#Cudd_addMonadicApply">Cudd_addMonadicApply</a>
6651 </code>
6653 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6655 <dt><pre>
6656 <A NAME="Cudd_addMatrixMultiply"></A>
6657 DdNode * <I></I>
6658 <B>Cudd_addMatrixMultiply</B>(
6659 DdManager * <b>dd</b>, <i></i>
6660 DdNode * <b>A</b>, <i></i>
6661 DdNode * <b>B</b>, <i></i>
6662 DdNode ** <b>z</b>, <i></i>
6663 int <b>nz</b> <i></i>
6665 </pre>
6666 <dd> Calculates the product of two matrices, A and B,
6667 represented as ADDs. This procedure implements the quasiring multiplication
6668 algorithm. A is assumed to depend on variables x (rows) and z
6669 (columns). B is assumed to depend on variables z (rows) and y
6670 (columns). The product of A and B then depends on x (rows) and y
6671 (columns). Only the z variables have to be explicitly identified;
6672 they are the "summation" variables. Returns a pointer to the
6673 result if successful; NULL otherwise.
6676 <dd> <b>Side Effects</b> None
6679 <dd> <b>See Also</b> <code><a href="#Cudd_addTimesPlus">Cudd_addTimesPlus</a>
6680 <a href="#Cudd_addTriangle">Cudd_addTriangle</a>
6681 <a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
6682 </code>
6684 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
6686 <dt><pre>
6687 <A NAME="Cudd_addMaximum"></A>
6688 DdNode * <I></I>
6689 <B>Cudd_addMaximum</B>(
6690 DdManager * <b>dd</b>, <i></i>
6691 DdNode ** <b>f</b>, <i></i>
6692 DdNode ** <b>g</b> <i></i>
6694 </pre>
6695 <dd> Integer and floating point max for Cudd_addApply.
6696 Returns NULL if not a terminal case; max(f,g) otherwise.
6699 <dd> <b>Side Effects</b> None
6702 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6703 </code>
6705 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6707 <dt><pre>
6708 <A NAME="Cudd_addMinimum"></A>
6709 DdNode * <I></I>
6710 <B>Cudd_addMinimum</B>(
6711 DdManager * <b>dd</b>, <i></i>
6712 DdNode ** <b>f</b>, <i></i>
6713 DdNode ** <b>g</b> <i></i>
6715 </pre>
6716 <dd> Integer and floating point min for Cudd_addApply.
6717 Returns NULL if not a terminal case; min(f,g) otherwise.
6720 <dd> <b>Side Effects</b> None
6723 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6724 </code>
6726 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6728 <dt><pre>
6729 <A NAME="Cudd_addMinus"></A>
6730 DdNode * <I></I>
6731 <B>Cudd_addMinus</B>(
6732 DdManager * <b>dd</b>, <i></i>
6733 DdNode ** <b>f</b>, <i></i>
6734 DdNode ** <b>g</b> <i></i>
6736 </pre>
6737 <dd> Integer and floating point subtraction. Returns NULL if
6738 not a terminal case; f - g otherwise.
6741 <dd> <b>Side Effects</b> None
6744 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6745 </code>
6747 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6749 <dt><pre>
6750 <A NAME="Cudd_addMonadicApply"></A>
6751 DdNode * <I></I>
6752 <B>Cudd_addMonadicApply</B>(
6753 DdManager * <b>dd</b>, <i></i>
6754 DD_MAOP <b>op</b>, <i></i>
6755 DdNode * <b>f</b> <i></i>
6757 </pre>
6758 <dd> Applies op to the discriminants of f.
6759 Returns a pointer to the result if succssful; NULL otherwise.
6762 <dd> <b>Side Effects</b> None
6765 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6766 <a href="#Cudd_addLog">Cudd_addLog</a>
6767 </code>
6769 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6771 <dt><pre>
6772 <A NAME="Cudd_addNand"></A>
6773 DdNode * <I></I>
6774 <B>Cudd_addNand</B>(
6775 DdManager * <b>dd</b>, <i></i>
6776 DdNode ** <b>f</b>, <i></i>
6777 DdNode ** <b>g</b> <i></i>
6779 </pre>
6780 <dd> NAND of two 0-1 ADDs. Returns NULL
6781 if not a terminal case; f NAND g otherwise.
6784 <dd> <b>Side Effects</b> None
6787 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6788 </code>
6790 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6792 <dt><pre>
6793 <A NAME="Cudd_addNegate"></A>
6794 DdNode * <I></I>
6795 <B>Cudd_addNegate</B>(
6796 DdManager * <b>dd</b>, <i></i>
6797 DdNode * <b>f</b> <i></i>
6799 </pre>
6800 <dd> Computes the additive inverse of an ADD. Returns a pointer
6801 to the result if successful; NULL otherwise.
6804 <dd> <b>Side Effects</b> None
6807 <dd> <b>See Also</b> <code><a href="#Cudd_addCmpl">Cudd_addCmpl</a>
6808 </code>
6810 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>
6812 <dt><pre>
6813 <A NAME="Cudd_addNewVarAtLevel"></A>
6814 DdNode * <I></I>
6815 <B>Cudd_addNewVarAtLevel</B>(
6816 DdManager * <b>dd</b>, <i></i>
6817 int <b>level</b> <i></i>
6819 </pre>
6820 <dd> Creates a new ADD variable. The new variable has an
6821 index equal to the largest previous index plus 1 and is positioned at
6822 the specified level in the order. Returns a pointer to the new
6823 variable if successful; NULL otherwise.
6826 <dd> <b>Side Effects</b> None
6829 <dd> <b>See Also</b> <code><a href="#Cudd_addNewVar">Cudd_addNewVar</a>
6830 <a href="#Cudd_addIthVar">Cudd_addIthVar</a>
6831 <a href="#Cudd_bddNewVarAtLevel">Cudd_bddNewVarAtLevel</a>
6832 </code>
6834 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
6836 <dt><pre>
6837 <A NAME="Cudd_addNewVar"></A>
6838 DdNode * <I></I>
6839 <B>Cudd_addNewVar</B>(
6840 DdManager * <b>dd</b> <i></i>
6842 </pre>
6843 <dd> Creates a new ADD variable. The new variable has an
6844 index equal to the largest previous index plus 1. Returns a
6845 pointer to the new variable if successful; NULL otherwise.
6846 An ADD variable differs from a BDD variable because it points to the
6847 arithmetic zero, instead of having a complement pointer to 1.
6850 <dd> <b>Side Effects</b> None
6853 <dd> <b>See Also</b> <code><a href="#Cudd_bddNewVar">Cudd_bddNewVar</a>
6854 <a href="#Cudd_addIthVar">Cudd_addIthVar</a>
6855 <a href="#Cudd_addConst">Cudd_addConst</a>
6856 <a href="#Cudd_addNewVarAtLevel">Cudd_addNewVarAtLevel</a>
6857 </code>
6859 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
6861 <dt><pre>
6862 <A NAME="Cudd_addNonSimCompose"></A>
6863 DdNode * <I></I>
6864 <B>Cudd_addNonSimCompose</B>(
6865 DdManager * <b>dd</b>, <i></i>
6866 DdNode * <b>f</b>, <i></i>
6867 DdNode ** <b>vector</b> <i></i>
6869 </pre>
6870 <dd> Given a vector of 0-1 ADDs, creates a new ADD by
6871 substituting the 0-1 ADDs for the variables of the ADD f. There
6872 should be an entry in vector for each variable in the manager.
6873 This function implements non-simultaneous composition. If any of the
6874 functions being composed depends on any of the variables being
6875 substituted, then the result depends on the order of composition,
6876 which in turn depends on the variable order: The variables farther from
6877 the roots in the order are substituted first.
6878 Returns a pointer to the resulting ADD if successful; NULL
6879 otherwise.
6882 <dd> <b>Side Effects</b> None
6885 <dd> <b>See Also</b> <code><a href="#Cudd_addVectorCompose">Cudd_addVectorCompose</a>
6886 <a href="#Cudd_addPermute">Cudd_addPermute</a>
6887 <a href="#Cudd_addCompose">Cudd_addCompose</a>
6888 </code>
6890 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
6892 <dt><pre>
6893 <A NAME="Cudd_addNor"></A>
6894 DdNode * <I></I>
6895 <B>Cudd_addNor</B>(
6896 DdManager * <b>dd</b>, <i></i>
6897 DdNode ** <b>f</b>, <i></i>
6898 DdNode ** <b>g</b> <i></i>
6900 </pre>
6901 <dd> NOR of two 0-1 ADDs. Returns NULL
6902 if not a terminal case; f NOR g otherwise.
6905 <dd> <b>Side Effects</b> None
6908 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6909 </code>
6911 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6913 <dt><pre>
6914 <A NAME="Cudd_addOneZeroMaximum"></A>
6915 DdNode * <I></I>
6916 <B>Cudd_addOneZeroMaximum</B>(
6917 DdManager * <b>dd</b>, <i></i>
6918 DdNode ** <b>f</b>, <i></i>
6919 DdNode ** <b>g</b> <i></i>
6921 </pre>
6922 <dd> Returns 1 if f &gt; g and 0 otherwise. Used in
6923 conjunction with Cudd_addApply. Returns NULL if not a terminal
6924 case.
6927 <dd> <b>Side Effects</b> None
6930 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6931 </code>
6933 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6935 <dt><pre>
6936 <A NAME="Cudd_addOrAbstract"></A>
6937 DdNode * <I></I>
6938 <B>Cudd_addOrAbstract</B>(
6939 DdManager * <b>manager</b>, <i></i>
6940 DdNode * <b>f</b>, <i></i>
6941 DdNode * <b>cube</b> <i></i>
6943 </pre>
6944 <dd> Abstracts all the variables in cube from the 0-1 ADD f
6945 by taking the disjunction over all possible values taken by the
6946 variables. Returns the abstracted ADD if successful; NULL
6947 otherwise.
6950 <dd> <b>Side Effects</b> None
6953 <dd> <b>See Also</b> <code><a href="#Cudd_addUnivAbstract">Cudd_addUnivAbstract</a>
6954 <a href="#Cudd_addExistAbstract">Cudd_addExistAbstract</a>
6955 </code>
6957 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
6959 <dt><pre>
6960 <A NAME="Cudd_addOr"></A>
6961 DdNode * <I></I>
6962 <B>Cudd_addOr</B>(
6963 DdManager * <b>dd</b>, <i></i>
6964 DdNode ** <b>f</b>, <i></i>
6965 DdNode ** <b>g</b> <i></i>
6967 </pre>
6968 <dd> Disjunction of two 0-1 ADDs. Returns NULL
6969 if not a terminal case; f OR g otherwise.
6972 <dd> <b>Side Effects</b> None
6975 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
6976 </code>
6978 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
6980 <dt><pre>
6981 <A NAME="Cudd_addOuterSum"></A>
6982 DdNode * <I></I>
6983 <B>Cudd_addOuterSum</B>(
6984 DdManager * <b>dd</b>, <i></i>
6985 DdNode * <b>M</b>, <i></i>
6986 DdNode * <b>r</b>, <i></i>
6987 DdNode * <b>c</b> <i></i>
6989 </pre>
6990 <dd> Takes the pointwise minimum of a matrix and the outer
6991 sum of two vectors. This procedure is used in the Floyd-Warshall
6992 all-pair shortest path algorithm. Returns a pointer to the result if
6993 successful; NULL otherwise.
6996 <dd> <b>Side Effects</b> None
6999 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
7001 <dt><pre>
7002 <A NAME="Cudd_addPermute"></A>
7003 DdNode * <I></I>
7004 <B>Cudd_addPermute</B>(
7005 DdManager * <b>manager</b>, <i></i>
7006 DdNode * <b>node</b>, <i></i>
7007 int * <b>permut</b> <i></i>
7009 </pre>
7010 <dd> Given a permutation in array permut, creates a new ADD
7011 with permuted variables. There should be an entry in array permut
7012 for each variable in the manager. The i-th entry of permut holds the
7013 index of the variable that is to substitute the i-th
7014 variable. Returns a pointer to the resulting ADD if successful; NULL
7015 otherwise.
7018 <dd> <b>Side Effects</b> None
7021 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
7022 <a href="#Cudd_addSwapVariables">Cudd_addSwapVariables</a>
7023 </code>
7025 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
7027 <dt><pre>
7028 <A NAME="Cudd_addPlus"></A>
7029 DdNode * <I></I>
7030 <B>Cudd_addPlus</B>(
7031 DdManager * <b>dd</b>, <i></i>
7032 DdNode ** <b>f</b>, <i></i>
7033 DdNode ** <b>g</b> <i></i>
7035 </pre>
7036 <dd> Integer and floating point addition. Returns NULL if not
7037 a terminal case; f+g otherwise.
7040 <dd> <b>Side Effects</b> None
7043 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7044 </code>
7046 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7048 <dt><pre>
7049 <A NAME="Cudd_addRead"></A>
7050 int <I></I>
7051 <B>Cudd_addRead</B>(
7052 FILE * <b>fp</b>, <i>input file pointer</i>
7053 DdManager * <b>dd</b>, <i>DD manager</i>
7054 DdNode ** <b>E</b>, <i>characteristic function of the graph</i>
7055 DdNode *** <b>x</b>, <i>array of row variables</i>
7056 DdNode *** <b>y</b>, <i>array of column variables</i>
7057 DdNode *** <b>xn</b>, <i>array of complemented row variables</i>
7058 DdNode *** <b>yn_</b>, <i>array of complemented column variables</i>
7059 int * <b>nx</b>, <i>number or row variables</i>
7060 int * <b>ny</b>, <i>number or column variables</i>
7061 int * <b>m</b>, <i>number of rows</i>
7062 int * <b>n</b>, <i>number of columns</i>
7063 int <b>bx</b>, <i>first index of row variables</i>
7064 int <b>sx</b>, <i>step of row variables</i>
7065 int <b>by</b>, <i>first index of column variables</i>
7066 int <b>sy</b> <i>step of column variables</i>
7068 </pre>
7069 <dd> Reads in a sparse matrix specified in a simple format.
7070 The first line of the input contains the numbers of rows and columns.
7071 The remaining lines contain the elements of the matrix, one per line.
7072 Given a background value
7073 (specified by the background field of the manager), only the values
7074 different from it are explicitly listed. Each foreground element is
7075 described by two integers, i.e., the row and column number, and a
7076 real number, i.e., the value.<p>
7077 Cudd_addRead produces an ADD that depends on two sets of variables: x
7078 and y. The x variables (x[0] ... x[nx-1]) encode the row index and
7079 the y variables (y[0] ... y[ny-1]) encode the column index.
7080 x[0] and y[0] are the most significant bits in the indices.
7081 The variables may already exist or may be created by the function.
7082 The index of x[i] is bx+i*sx, and the index of y[i] is by+i*sy.<p>
7083 On input, nx and ny hold the numbers
7084 of row and column variables already in existence. On output, they
7085 hold the numbers of row and column variables actually used by the
7086 matrix. When Cudd_addRead creates the variable arrays,
7087 the index of x[i] is bx+i*sx, and the index of y[i] is by+i*sy.
7088 When some variables already exist Cudd_addRead expects the indices
7089 of the existing x variables to be bx+i*sx, and the indices of the
7090 existing y variables to be by+i*sy.<p>
7091 m and n are set to the numbers of rows and columns of the
7092 matrix. Their values on input are immaterial.
7093 The ADD for the
7094 sparse matrix is returned in E, and its reference count is > 0.
7095 Cudd_addRead returns 1 in case of success; 0 otherwise.
7098 <dd> <b>Side Effects</b> nx and ny are set to the numbers of row and column
7099 variables. m and n are set to the numbers of rows and columns. x and y
7100 are possibly extended to represent the array of row and column
7101 variables. Similarly for xn and yn_, which hold on return from
7102 Cudd_addRead the complements of the row and column variables.
7105 <dd> <b>See Also</b> <code><a href="#Cudd_addHarwell">Cudd_addHarwell</a>
7106 <a href="#Cudd_bddRead">Cudd_bddRead</a>
7107 </code>
7109 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRead.c"TARGET="ABSTRACT"><CODE>cuddRead.c</CODE></A>
7111 <dt><pre>
7112 <A NAME="Cudd_addResidue"></A>
7113 DdNode * <I></I>
7114 <B>Cudd_addResidue</B>(
7115 DdManager * <b>dd</b>, <i>manager</i>
7116 int <b>n</b>, <i>number of bits</i>
7117 int <b>m</b>, <i>modulus</i>
7118 int <b>options</b>, <i>options</i>
7119 int <b>top</b> <i>index of top variable</i>
7121 </pre>
7122 <dd> Builds an ADD for the residue modulo m of an n-bit
7123 number. The modulus must be at least 2, and the number of bits at
7124 least 1. Parameter options specifies whether the MSB should be on top
7125 or the LSB; and whther the number whose residue is computed is in
7126 two's complement notation or not. The macro CUDD_RESIDUE_DEFAULT
7127 specifies LSB on top and unsigned number. The macro CUDD_RESIDUE_MSB
7128 specifies MSB on top, and the macro CUDD_RESIDUE_TC specifies two's
7129 complement residue. To request MSB on top and two's complement residue
7130 simultaneously, one can OR the two macros:
7131 CUDD_RESIDUE_MSB | CUDD_RESIDUE_TC.
7132 Cudd_addResidue returns a pointer to the resulting ADD if successful;
7133 NULL otherwise.
7136 <dd> <b>Side Effects</b> None
7139 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddWalsh.c"TARGET="ABSTRACT"><CODE>cuddAddWalsh.c</CODE></A>
7141 <dt><pre>
7142 <A NAME="Cudd_addRestrict"></A>
7143 DdNode * <I></I>
7144 <B>Cudd_addRestrict</B>(
7145 DdManager * <b>dd</b>, <i></i>
7146 DdNode * <b>f</b>, <i></i>
7147 DdNode * <b>c</b> <i></i>
7149 </pre>
7150 <dd> ADD restrict according to Coudert and Madre's algorithm
7151 (ICCAD90). Returns the restricted ADD if successful; otherwise NULL.
7152 If application of restrict results in an ADD larger than the input
7153 ADD, the input ADD is returned.
7156 <dd> <b>Side Effects</b> None
7159 <dd> <b>See Also</b> <code><a href="#Cudd_addConstrain">Cudd_addConstrain</a>
7160 <a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
7161 </code>
7163 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
7165 <dt><pre>
7166 <A NAME="Cudd_addRoundOff"></A>
7167 DdNode * <I></I>
7168 <B>Cudd_addRoundOff</B>(
7169 DdManager * <b>dd</b>, <i></i>
7170 DdNode * <b>f</b>, <i></i>
7171 int <b>N</b> <i></i>
7173 </pre>
7174 <dd> Rounds off the discriminants of an ADD. The discriminants are
7175 rounded off to N digits after the decimal. Returns a pointer to the result
7176 ADD if successful; NULL otherwise.
7179 <dd> <b>Side Effects</b> None
7182 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>
7184 <dt><pre>
7185 <A NAME="Cudd_addScalarInverse"></A>
7186 DdNode * <I></I>
7187 <B>Cudd_addScalarInverse</B>(
7188 DdManager * <b>dd</b>, <i></i>
7189 DdNode * <b>f</b>, <i></i>
7190 DdNode * <b>epsilon</b> <i></i>
7192 </pre>
7193 <dd> Computes an n ADD where the discriminants are the
7194 multiplicative inverses of the corresponding discriminants of the
7195 argument ADD. Returns a pointer to the resulting ADD in case of
7196 success. Returns NULL if any discriminants smaller than epsilon is
7197 encountered.
7200 <dd> <b>Side Effects</b> None
7203 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddInv.c"TARGET="ABSTRACT"><CODE>cuddAddInv.c</CODE></A>
7205 <dt><pre>
7206 <A NAME="Cudd_addSetNZ"></A>
7207 DdNode * <I></I>
7208 <B>Cudd_addSetNZ</B>(
7209 DdManager * <b>dd</b>, <i></i>
7210 DdNode ** <b>f</b>, <i></i>
7211 DdNode ** <b>g</b> <i></i>
7213 </pre>
7214 <dd> This operator sets f to the value of g wherever g != 0.
7215 Returns NULL if not a terminal case; f op g otherwise.
7218 <dd> <b>Side Effects</b> None
7221 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7222 </code>
7224 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7226 <dt><pre>
7227 <A NAME="Cudd_addSwapVariables"></A>
7228 DdNode * <I></I>
7229 <B>Cudd_addSwapVariables</B>(
7230 DdManager * <b>dd</b>, <i></i>
7231 DdNode * <b>f</b>, <i></i>
7232 DdNode ** <b>x</b>, <i></i>
7233 DdNode ** <b>y</b>, <i></i>
7234 int <b>n</b> <i></i>
7236 </pre>
7237 <dd> Swaps two sets of variables of the same size (x and y) in
7238 the ADD f. The size is given by n. The two sets of variables are
7239 assumed to be disjoint. Returns a pointer to the resulting ADD if
7240 successful; NULL otherwise.
7243 <dd> <b>Side Effects</b> None
7246 <dd> <b>See Also</b> <code><a href="#Cudd_addPermute">Cudd_addPermute</a>
7247 <a href="#Cudd_bddSwapVariables">Cudd_bddSwapVariables</a>
7248 </code>
7250 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
7252 <dt><pre>
7253 <A NAME="Cudd_addThreshold"></A>
7254 DdNode * <I></I>
7255 <B>Cudd_addThreshold</B>(
7256 DdManager * <b>dd</b>, <i></i>
7257 DdNode ** <b>f</b>, <i></i>
7258 DdNode ** <b>g</b> <i></i>
7260 </pre>
7261 <dd> Threshold operator for Apply (f if f &gt;=g; 0 if f&lt;g).
7262 Returns NULL if not a terminal case; f op g otherwise.
7265 <dd> <b>Side Effects</b> None
7268 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7269 </code>
7271 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7273 <dt><pre>
7274 <A NAME="Cudd_addTimesPlus"></A>
7275 DdNode * <I></I>
7276 <B>Cudd_addTimesPlus</B>(
7277 DdManager * <b>dd</b>, <i></i>
7278 DdNode * <b>A</b>, <i></i>
7279 DdNode * <b>B</b>, <i></i>
7280 DdNode ** <b>z</b>, <i></i>
7281 int <b>nz</b> <i></i>
7283 </pre>
7284 <dd> Calculates the product of two matrices, A and B,
7285 represented as ADDs, using the CMU matrix by matrix multiplication
7286 procedure by Clarke et al.. Matrix A has x's as row variables and z's
7287 as column variables, while matrix B has z's as row variables and y's
7288 as column variables. Returns the pointer to the result if successful;
7289 NULL otherwise. The resulting matrix has x's as row variables and y's
7290 as column variables.
7293 <dd> <b>Side Effects</b> None
7296 <dd> <b>See Also</b> <code><a href="#Cudd_addMatrixMultiply">Cudd_addMatrixMultiply</a>
7297 </code>
7299 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
7301 <dt><pre>
7302 <A NAME="Cudd_addTimes"></A>
7303 DdNode * <I></I>
7304 <B>Cudd_addTimes</B>(
7305 DdManager * <b>dd</b>, <i></i>
7306 DdNode ** <b>f</b>, <i></i>
7307 DdNode ** <b>g</b> <i></i>
7309 </pre>
7310 <dd> Integer and floating point multiplication. Returns NULL
7311 if not a terminal case; f * g otherwise. This function can be used also
7312 to take the AND of two 0-1 ADDs.
7315 <dd> <b>Side Effects</b> None
7318 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7319 </code>
7321 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7323 <dt><pre>
7324 <A NAME="Cudd_addTriangle"></A>
7325 DdNode * <I></I>
7326 <B>Cudd_addTriangle</B>(
7327 DdManager * <b>dd</b>, <i></i>
7328 DdNode * <b>f</b>, <i></i>
7329 DdNode * <b>g</b>, <i></i>
7330 DdNode ** <b>z</b>, <i></i>
7331 int <b>nz</b> <i></i>
7333 </pre>
7334 <dd> Implements the semiring multiplication algorithm used in
7335 the triangulation step for the shortest path computation. f
7336 is assumed to depend on variables x (rows) and z (columns). g is
7337 assumed to depend on variables z (rows) and y (columns). The product
7338 of f and g then depends on x (rows) and y (columns). Only the z
7339 variables have to be explicitly identified; they are the
7340 "abstraction" variables. Returns a pointer to the result if
7341 successful; NULL otherwise.
7344 <dd> <b>Side Effects</b> None
7347 <dd> <b>See Also</b> <code><a href="#Cudd_addMatrixMultiply">Cudd_addMatrixMultiply</a>
7348 <a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
7349 </code>
7351 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
7353 <dt><pre>
7354 <A NAME="Cudd_addUnivAbstract"></A>
7355 DdNode * <I></I>
7356 <B>Cudd_addUnivAbstract</B>(
7357 DdManager * <b>manager</b>, <i></i>
7358 DdNode * <b>f</b>, <i></i>
7359 DdNode * <b>cube</b> <i></i>
7361 </pre>
7362 <dd> Abstracts all the variables in cube from f by taking
7363 the product over all possible values taken by the variable. Returns
7364 the abstracted ADD if successful; NULL otherwise.
7367 <dd> <b>Side Effects</b> None
7370 <dd> <b>See Also</b> <code><a href="#Cudd_addExistAbstract">Cudd_addExistAbstract</a>
7371 <a href="#Cudd_bddUnivAbstract">Cudd_bddUnivAbstract</a>
7372 <a href="#Cudd_addOrAbstract">Cudd_addOrAbstract</a>
7373 </code>
7375 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
7377 <dt><pre>
7378 <A NAME="Cudd_addVectorCompose"></A>
7379 DdNode * <I></I>
7380 <B>Cudd_addVectorCompose</B>(
7381 DdManager * <b>dd</b>, <i></i>
7382 DdNode * <b>f</b>, <i></i>
7383 DdNode ** <b>vector</b> <i></i>
7385 </pre>
7386 <dd> Given a vector of 0-1 ADDs, creates a new ADD by
7387 substituting the 0-1 ADDs for the variables of the ADD f. There
7388 should be an entry in vector for each variable in the manager.
7389 If no substitution is sought for a given variable, the corresponding
7390 projection function should be specified in the vector.
7391 This function implements simultaneous composition.
7392 Returns a pointer to the resulting ADD if successful; NULL
7393 otherwise.
7396 <dd> <b>Side Effects</b> None
7399 <dd> <b>See Also</b> <code><a href="#Cudd_addNonSimCompose">Cudd_addNonSimCompose</a>
7400 <a href="#Cudd_addPermute">Cudd_addPermute</a>
7401 <a href="#Cudd_addCompose">Cudd_addCompose</a>
7402 <a href="#Cudd_bddVectorCompose">Cudd_bddVectorCompose</a>
7403 </code>
7405 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
7407 <dt><pre>
7408 <A NAME="Cudd_addWalsh"></A>
7409 DdNode * <I></I>
7410 <B>Cudd_addWalsh</B>(
7411 DdManager * <b>dd</b>, <i></i>
7412 DdNode ** <b>x</b>, <i></i>
7413 DdNode ** <b>y</b>, <i></i>
7414 int <b>n</b> <i></i>
7416 </pre>
7417 <dd> Generates a Walsh matrix in ADD form. Returns a pointer
7418 to the matrixi if successful; NULL otherwise.
7421 <dd> <b>Side Effects</b> None
7424 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddWalsh.c"TARGET="ABSTRACT"><CODE>cuddAddWalsh.c</CODE></A>
7426 <dt><pre>
7427 <A NAME="Cudd_addXeqy"></A>
7428 DdNode * <I></I>
7429 <B>Cudd_addXeqy</B>(
7430 DdManager * <b>dd</b>, <i>DD manager</i>
7431 int <b>N</b>, <i>number of x and y variables</i>
7432 DdNode ** <b>x</b>, <i>array of x variables</i>
7433 DdNode ** <b>y</b> <i>array of y variables</i>
7435 </pre>
7436 <dd> This function generates an ADD for the function x==y.
7437 Both x and y are N-bit numbers, x[0] x[1] ... x[N-1] and
7438 y[0] y[1] ... y[N-1], with 0 the most significant bit.
7439 The ADD is built bottom-up.
7440 It has 3*N-1 internal nodes, if the variables are ordered as follows:
7441 x[0] y[0] x[1] y[1] ... x[N-1] y[N-1].
7444 <dd> <b>Side Effects</b> None
7447 <dd> <b>See Also</b> <code><a href="#Cudd_Xeqy">Cudd_Xeqy</a>
7448 </code>
7450 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
7452 <dt><pre>
7453 <A NAME="Cudd_addXnor"></A>
7454 DdNode * <I></I>
7455 <B>Cudd_addXnor</B>(
7456 DdManager * <b>dd</b>, <i></i>
7457 DdNode ** <b>f</b>, <i></i>
7458 DdNode ** <b>g</b> <i></i>
7460 </pre>
7461 <dd> XNOR of two 0-1 ADDs. Returns NULL
7462 if not a terminal case; f XNOR g otherwise.
7465 <dd> <b>Side Effects</b> None
7468 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7469 </code>
7471 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7473 <dt><pre>
7474 <A NAME="Cudd_addXor"></A>
7475 DdNode * <I></I>
7476 <B>Cudd_addXor</B>(
7477 DdManager * <b>dd</b>, <i></i>
7478 DdNode ** <b>f</b>, <i></i>
7479 DdNode ** <b>g</b> <i></i>
7481 </pre>
7482 <dd> XOR of two 0-1 ADDs. Returns NULL
7483 if not a terminal case; f XOR g otherwise.
7486 <dd> <b>Side Effects</b> None
7489 <dd> <b>See Also</b> <code><a href="#Cudd_addApply">Cudd_addApply</a>
7490 </code>
7492 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
7494 <dt><pre>
7495 <A NAME="Cudd_bddAdjPermuteX"></A>
7496 DdNode * <I></I>
7497 <B>Cudd_bddAdjPermuteX</B>(
7498 DdManager * <b>dd</b>, <i></i>
7499 DdNode * <b>B</b>, <i></i>
7500 DdNode ** <b>x</b>, <i></i>
7501 int <b>n</b> <i></i>
7503 </pre>
7504 <dd> Rearranges a set of variables in the BDD B. The size of
7505 the set is given by n. This procedure is intended for the
7506 `randomization' of the priority functions. Returns a pointer to the
7507 BDD if successful; NULL otherwise.
7510 <dd> <b>Side Effects</b> None
7513 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
7514 <a href="#Cudd_bddSwapVariables">Cudd_bddSwapVariables</a>
7515 <a href="#Cudd_Dxygtdxz">Cudd_Dxygtdxz</a>
7516 <a href="#Cudd_Dxygtdyz">Cudd_Dxygtdyz</a>
7517 <a href="#Cudd_PrioritySelect">Cudd_PrioritySelect</a>
7518 </code>
7520 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
7522 <dt><pre>
7523 <A NAME="Cudd_bddAndAbstractLimit"></A>
7524 DdNode * <I></I>
7525 <B>Cudd_bddAndAbstractLimit</B>(
7526 DdManager * <b>manager</b>, <i></i>
7527 DdNode * <b>f</b>, <i></i>
7528 DdNode * <b>g</b>, <i></i>
7529 DdNode * <b>cube</b>, <i></i>
7530 unsigned int <b>limit</b> <i></i>
7532 </pre>
7533 <dd> Takes the AND of two BDDs and simultaneously abstracts
7534 the variables in cube. The variables are existentially abstracted.
7535 Returns a pointer to the result is successful; NULL otherwise.
7536 In particular, if the number of new nodes created exceeds
7537 <code>limit</code>, this function returns NULL.
7540 <dd> <b>Side Effects</b> None
7543 <dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
7544 </code>
7546 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAndAbs.c"TARGET="ABSTRACT"><CODE>cuddAndAbs.c</CODE></A>
7548 <dt><pre>
7549 <A NAME="Cudd_bddAndAbstract"></A>
7550 DdNode * <I></I>
7551 <B>Cudd_bddAndAbstract</B>(
7552 DdManager * <b>manager</b>, <i></i>
7553 DdNode * <b>f</b>, <i></i>
7554 DdNode * <b>g</b>, <i></i>
7555 DdNode * <b>cube</b> <i></i>
7557 </pre>
7558 <dd> Takes the AND of two BDDs and simultaneously abstracts
7559 the variables in cube. The variables are existentially abstracted.
7560 Returns a pointer to the result is successful; NULL otherwise.
7561 Cudd_bddAndAbstract implements the semiring matrix multiplication
7562 algorithm for the boolean semiring.
7565 <dd> <b>Side Effects</b> None
7568 <dd> <b>See Also</b> <code><a href="#Cudd_addMatrixMultiply">Cudd_addMatrixMultiply</a>
7569 <a href="#Cudd_addTriangle">Cudd_addTriangle</a>
7570 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
7571 </code>
7573 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAndAbs.c"TARGET="ABSTRACT"><CODE>cuddAndAbs.c</CODE></A>
7575 <dt><pre>
7576 <A NAME="Cudd_bddAndLimit"></A>
7577 DdNode * <I></I>
7578 <B>Cudd_bddAndLimit</B>(
7579 DdManager * <b>dd</b>, <i></i>
7580 DdNode * <b>f</b>, <i></i>
7581 DdNode * <b>g</b>, <i></i>
7582 unsigned int <b>limit</b> <i></i>
7584 </pre>
7585 <dd> Computes the conjunction of two BDDs f and g. Returns a
7586 pointer to the resulting BDD if successful; NULL if the intermediate
7587 result blows up or more new nodes than <code>limit</code> are
7588 required.
7591 <dd> <b>Side Effects</b> None
7594 <dd> <b>See Also</b> <code><a href="#Cudd_bddAnd">Cudd_bddAnd</a>
7595 </code>
7597 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
7599 <dt><pre>
7600 <A NAME="Cudd_bddAnd"></A>
7601 DdNode * <I></I>
7602 <B>Cudd_bddAnd</B>(
7603 DdManager * <b>dd</b>, <i></i>
7604 DdNode * <b>f</b>, <i></i>
7605 DdNode * <b>g</b> <i></i>
7607 </pre>
7608 <dd> Computes the conjunction of two BDDs f and g. Returns a
7609 pointer to the resulting BDD if successful; NULL if the intermediate
7610 result blows up.
7613 <dd> <b>Side Effects</b> None
7616 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
7617 <a href="#Cudd_addApply">Cudd_addApply</a>
7618 <a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
7619 <a href="#Cudd_bddIntersect">Cudd_bddIntersect</a>
7620 <a href="#Cudd_bddOr">Cudd_bddOr</a>
7621 <a href="#Cudd_bddNand">Cudd_bddNand</a>
7622 <a href="#Cudd_bddNor">Cudd_bddNor</a>
7623 <a href="#Cudd_bddXor">Cudd_bddXor</a>
7624 <a href="#Cudd_bddXnor">Cudd_bddXnor</a>
7625 </code>
7627 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
7629 <dt><pre>
7630 <A NAME="Cudd_bddApproxConjDecomp"></A>
7631 int <I></I>
7632 <B>Cudd_bddApproxConjDecomp</B>(
7633 DdManager * <b>dd</b>, <i>manager</i>
7634 DdNode * <b>f</b>, <i>function to be decomposed</i>
7635 DdNode *** <b>conjuncts</b> <i>address of the first factor</i>
7637 </pre>
7638 <dd> Performs two-way conjunctive decomposition of a
7639 BDD. This procedure owes its name to the use of supersetting to
7640 obtain an initial factor of the given function. Returns the number
7641 of conjuncts produced, that is, 2 if successful; 1 if no meaningful
7642 decomposition was found; 0 otherwise. The conjuncts produced by this
7643 procedure tend to be imbalanced.
7646 <dd> <b>Side Effects</b> The factors are returned in an array as side effects.
7647 The array is allocated by this function. It is the caller's responsibility
7648 to free it. On successful completion, the conjuncts are already
7649 referenced. If the function returns 0, the array for the conjuncts is
7650 not allocated. If the function returns 1, the only factor equals the
7651 function to be decomposed.
7654 <dd> <b>See Also</b> <code><a href="#Cudd_bddApproxDisjDecomp">Cudd_bddApproxDisjDecomp</a>
7655 <a href="#Cudd_bddIterConjDecomp">Cudd_bddIterConjDecomp</a>
7656 <a href="#Cudd_bddGenConjDecomp">Cudd_bddGenConjDecomp</a>
7657 <a href="#Cudd_bddVarConjDecomp">Cudd_bddVarConjDecomp</a>
7658 <a href="#Cudd_RemapOverApprox">Cudd_RemapOverApprox</a>
7659 <a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
7660 <a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
7661 </code>
7663 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
7665 <dt><pre>
7666 <A NAME="Cudd_bddApproxDisjDecomp"></A>
7667 int <I></I>
7668 <B>Cudd_bddApproxDisjDecomp</B>(
7669 DdManager * <b>dd</b>, <i>manager</i>
7670 DdNode * <b>f</b>, <i>function to be decomposed</i>
7671 DdNode *** <b>disjuncts</b> <i>address of the array of the disjuncts</i>
7673 </pre>
7674 <dd> Performs two-way disjunctive decomposition of a BDD.
7675 Returns the number of disjuncts produced, that is, 2 if successful;
7676 1 if no meaningful decomposition was found; 0 otherwise. The
7677 disjuncts produced by this procedure tend to be imbalanced.
7680 <dd> <b>Side Effects</b> The two disjuncts are returned in an array as side effects.
7681 The array is allocated by this function. It is the caller's responsibility
7682 to free it. On successful completion, the disjuncts are already
7683 referenced. If the function returns 0, the array for the disjuncts is
7684 not allocated. If the function returns 1, the only factor equals the
7685 function to be decomposed.
7688 <dd> <b>See Also</b> <code><a href="#Cudd_bddApproxConjDecomp">Cudd_bddApproxConjDecomp</a>
7689 <a href="#Cudd_bddIterDisjDecomp">Cudd_bddIterDisjDecomp</a>
7690 <a href="#Cudd_bddGenDisjDecomp">Cudd_bddGenDisjDecomp</a>
7691 <a href="#Cudd_bddVarDisjDecomp">Cudd_bddVarDisjDecomp</a>
7692 </code>
7694 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
7696 <dt><pre>
7697 <A NAME="Cudd_bddBindVar"></A>
7698 int <I></I>
7699 <B>Cudd_bddBindVar</B>(
7700 DdManager * <b>dd</b>, <i>manager</i>
7701 int <b>index</b> <i>variable index</i>
7703 </pre>
7704 <dd> This function sets a flag to prevent sifting of a
7705 variable. Returns 1 if successful; 0 otherwise (i.e., invalid
7706 variable index).
7709 <dd> <b>Side Effects</b> Changes the "bindVar" flag in DdSubtable.
7712 <dd> <b>See Also</b> <code><a href="#Cudd_bddUnbindVar">Cudd_bddUnbindVar</a>
7713 </code>
7715 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
7717 <dt><pre>
7718 <A NAME="Cudd_bddBooleanDiff"></A>
7719 DdNode * <I></I>
7720 <B>Cudd_bddBooleanDiff</B>(
7721 DdManager * <b>manager</b>, <i></i>
7722 DdNode * <b>f</b>, <i></i>
7723 int <b>x</b> <i></i>
7725 </pre>
7726 <dd> Computes the boolean difference of f with respect to the
7727 variable with index x. Returns the BDD of the boolean difference if
7728 successful; NULL otherwise.
7731 <dd> <b>Side Effects</b> None
7734 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
7736 <dt><pre>
7737 <A NAME="Cudd_bddCharToVect"></A>
7738 DdNode ** <I></I>
7739 <B>Cudd_bddCharToVect</B>(
7740 DdManager * <b>dd</b>, <i></i>
7741 DdNode * <b>f</b> <i></i>
7743 </pre>
7744 <dd> Computes a vector of BDDs whose image equals a non-zero
7745 function.
7746 The result depends on the variable order. The i-th component of the vector
7747 depends only on the first i variables in the order. Each BDD in the vector
7748 is not larger than the BDD of the given characteristic function. This
7749 function is based on the description of char-to-vect in "Verification of
7750 Sequential Machines Using Boolean Functional Vectors" by O. Coudert, C.
7751 Berthet and J. C. Madre.
7752 Returns a pointer to an array containing the result if successful; NULL
7753 otherwise. The size of the array equals the number of variables in the
7754 manager. The components of the solution have their reference counts
7755 already incremented (unlike the results of most other functions in
7756 the package).
7759 <dd> <b>Side Effects</b> None
7762 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
7763 </code>
7765 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
7767 <dt><pre>
7768 <A NAME="Cudd_bddClippingAndAbstract"></A>
7769 DdNode * <I></I>
7770 <B>Cudd_bddClippingAndAbstract</B>(
7771 DdManager * <b>dd</b>, <i>manager</i>
7772 DdNode * <b>f</b>, <i>first conjunct</i>
7773 DdNode * <b>g</b>, <i>second conjunct</i>
7774 DdNode * <b>cube</b>, <i>cube of variables to be abstracted</i>
7775 int <b>maxDepth</b>, <i>maximum recursion depth</i>
7776 int <b>direction</b> <i>under (0) or over (1) approximation</i>
7778 </pre>
7779 <dd> Approximates the conjunction of two BDDs f and g and
7780 simultaneously abstracts the variables in cube. The variables are
7781 existentially abstracted. Returns a pointer to the resulting BDD if
7782 successful; NULL if the intermediate result blows up.
7785 <dd> <b>Side Effects</b> None
7788 <dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
7789 <a href="#Cudd_bddClippingAnd">Cudd_bddClippingAnd</a>
7790 </code>
7792 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
7794 <dt><pre>
7795 <A NAME="Cudd_bddClippingAnd"></A>
7796 DdNode * <I></I>
7797 <B>Cudd_bddClippingAnd</B>(
7798 DdManager * <b>dd</b>, <i>manager</i>
7799 DdNode * <b>f</b>, <i>first conjunct</i>
7800 DdNode * <b>g</b>, <i>second conjunct</i>
7801 int <b>maxDepth</b>, <i>maximum recursion depth</i>
7802 int <b>direction</b> <i>under (0) or over (1) approximation</i>
7804 </pre>
7805 <dd> Approximates the conjunction of two BDDs f and g. Returns a
7806 pointer to the resulting BDD if successful; NULL if the intermediate
7807 result blows up.
7810 <dd> <b>Side Effects</b> None
7813 <dd> <b>See Also</b> <code><a href="#Cudd_bddAnd">Cudd_bddAnd</a>
7814 </code>
7816 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
7818 <dt><pre>
7819 <A NAME="Cudd_bddClosestCube"></A>
7820 DdNode * <I></I>
7821 <B>Cudd_bddClosestCube</B>(
7822 DdManager * <b>dd</b>, <i></i>
7823 DdNode * <b>f</b>, <i></i>
7824 DdNode * <b>g</b>, <i></i>
7825 int * <b>distance</b> <i></i>
7827 </pre>
7828 <dd> Finds a cube of f at minimum Hamming distance from the
7829 minterms of g. All the minterms of the cube are at the minimum
7830 distance. If the distance is 0, the cube belongs to the
7831 intersection of f and g. Returns the cube if successful; NULL
7832 otherwise.
7835 <dd> <b>Side Effects</b> The distance is returned as a side effect.
7838 <dd> <b>See Also</b> <code><a href="#Cudd_MinHammingDist">Cudd_MinHammingDist</a>
7839 </code>
7841 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
7843 <dt><pre>
7844 <A NAME="Cudd_bddCompose"></A>
7845 DdNode * <I></I>
7846 <B>Cudd_bddCompose</B>(
7847 DdManager * <b>dd</b>, <i></i>
7848 DdNode * <b>f</b>, <i></i>
7849 DdNode * <b>g</b>, <i></i>
7850 int <b>v</b> <i></i>
7852 </pre>
7853 <dd> Substitutes g for x_v in the BDD for f. v is the index of the
7854 variable to be substituted. Cudd_bddCompose passes the corresponding
7855 projection function to the recursive procedure, so that the cache may
7856 be used. Returns the composed BDD if successful; NULL otherwise.
7859 <dd> <b>Side Effects</b> None
7862 <dd> <b>See Also</b> <code><a href="#Cudd_addCompose">Cudd_addCompose</a>
7863 </code>
7865 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
7867 <dt><pre>
7868 <A NAME="Cudd_bddComputeCube"></A>
7869 DdNode * <I></I>
7870 <B>Cudd_bddComputeCube</B>(
7871 DdManager * <b>dd</b>, <i></i>
7872 DdNode ** <b>vars</b>, <i></i>
7873 int * <b>phase</b>, <i></i>
7874 int <b>n</b> <i></i>
7876 </pre>
7877 <dd> Computes the cube of an array of BDD variables. If
7878 non-null, the phase argument indicates which literal of each
7879 variable should appear in the cube. If phase[i] is nonzero, then the
7880 positive literal is used. If phase is NULL, the cube is positive unate.
7881 Returns a pointer to the result if successful; NULL otherwise.
7884 <dd> <b>Side Effects</b> None
7887 <dd> <b>See Also</b> <code><a href="#Cudd_addComputeCube">Cudd_addComputeCube</a>
7888 <a href="#Cudd_IndicesToCube">Cudd_IndicesToCube</a>
7889 <a href="#Cudd_CubeArrayToBdd">Cudd_CubeArrayToBdd</a>
7890 </code>
7892 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
7894 <dt><pre>
7895 <A NAME="Cudd_bddConstrainDecomp"></A>
7896 DdNode ** <I></I>
7897 <B>Cudd_bddConstrainDecomp</B>(
7898 DdManager * <b>dd</b>, <i></i>
7899 DdNode * <b>f</b> <i></i>
7901 </pre>
7902 <dd> BDD conjunctive decomposition as in McMillan's CAV96
7903 paper. The decomposition is canonical only for a given variable
7904 order. If canonicity is required, variable ordering must be disabled
7905 after the decomposition has been computed. Returns an array with one
7906 entry for each BDD variable in the manager if successful; otherwise
7907 NULL. The components of the solution have their reference counts
7908 already incremented (unlike the results of most other functions in
7909 the package.
7912 <dd> <b>Side Effects</b> None
7915 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
7916 <a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
7917 </code>
7919 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
7921 <dt><pre>
7922 <A NAME="Cudd_bddConstrain"></A>
7923 DdNode * <I></I>
7924 <B>Cudd_bddConstrain</B>(
7925 DdManager * <b>dd</b>, <i></i>
7926 DdNode * <b>f</b>, <i></i>
7927 DdNode * <b>c</b> <i></i>
7929 </pre>
7930 <dd> Computes f constrain c (f @ c).
7931 Uses a canonical form: (f' @ c) = ( f @ c)'. (Note: this is not true
7932 for c.) List of special cases:
7933 <ul>
7934 <li> f @ 0 = 0
7935 <li> f @ 1 = f
7936 <li> 0 @ c = 0
7937 <li> 1 @ c = 1
7938 <li> f @ f = 1
7939 <li> f @ f'= 0
7940 </ul>
7941 Returns a pointer to the result if successful; NULL otherwise. Note that if
7942 F=(f1,...,fn) and reordering takes place while computing F @ c, then the
7943 image restriction property (Img(F,c) = Img(F @ c)) is lost.
7946 <dd> <b>Side Effects</b> None
7949 <dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
7950 <a href="#Cudd_addConstrain">Cudd_addConstrain</a>
7951 </code>
7953 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
7955 <dt><pre>
7956 <A NAME="Cudd_bddCorrelationWeights"></A>
7957 double <I></I>
7958 <B>Cudd_bddCorrelationWeights</B>(
7959 DdManager * <b>manager</b>, <i></i>
7960 DdNode * <b>f</b>, <i></i>
7961 DdNode * <b>g</b>, <i></i>
7962 double * <b>prob</b> <i></i>
7964 </pre>
7965 <dd> Computes the correlation of f and g for given input
7966 probabilities. On input, prob[i] is supposed to contain the
7967 probability of the i-th input variable to be 1.
7968 If f == g, their correlation is 1. If f == g', their
7969 correlation is 0. Returns the probability that f and g have the same
7970 value. If it runs out of memory, returns (double)CUDD_OUT_OF_MEM. The
7971 correlation of f and the constant one gives the probability of f.
7974 <dd> <b>Side Effects</b> None
7977 <dd> <b>See Also</b> <code><a href="#Cudd_bddCorrelation">Cudd_bddCorrelation</a>
7978 </code>
7980 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
7982 <dt><pre>
7983 <A NAME="Cudd_bddCorrelation"></A>
7984 double <I></I>
7985 <B>Cudd_bddCorrelation</B>(
7986 DdManager * <b>manager</b>, <i></i>
7987 DdNode * <b>f</b>, <i></i>
7988 DdNode * <b>g</b> <i></i>
7990 </pre>
7991 <dd> Computes the correlation of f and g. If f == g, their
7992 correlation is 1. If f == g', their correlation is 0. Returns the
7993 fraction of minterms in the ON-set of the EXNOR of f and g. If it
7994 runs out of memory, returns (double)CUDD_OUT_OF_MEM.
7997 <dd> <b>Side Effects</b> None
8000 <dd> <b>See Also</b> <code><a href="#Cudd_bddCorrelationWeights">Cudd_bddCorrelationWeights</a>
8001 </code>
8003 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
8005 <dt><pre>
8006 <A NAME="Cudd_bddExistAbstract"></A>
8007 DdNode * <I></I>
8008 <B>Cudd_bddExistAbstract</B>(
8009 DdManager * <b>manager</b>, <i></i>
8010 DdNode * <b>f</b>, <i></i>
8011 DdNode * <b>cube</b> <i></i>
8013 </pre>
8014 <dd> Existentially abstracts all the variables in cube from f.
8015 Returns the abstracted BDD if successful; NULL otherwise.
8018 <dd> <b>Side Effects</b> None
8021 <dd> <b>See Also</b> <code><a href="#Cudd_bddUnivAbstract">Cudd_bddUnivAbstract</a>
8022 <a href="#Cudd_addExistAbstract">Cudd_addExistAbstract</a>
8023 </code>
8025 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
8027 <dt><pre>
8028 <A NAME="Cudd_bddGenConjDecomp"></A>
8029 int <I></I>
8030 <B>Cudd_bddGenConjDecomp</B>(
8031 DdManager * <b>dd</b>, <i>manager</i>
8032 DdNode * <b>f</b>, <i>function to be decomposed</i>
8033 DdNode *** <b>conjuncts</b> <i>address of the array of conjuncts</i>
8035 </pre>
8036 <dd> Performs two-way conjunctive decomposition of a
8037 BDD. This procedure owes its name to the fact tht it generalizes the
8038 decomposition based on the cofactors with respect to one
8039 variable. Returns the number of conjuncts produced, that is, 2 if
8040 successful; 1 if no meaningful decomposition was found; 0
8041 otherwise. The conjuncts produced by this procedure tend to be
8042 balanced.
8045 <dd> <b>Side Effects</b> The two factors are returned in an array as side effects.
8046 The array is allocated by this function. It is the caller's responsibility
8047 to free it. On successful completion, the conjuncts are already
8048 referenced. If the function returns 0, the array for the conjuncts is
8049 not allocated. If the function returns 1, the only factor equals the
8050 function to be decomposed.
8053 <dd> <b>See Also</b> <code><a href="#Cudd_bddGenDisjDecomp">Cudd_bddGenDisjDecomp</a>
8054 <a href="#Cudd_bddApproxConjDecomp">Cudd_bddApproxConjDecomp</a>
8055 <a href="#Cudd_bddIterConjDecomp">Cudd_bddIterConjDecomp</a>
8056 <a href="#Cudd_bddVarConjDecomp">Cudd_bddVarConjDecomp</a>
8057 </code>
8059 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
8061 <dt><pre>
8062 <A NAME="Cudd_bddGenDisjDecomp"></A>
8063 int <I></I>
8064 <B>Cudd_bddGenDisjDecomp</B>(
8065 DdManager * <b>dd</b>, <i>manager</i>
8066 DdNode * <b>f</b>, <i>function to be decomposed</i>
8067 DdNode *** <b>disjuncts</b> <i>address of the array of the disjuncts</i>
8069 </pre>
8070 <dd> Performs two-way disjunctive decomposition of a BDD.
8071 Returns the number of disjuncts produced, that is, 2 if successful;
8072 1 if no meaningful decomposition was found; 0 otherwise. The
8073 disjuncts produced by this procedure tend to be balanced.
8076 <dd> <b>Side Effects</b> The two disjuncts are returned in an array as side effects.
8077 The array is allocated by this function. It is the caller's responsibility
8078 to free it. On successful completion, the disjuncts are already
8079 referenced. If the function returns 0, the array for the disjuncts is
8080 not allocated. If the function returns 1, the only factor equals the
8081 function to be decomposed.
8084 <dd> <b>See Also</b> <code><a href="#Cudd_bddGenConjDecomp">Cudd_bddGenConjDecomp</a>
8085 <a href="#Cudd_bddApproxDisjDecomp">Cudd_bddApproxDisjDecomp</a>
8086 <a href="#Cudd_bddIterDisjDecomp">Cudd_bddIterDisjDecomp</a>
8087 <a href="#Cudd_bddVarDisjDecomp">Cudd_bddVarDisjDecomp</a>
8088 </code>
8090 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
8092 <dt><pre>
8093 <A NAME="Cudd_bddIntersect"></A>
8094 DdNode * <I></I>
8095 <B>Cudd_bddIntersect</B>(
8096 DdManager * <b>dd</b>, <i>manager</i>
8097 DdNode * <b>f</b>, <i>first operand</i>
8098 DdNode * <b>g</b> <i>second operand</i>
8100 </pre>
8101 <dd> Computes a function included in the intersection of f and
8102 g. (That is, a witness that the intersection is not empty.)
8103 Cudd_bddIntersect tries to build as few new nodes as possible. If the
8104 only result of interest is whether f and g intersect,
8105 Cudd_bddLeq should be used instead.
8108 <dd> <b>Side Effects</b> None
8111 <dd> <b>See Also</b> <code><a href="#Cudd_bddLeq">Cudd_bddLeq</a>
8112 <a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
8113 </code>
8115 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8117 <dt><pre>
8118 <A NAME="Cudd_bddInterval"></A>
8119 DdNode * <I></I>
8120 <B>Cudd_bddInterval</B>(
8121 DdManager * <b>dd</b>, <i>DD manager</i>
8122 int <b>N</b>, <i>number of x variables</i>
8123 DdNode ** <b>x</b>, <i>array of x variables</i>
8124 unsigned int <b>lowerB</b>, <i>lower bound</i>
8125 unsigned int <b>upperB</b> <i>upper bound</i>
8127 </pre>
8128 <dd> This function generates a BDD for the function
8129 lowerB &le; x &le; upperB, where x is an N-bit number,
8130 x[0] x[1] ... x[N-1], with 0 the most significant bit (important!).
8131 The number of variables N should be sufficient to represent the bounds;
8132 otherwise, the bounds are truncated to their N least significant bits.
8133 Two BDDs are built bottom-up for lowerB &le; x and x &le; upperB, and they
8134 are finally conjoined.
8137 <dd> <b>Side Effects</b> None
8140 <dd> <b>See Also</b> <code><a href="#Cudd_Xgty">Cudd_Xgty</a>
8141 </code>
8143 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
8145 <dt><pre>
8146 <A NAME="Cudd_bddIsNsVar"></A>
8147 int <I></I>
8148 <B>Cudd_bddIsNsVar</B>(
8149 DdManager * <b>dd</b>, <i></i>
8150 int <b>index</b> <i></i>
8152 </pre>
8153 <dd> Checks whether a variable is next state. Returns 1 if
8154 the variable's type is present state; 0 if the variable exists but is
8155 not a present state; -1 if the variable does not exist.
8158 <dd> <b>Side Effects</b> none
8161 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetNsVar">Cudd_bddSetNsVar</a>
8162 <a href="#Cudd_bddIsPiVar">Cudd_bddIsPiVar</a>
8163 <a href="#Cudd_bddIsPsVar">Cudd_bddIsPsVar</a>
8164 </code>
8166 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8168 <dt><pre>
8169 <A NAME="Cudd_bddIsPiVar"></A>
8170 int <I></I>
8171 <B>Cudd_bddIsPiVar</B>(
8172 DdManager * <b>dd</b>, <i>manager</i>
8173 int <b>index</b> <i>variable index</i>
8175 </pre>
8176 <dd> Checks whether a variable is primary input. Returns 1 if
8177 the variable's type is primary input; 0 if the variable exists but is
8178 not a primary input; -1 if the variable does not exist.
8181 <dd> <b>Side Effects</b> none
8184 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPiVar">Cudd_bddSetPiVar</a>
8185 <a href="#Cudd_bddIsPsVar">Cudd_bddIsPsVar</a>
8186 <a href="#Cudd_bddIsNsVar">Cudd_bddIsNsVar</a>
8187 </code>
8189 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8191 <dt><pre>
8192 <A NAME="Cudd_bddIsPsVar"></A>
8193 int <I></I>
8194 <B>Cudd_bddIsPsVar</B>(
8195 DdManager * <b>dd</b>, <i></i>
8196 int <b>index</b> <i></i>
8198 </pre>
8199 <dd> Checks whether a variable is present state. Returns 1 if
8200 the variable's type is present state; 0 if the variable exists but is
8201 not a present state; -1 if the variable does not exist.
8204 <dd> <b>Side Effects</b> none
8207 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPsVar">Cudd_bddSetPsVar</a>
8208 <a href="#Cudd_bddIsPiVar">Cudd_bddIsPiVar</a>
8209 <a href="#Cudd_bddIsNsVar">Cudd_bddIsNsVar</a>
8210 </code>
8212 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8214 <dt><pre>
8215 <A NAME="Cudd_bddIsVarEssential"></A>
8216 int <I></I>
8217 <B>Cudd_bddIsVarEssential</B>(
8218 DdManager * <b>manager</b>, <i></i>
8219 DdNode * <b>f</b>, <i></i>
8220 int <b>id</b>, <i></i>
8221 int <b>phase</b> <i></i>
8223 </pre>
8224 <dd> Determines whether a given variable is essential with a
8225 given phase in a BDD. Uses Cudd_bddIteConstant. Returns 1 if phase == 1
8226 and f-->x_id, or if phase == 0 and f-->x_id'.
8229 <dd> <b>Side Effects</b> None
8232 <dd> <b>See Also</b> <code><a href="#Cudd_FindEssential">Cudd_FindEssential</a>
8233 </code>
8235 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
8237 <dt><pre>
8238 <A NAME="Cudd_bddIsVarHardGroup"></A>
8239 int <I></I>
8240 <B>Cudd_bddIsVarHardGroup</B>(
8241 DdManager * <b>dd</b>, <i></i>
8242 int <b>index</b> <i></i>
8244 </pre>
8245 <dd> Checks whether a variable is set to be in a hard group. This
8246 function is used for lazy sifting. Returns 1 if the variable is marked
8247 to be in a hard group; 0 if the variable exists, but it is not marked to be
8248 in a hard group; -1 if the variable does not exist.
8251 <dd> <b>Side Effects</b> none
8254 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetVarHardGroup">Cudd_bddSetVarHardGroup</a>
8255 </code>
8257 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8259 <dt><pre>
8260 <A NAME="Cudd_bddIsVarToBeGrouped"></A>
8261 int <I></I>
8262 <B>Cudd_bddIsVarToBeGrouped</B>(
8263 DdManager * <b>dd</b>, <i></i>
8264 int <b>index</b> <i></i>
8266 </pre>
8267 <dd> Checks whether a variable is set to be grouped. This
8268 function is used for lazy sifting.
8271 <dd> <b>Side Effects</b> none
8274 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8276 <dt><pre>
8277 <A NAME="Cudd_bddIsVarToBeUngrouped"></A>
8278 int <I></I>
8279 <B>Cudd_bddIsVarToBeUngrouped</B>(
8280 DdManager * <b>dd</b>, <i></i>
8281 int <b>index</b> <i></i>
8283 </pre>
8284 <dd> Checks whether a variable is set to be ungrouped. This
8285 function is used for lazy sifting. Returns 1 if the variable is marked
8286 to be ungrouped; 0 if the variable exists, but it is not marked to be
8287 ungrouped; -1 if the variable does not exist.
8290 <dd> <b>Side Effects</b> none
8293 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetVarToBeUngrouped">Cudd_bddSetVarToBeUngrouped</a>
8294 </code>
8296 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8298 <dt><pre>
8299 <A NAME="Cudd_bddIsop"></A>
8300 DdNode * <I></I>
8301 <B>Cudd_bddIsop</B>(
8302 DdManager * <b>dd</b>, <i></i>
8303 DdNode * <b>L</b>, <i></i>
8304 DdNode * <b>U</b> <i></i>
8306 </pre>
8307 <dd> Computes a BDD in the interval between L and U with a
8308 simple sum-of-produuct cover. This procedure is similar to
8309 Cudd_zddIsop, but it does not return the ZDD for the cover. Returns
8310 a pointer to the BDD if successful; NULL otherwise.
8313 <dd> <b>Side Effects</b> None
8316 <dd> <b>See Also</b> <code><a href="#Cudd_zddIsop">Cudd_zddIsop</a>
8317 </code>
8319 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
8321 <dt><pre>
8322 <A NAME="Cudd_bddIteConstant"></A>
8323 DdNode * <I></I>
8324 <B>Cudd_bddIteConstant</B>(
8325 DdManager * <b>dd</b>, <i></i>
8326 DdNode * <b>f</b>, <i></i>
8327 DdNode * <b>g</b>, <i></i>
8328 DdNode * <b>h</b> <i></i>
8330 </pre>
8331 <dd> Implements ITEconstant(f,g,h). Returns a pointer to the
8332 resulting BDD (which may or may not be constant) or DD_NON_CONSTANT.
8333 No new nodes are created.
8336 <dd> <b>Side Effects</b> None
8339 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
8340 <a href="#Cudd_bddIntersect">Cudd_bddIntersect</a>
8341 <a href="#Cudd_bddLeq">Cudd_bddLeq</a>
8342 <a href="#Cudd_addIteConstant">Cudd_addIteConstant</a>
8343 </code>
8345 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8347 <dt><pre>
8348 <A NAME="Cudd_bddIterConjDecomp"></A>
8349 int <I></I>
8350 <B>Cudd_bddIterConjDecomp</B>(
8351 DdManager * <b>dd</b>, <i>manager</i>
8352 DdNode * <b>f</b>, <i>function to be decomposed</i>
8353 DdNode *** <b>conjuncts</b> <i>address of the array of conjuncts</i>
8355 </pre>
8356 <dd> Performs two-way conjunctive decomposition of a
8357 BDD. This procedure owes its name to the iterated use of
8358 supersetting to obtain a factor of the given function. Returns the
8359 number of conjuncts produced, that is, 2 if successful; 1 if no
8360 meaningful decomposition was found; 0 otherwise. The conjuncts
8361 produced by this procedure tend to be imbalanced.
8364 <dd> <b>Side Effects</b> The factors are returned in an array as side effects.
8365 The array is allocated by this function. It is the caller's responsibility
8366 to free it. On successful completion, the conjuncts are already
8367 referenced. If the function returns 0, the array for the conjuncts is
8368 not allocated. If the function returns 1, the only factor equals the
8369 function to be decomposed.
8372 <dd> <b>See Also</b> <code><a href="#Cudd_bddIterDisjDecomp">Cudd_bddIterDisjDecomp</a>
8373 <a href="#Cudd_bddApproxConjDecomp">Cudd_bddApproxConjDecomp</a>
8374 <a href="#Cudd_bddGenConjDecomp">Cudd_bddGenConjDecomp</a>
8375 <a href="#Cudd_bddVarConjDecomp">Cudd_bddVarConjDecomp</a>
8376 <a href="#Cudd_RemapOverApprox">Cudd_RemapOverApprox</a>
8377 <a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
8378 <a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
8379 </code>
8381 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
8383 <dt><pre>
8384 <A NAME="Cudd_bddIterDisjDecomp"></A>
8385 int <I></I>
8386 <B>Cudd_bddIterDisjDecomp</B>(
8387 DdManager * <b>dd</b>, <i>manager</i>
8388 DdNode * <b>f</b>, <i>function to be decomposed</i>
8389 DdNode *** <b>disjuncts</b> <i>address of the array of the disjuncts</i>
8391 </pre>
8392 <dd> Performs two-way disjunctive decomposition of a BDD.
8393 Returns the number of disjuncts produced, that is, 2 if successful;
8394 1 if no meaningful decomposition was found; 0 otherwise. The
8395 disjuncts produced by this procedure tend to be imbalanced.
8398 <dd> <b>Side Effects</b> The two disjuncts are returned in an array as side effects.
8399 The array is allocated by this function. It is the caller's responsibility
8400 to free it. On successful completion, the disjuncts are already
8401 referenced. If the function returns 0, the array for the disjuncts is
8402 not allocated. If the function returns 1, the only factor equals the
8403 function to be decomposed.
8406 <dd> <b>See Also</b> <code><a href="#Cudd_bddIterConjDecomp">Cudd_bddIterConjDecomp</a>
8407 <a href="#Cudd_bddApproxDisjDecomp">Cudd_bddApproxDisjDecomp</a>
8408 <a href="#Cudd_bddGenDisjDecomp">Cudd_bddGenDisjDecomp</a>
8409 <a href="#Cudd_bddVarDisjDecomp">Cudd_bddVarDisjDecomp</a>
8410 </code>
8412 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
8414 <dt><pre>
8415 <A NAME="Cudd_bddIte"></A>
8416 DdNode * <I></I>
8417 <B>Cudd_bddIte</B>(
8418 DdManager * <b>dd</b>, <i></i>
8419 DdNode * <b>f</b>, <i></i>
8420 DdNode * <b>g</b>, <i></i>
8421 DdNode * <b>h</b> <i></i>
8423 </pre>
8424 <dd> Implements ITE(f,g,h). Returns a pointer to the
8425 resulting BDD if successful; NULL if the intermediate result blows
8429 <dd> <b>Side Effects</b> None
8432 <dd> <b>See Also</b> <code><a href="#Cudd_addIte">Cudd_addIte</a>
8433 <a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
8434 <a href="#Cudd_bddIntersect">Cudd_bddIntersect</a>
8435 </code>
8437 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8439 <dt><pre>
8440 <A NAME="Cudd_bddIthVar"></A>
8441 DdNode * <I></I>
8442 <B>Cudd_bddIthVar</B>(
8443 DdManager * <b>dd</b>, <i></i>
8444 int <b>i</b> <i></i>
8446 </pre>
8447 <dd> Retrieves the BDD variable with index i if it already
8448 exists, or creates a new BDD variable. Returns a pointer to the
8449 variable if successful; NULL otherwise.
8452 <dd> <b>Side Effects</b> None
8455 <dd> <b>See Also</b> <code><a href="#Cudd_bddNewVar">Cudd_bddNewVar</a>
8456 <a href="#Cudd_addIthVar">Cudd_addIthVar</a>
8457 <a href="#Cudd_bddNewVarAtLevel">Cudd_bddNewVarAtLevel</a>
8458 <a href="#Cudd_ReadVars">Cudd_ReadVars</a>
8459 </code>
8461 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8463 <dt><pre>
8464 <A NAME="Cudd_bddLICompaction"></A>
8465 DdNode * <I></I>
8466 <B>Cudd_bddLICompaction</B>(
8467 DdManager * <b>dd</b>, <i>manager</i>
8468 DdNode * <b>f</b>, <i>function to be minimized</i>
8469 DdNode * <b>c</b> <i>constraint (care set)</i>
8471 </pre>
8472 <dd> Performs safe minimization of a BDD. Given the BDD
8473 <code>f</code> of a function to be minimized and a BDD
8474 <code>c</code> representing the care set, Cudd_bddLICompaction
8475 produces the BDD of a function that agrees with <code>f</code>
8476 wherever <code>c</code> is 1. Safe minimization means that the size
8477 of the result is guaranteed not to exceed the size of
8478 <code>f</code>. This function is based on the DAC97 paper by Hong et
8479 al.. Returns a pointer to the result if successful; NULL
8480 otherwise.
8483 <dd> <b>Side Effects</b> None
8486 <dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
8487 </code>
8489 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
8491 <dt><pre>
8492 <A NAME="Cudd_bddLeqUnless"></A>
8493 int <I></I>
8494 <B>Cudd_bddLeqUnless</B>(
8495 DdManager * <b>dd</b>, <i></i>
8496 DdNode * <b>f</b>, <i></i>
8497 DdNode * <b>g</b>, <i></i>
8498 DdNode * <b>D</b> <i></i>
8500 </pre>
8501 <dd> Tells whether f is less than of equal to G unless D is
8502 1. f, g, and D are BDDs. The function returns 1 if f is less than
8503 of equal to G, and 0 otherwise. No new nodes are created.
8506 <dd> <b>Side Effects</b> None
8509 <dd> <b>See Also</b> <code><a href="#Cudd_EquivDC">Cudd_EquivDC</a>
8510 <a href="#Cudd_bddLeq">Cudd_bddLeq</a>
8511 <a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
8512 </code>
8514 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
8516 <dt><pre>
8517 <A NAME="Cudd_bddLeq"></A>
8518 int <I></I>
8519 <B>Cudd_bddLeq</B>(
8520 DdManager * <b>dd</b>, <i></i>
8521 DdNode * <b>f</b>, <i></i>
8522 DdNode * <b>g</b> <i></i>
8524 </pre>
8525 <dd> Returns 1 if f is less than or equal to g; 0 otherwise.
8526 No new nodes are created.
8529 <dd> <b>Side Effects</b> None
8532 <dd> <b>See Also</b> <code><a href="#Cudd_bddIteConstant">Cudd_bddIteConstant</a>
8533 <a href="#Cudd_addEvalConst">Cudd_addEvalConst</a>
8534 </code>
8536 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8538 <dt><pre>
8539 <A NAME="Cudd_bddLiteralSetIntersection"></A>
8540 DdNode * <I></I>
8541 <B>Cudd_bddLiteralSetIntersection</B>(
8542 DdManager * <b>dd</b>, <i></i>
8543 DdNode * <b>f</b>, <i></i>
8544 DdNode * <b>g</b> <i></i>
8546 </pre>
8547 <dd> Computes the intesection of two sets of literals
8548 represented as BDDs. Each set is represented as a cube of the
8549 literals in the set. The empty set is represented by the constant 1.
8550 No variable can be simultaneously present in both phases in a set.
8551 Returns a pointer to the BDD representing the intersected sets, if
8552 successful; NULL otherwise.
8555 <dd> <b>Side Effects</b> None
8558 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLiteral.c"TARGET="ABSTRACT"><CODE>cuddLiteral.c</CODE></A>
8560 <dt><pre>
8561 <A NAME="Cudd_bddMakePrime"></A>
8562 DdNode * <I></I>
8563 <B>Cudd_bddMakePrime</B>(
8564 DdManager * <b>dd</b>, <i>manager</i>
8565 DdNode * <b>cube</b>, <i>cube to be expanded</i>
8566 DdNode * <b>f</b> <i>function of which the cube is to be made a prime</i>
8568 </pre>
8569 <dd> Expands cube to a prime implicant of f. Returns the prime
8570 if successful; NULL otherwise. In particular, NULL is returned if cube
8571 is not a real cube or is not an implicant of f.
8574 <dd> <b>Side Effects</b> None
8577 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
8579 <dt><pre>
8580 <A NAME="Cudd_bddMinimize"></A>
8581 DdNode * <I></I>
8582 <B>Cudd_bddMinimize</B>(
8583 DdManager * <b>dd</b>, <i></i>
8584 DdNode * <b>f</b>, <i></i>
8585 DdNode * <b>c</b> <i></i>
8587 </pre>
8588 <dd> Finds a small BDD that agrees with <code>f</code> over
8589 <code>c</code>. Returns a pointer to the result if successful; NULL
8590 otherwise.
8593 <dd> <b>Side Effects</b> None
8596 <dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
8597 <a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
8598 <a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
8599 </code>
8601 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
8603 <dt><pre>
8604 <A NAME="Cudd_bddNPAnd"></A>
8605 DdNode * <I></I>
8606 <B>Cudd_bddNPAnd</B>(
8607 DdManager * <b>dd</b>, <i></i>
8608 DdNode * <b>f</b>, <i></i>
8609 DdNode * <b>g</b> <i></i>
8611 </pre>
8612 <dd> Computes f non-polluting-and g. The non-polluting AND
8613 of f and g is a hybrid of AND and Restrict. From Restrict, this
8614 operation takes the idea of existentially quantifying the top
8615 variable of the second operand if it does not appear in the first.
8616 Therefore, the variables that appear in the result also appear in f.
8617 For the rest, the function behaves like AND. Since the two operands
8618 play different roles, non-polluting AND is not commutative.
8620 Returns a pointer to the result if successful; NULL otherwise.
8623 <dd> <b>Side Effects</b> None
8626 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
8627 <a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
8628 </code>
8630 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
8632 <dt><pre>
8633 <A NAME="Cudd_bddNand"></A>
8634 DdNode * <I></I>
8635 <B>Cudd_bddNand</B>(
8636 DdManager * <b>dd</b>, <i></i>
8637 DdNode * <b>f</b>, <i></i>
8638 DdNode * <b>g</b> <i></i>
8640 </pre>
8641 <dd> Computes the NAND of two BDDs f and g. Returns a
8642 pointer to the resulting BDD if successful; NULL if the intermediate
8643 result blows up.
8646 <dd> <b>Side Effects</b> None
8649 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
8650 <a href="#Cudd_addApply">Cudd_addApply</a>
8651 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
8652 <a href="#Cudd_bddOr">Cudd_bddOr</a>
8653 <a href="#Cudd_bddNor">Cudd_bddNor</a>
8654 <a href="#Cudd_bddXor">Cudd_bddXor</a>
8655 <a href="#Cudd_bddXnor">Cudd_bddXnor</a>
8656 </code>
8658 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8660 <dt><pre>
8661 <A NAME="Cudd_bddNewVarAtLevel"></A>
8662 DdNode * <I></I>
8663 <B>Cudd_bddNewVarAtLevel</B>(
8664 DdManager * <b>dd</b>, <i></i>
8665 int <b>level</b> <i></i>
8667 </pre>
8668 <dd> Creates a new BDD variable. The new variable has an
8669 index equal to the largest previous index plus 1 and is positioned at
8670 the specified level in the order. Returns a pointer to the new
8671 variable if successful; NULL otherwise.
8674 <dd> <b>Side Effects</b> None
8677 <dd> <b>See Also</b> <code><a href="#Cudd_bddNewVar">Cudd_bddNewVar</a>
8678 <a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
8679 <a href="#Cudd_addNewVarAtLevel">Cudd_addNewVarAtLevel</a>
8680 </code>
8682 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8684 <dt><pre>
8685 <A NAME="Cudd_bddNewVar"></A>
8686 DdNode * <I></I>
8687 <B>Cudd_bddNewVar</B>(
8688 DdManager * <b>dd</b> <i></i>
8690 </pre>
8691 <dd> Creates a new BDD variable. The new variable has an
8692 index equal to the largest previous index plus 1. Returns a
8693 pointer to the new variable if successful; NULL otherwise.
8696 <dd> <b>Side Effects</b> None
8699 <dd> <b>See Also</b> <code><a href="#Cudd_addNewVar">Cudd_addNewVar</a>
8700 <a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
8701 <a href="#Cudd_bddNewVarAtLevel">Cudd_bddNewVarAtLevel</a>
8702 </code>
8704 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8706 <dt><pre>
8707 <A NAME="Cudd_bddNor"></A>
8708 DdNode * <I></I>
8709 <B>Cudd_bddNor</B>(
8710 DdManager * <b>dd</b>, <i></i>
8711 DdNode * <b>f</b>, <i></i>
8712 DdNode * <b>g</b> <i></i>
8714 </pre>
8715 <dd> Computes the NOR of two BDDs f and g. Returns a
8716 pointer to the resulting BDD if successful; NULL if the intermediate
8717 result blows up.
8720 <dd> <b>Side Effects</b> None
8723 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
8724 <a href="#Cudd_addApply">Cudd_addApply</a>
8725 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
8726 <a href="#Cudd_bddOr">Cudd_bddOr</a>
8727 <a href="#Cudd_bddNand">Cudd_bddNand</a>
8728 <a href="#Cudd_bddXor">Cudd_bddXor</a>
8729 <a href="#Cudd_bddXnor">Cudd_bddXnor</a>
8730 </code>
8732 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8734 <dt><pre>
8735 <A NAME="Cudd_bddOr"></A>
8736 DdNode * <I></I>
8737 <B>Cudd_bddOr</B>(
8738 DdManager * <b>dd</b>, <i></i>
8739 DdNode * <b>f</b>, <i></i>
8740 DdNode * <b>g</b> <i></i>
8742 </pre>
8743 <dd> Computes the disjunction of two BDDs f and g. Returns a
8744 pointer to the resulting BDD if successful; NULL if the intermediate
8745 result blows up.
8748 <dd> <b>Side Effects</b> None
8751 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
8752 <a href="#Cudd_addApply">Cudd_addApply</a>
8753 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
8754 <a href="#Cudd_bddNand">Cudd_bddNand</a>
8755 <a href="#Cudd_bddNor">Cudd_bddNor</a>
8756 <a href="#Cudd_bddXor">Cudd_bddXor</a>
8757 <a href="#Cudd_bddXnor">Cudd_bddXnor</a>
8758 </code>
8760 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
8762 <dt><pre>
8763 <A NAME="Cudd_bddPermute"></A>
8764 DdNode * <I></I>
8765 <B>Cudd_bddPermute</B>(
8766 DdManager * <b>manager</b>, <i></i>
8767 DdNode * <b>node</b>, <i></i>
8768 int * <b>permut</b> <i></i>
8770 </pre>
8771 <dd> Given a permutation in array permut, creates a new BDD
8772 with permuted variables. There should be an entry in array permut
8773 for each variable in the manager. The i-th entry of permut holds the
8774 index of the variable that is to substitute the i-th variable.
8775 Returns a pointer to the resulting BDD if successful; NULL
8776 otherwise.
8779 <dd> <b>Side Effects</b> None
8782 <dd> <b>See Also</b> <code><a href="#Cudd_addPermute">Cudd_addPermute</a>
8783 <a href="#Cudd_bddSwapVariables">Cudd_bddSwapVariables</a>
8784 </code>
8786 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
8788 <dt><pre>
8789 <A NAME="Cudd_bddPickArbitraryMinterms"></A>
8790 DdNode ** <I></I>
8791 <B>Cudd_bddPickArbitraryMinterms</B>(
8792 DdManager * <b>dd</b>, <i>manager</i>
8793 DdNode * <b>f</b>, <i>function from which to pick k minterms</i>
8794 DdNode ** <b>vars</b>, <i>array of variables</i>
8795 int <b>n</b>, <i>size of <code>vars</code></i>
8796 int <b>k</b> <i>number of minterms to find</i>
8798 </pre>
8799 <dd> Picks k on-set minterms evenly distributed from given DD.
8800 The minterms are in terms of <code>vars</code>. The array
8801 <code>vars</code> should contain at least all variables in the
8802 support of <code>f</code>; if this condition is not met the minterms
8803 built by this procedure may not be contained in
8804 <code>f</code>. Builds an array of BDDs for the minterms and returns a
8805 pointer to it if successful; NULL otherwise. There are three reasons
8806 why the procedure may fail:
8807 <ul>
8808 <li> It may run out of memory;
8809 <li> the function <code>f</code> may be the constant 0;
8810 <li> the minterms may not be contained in <code>f</code>.
8811 </ul>
8814 <dd> <b>Side Effects</b> None
8817 <dd> <b>See Also</b> <code><a href="#Cudd_bddPickOneMinterm">Cudd_bddPickOneMinterm</a>
8818 <a href="#Cudd_bddPickOneCube">Cudd_bddPickOneCube</a>
8819 </code>
8821 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
8823 <dt><pre>
8824 <A NAME="Cudd_bddPickOneCube"></A>
8825 int <I></I>
8826 <B>Cudd_bddPickOneCube</B>(
8827 DdManager * <b>ddm</b>, <i></i>
8828 DdNode * <b>node</b>, <i></i>
8829 char * <b>string</b> <i></i>
8831 </pre>
8832 <dd> Picks one on-set cube randomly from the given DD. The
8833 cube is written into an array of characters. The array must have at
8834 least as many entries as there are variables. Returns 1 if
8835 successful; 0 otherwise.
8838 <dd> <b>Side Effects</b> None
8841 <dd> <b>See Also</b> <code><a href="#Cudd_bddPickOneMinterm">Cudd_bddPickOneMinterm</a>
8842 </code>
8844 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
8846 <dt><pre>
8847 <A NAME="Cudd_bddPickOneMinterm"></A>
8848 DdNode * <I></I>
8849 <B>Cudd_bddPickOneMinterm</B>(
8850 DdManager * <b>dd</b>, <i>manager</i>
8851 DdNode * <b>f</b>, <i>function from which to pick one minterm</i>
8852 DdNode ** <b>vars</b>, <i>array of variables</i>
8853 int <b>n</b> <i>size of <code>vars</code></i>
8855 </pre>
8856 <dd> Picks one on-set minterm randomly from the given
8857 DD. The minterm is in terms of <code>vars</code>. The array
8858 <code>vars</code> should contain at least all variables in the
8859 support of <code>f</code>; if this condition is not met the minterm
8860 built by this procedure may not be contained in
8861 <code>f</code>. Builds a BDD for the minterm and returns a pointer
8862 to it if successful; NULL otherwise. There are three reasons why the
8863 procedure may fail:
8864 <ul>
8865 <li> It may run out of memory;
8866 <li> the function <code>f</code> may be the constant 0;
8867 <li> the minterm may not be contained in <code>f</code>.
8868 </ul>
8871 <dd> <b>Side Effects</b> None
8874 <dd> <b>See Also</b> <code><a href="#Cudd_bddPickOneCube">Cudd_bddPickOneCube</a>
8875 </code>
8877 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
8879 <dt><pre>
8880 <A NAME="Cudd_bddPrintCover"></A>
8881 int <I></I>
8882 <B>Cudd_bddPrintCover</B>(
8883 DdManager * <b>dd</b>, <i></i>
8884 DdNode * <b>l</b>, <i></i>
8885 DdNode * <b>u</b> <i></i>
8887 </pre>
8888 <dd> Prints a sum of product cover for an incompletely
8889 specified function given by a lower bound and an upper bound. Each
8890 product is a prime implicant obtained by expanding the product
8891 corresponding to a path from node to the constant one. Uses the
8892 package default output file. Returns 1 if successful; 0 otherwise.
8895 <dd> <b>Side Effects</b> None
8898 <dd> <b>See Also</b> <code><a href="#Cudd_PrintMinterm">Cudd_PrintMinterm</a>
8899 </code>
8901 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
8903 <dt><pre>
8904 <A NAME="Cudd_bddReadPairIndex"></A>
8905 int <I></I>
8906 <B>Cudd_bddReadPairIndex</B>(
8907 DdManager * <b>dd</b>, <i></i>
8908 int <b>index</b> <i></i>
8910 </pre>
8911 <dd> Reads a corresponding pair index for a given index.
8912 These pair indices are present and next state variable. Returns the
8913 corresponding variable index if the variable exists; -1 otherwise.
8916 <dd> <b>Side Effects</b> modifies the manager
8919 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPairIndex">Cudd_bddSetPairIndex</a>
8920 </code>
8922 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
8924 <dt><pre>
8925 <A NAME="Cudd_bddRead"></A>
8926 int <I></I>
8927 <B>Cudd_bddRead</B>(
8928 FILE * <b>fp</b>, <i>input file pointer</i>
8929 DdManager * <b>dd</b>, <i>DD manager</i>
8930 DdNode ** <b>E</b>, <i>characteristic function of the graph</i>
8931 DdNode *** <b>x</b>, <i>array of row variables</i>
8932 DdNode *** <b>y</b>, <i>array of column variables</i>
8933 int * <b>nx</b>, <i>number or row variables</i>
8934 int * <b>ny</b>, <i>number or column variables</i>
8935 int * <b>m</b>, <i>number of rows</i>
8936 int * <b>n</b>, <i>number of columns</i>
8937 int <b>bx</b>, <i>first index of row variables</i>
8938 int <b>sx</b>, <i>step of row variables</i>
8939 int <b>by</b>, <i>first index of column variables</i>
8940 int <b>sy</b> <i>step of column variables</i>
8942 </pre>
8943 <dd> Reads in a graph (without labels) given as an adjacency
8944 matrix. The first line of the input contains the numbers of rows and
8945 columns of the adjacency matrix. The remaining lines contain the arcs
8946 of the graph, one per line. Each arc is described by two integers,
8947 i.e., the row and column number, or the indices of the two endpoints.
8948 Cudd_bddRead produces a BDD that depends on two sets of variables: x
8949 and y. The x variables (x[0] ... x[nx-1]) encode
8950 the row index and the y variables (y[0] ... y[ny-1]) encode the
8951 column index. x[0] and y[0] are the most significant bits in the
8952 indices.
8953 The variables may already exist or may be created by the function.
8954 The index of x[i] is bx+i*sx, and the index of y[i] is by+i*sy.<p>
8955 On input, nx and ny hold the numbers of row and column variables already
8956 in existence. On output, they hold the numbers of row and column
8957 variables actually used by the matrix. When Cudd_bddRead creates the
8958 variable arrays, the index of x[i] is bx+i*sx, and the index of
8959 y[i] is by+i*sy. When some variables already exist, Cudd_bddRead
8960 expects the indices of the existing x variables to be bx+i*sx, and the
8961 indices of the existing y variables to be by+i*sy.<p>
8962 m and n are set to the numbers of rows and columns of the
8963 matrix. Their values on input are immaterial. The BDD for the graph
8964 is returned in E, and its reference count is > 0. Cudd_bddRead returns
8965 1 in case of success; 0 otherwise.
8968 <dd> <b>Side Effects</b> nx and ny are set to the numbers of row and column
8969 variables. m and n are set to the numbers of rows and columns. x and y
8970 are possibly extended to represent the array of row and column
8971 variables.
8974 <dd> <b>See Also</b> <code><a href="#Cudd_addHarwell">Cudd_addHarwell</a>
8975 <a href="#Cudd_addRead">Cudd_addRead</a>
8976 </code>
8978 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRead.c"TARGET="ABSTRACT"><CODE>cuddRead.c</CODE></A>
8980 <dt><pre>
8981 <A NAME="Cudd_bddRealignDisable"></A>
8982 void <I></I>
8983 <B>Cudd_bddRealignDisable</B>(
8984 DdManager * <b>unique</b> <i></i>
8986 </pre>
8987 <dd> Disables realignment of ZDD order to BDD order.
8990 <dd> <b>Side Effects</b> None
8993 <dd> <b>See Also</b> <code><a href="#Cudd_bddRealignEnable">Cudd_bddRealignEnable</a>
8994 <a href="#Cudd_bddRealignmentEnabled">Cudd_bddRealignmentEnabled</a>
8995 <a href="#Cudd_zddRealignEnable">Cudd_zddRealignEnable</a>
8996 <a href="#Cudd_zddRealignmentEnabled">Cudd_zddRealignmentEnabled</a>
8997 </code>
8999 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9001 <dt><pre>
9002 <A NAME="Cudd_bddRealignEnable"></A>
9003 void <I></I>
9004 <B>Cudd_bddRealignEnable</B>(
9005 DdManager * <b>unique</b> <i></i>
9007 </pre>
9008 <dd> Enables realignment of the BDD variable order to the
9009 ZDD variable order after the ZDDs have been reordered. The
9010 number of ZDD variables must be a multiple of the number of BDD
9011 variables for realignment to make sense. If this condition is not met,
9012 Cudd_zddReduceHeap will return 0. Let <code>M</code> be the
9013 ratio of the two numbers. For the purpose of realignment, the ZDD
9014 variables from <code>M*i</code> to <code>(M+1)*i-1</code> are
9015 reagarded as corresponding to BDD variable <code>i</code>. Realignment
9016 is initially disabled.
9019 <dd> <b>Side Effects</b> None
9022 <dd> <b>See Also</b> <code><a href="#Cudd_zddReduceHeap">Cudd_zddReduceHeap</a>
9023 <a href="#Cudd_bddRealignDisable">Cudd_bddRealignDisable</a>
9024 <a href="#Cudd_bddRealignmentEnabled">Cudd_bddRealignmentEnabled</a>
9025 <a href="#Cudd_zddRealignDisable">Cudd_zddRealignDisable</a>
9026 <a href="#Cudd_zddRealignmentEnabled">Cudd_zddRealignmentEnabled</a>
9027 </code>
9029 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9031 <dt><pre>
9032 <A NAME="Cudd_bddRealignmentEnabled"></A>
9033 int <I></I>
9034 <B>Cudd_bddRealignmentEnabled</B>(
9035 DdManager * <b>unique</b> <i></i>
9037 </pre>
9038 <dd> Returns 1 if the realignment of BDD order to ZDD order is
9039 enabled; 0 otherwise.
9042 <dd> <b>Side Effects</b> None
9045 <dd> <b>See Also</b> <code><a href="#Cudd_bddRealignEnable">Cudd_bddRealignEnable</a>
9046 <a href="#Cudd_bddRealignDisable">Cudd_bddRealignDisable</a>
9047 <a href="#Cudd_zddRealignEnable">Cudd_zddRealignEnable</a>
9048 <a href="#Cudd_zddRealignDisable">Cudd_zddRealignDisable</a>
9049 </code>
9051 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9053 <dt><pre>
9054 <A NAME="Cudd_bddResetVarToBeGrouped"></A>
9055 int <I></I>
9056 <B>Cudd_bddResetVarToBeGrouped</B>(
9057 DdManager * <b>dd</b>, <i></i>
9058 int <b>index</b> <i></i>
9060 </pre>
9061 <dd> Resets a variable not to be grouped. This function is
9062 used for lazy sifting. Returns 1 if successful; 0 otherwise.
9065 <dd> <b>Side Effects</b> modifies the manager
9068 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetVarToBeGrouped">Cudd_bddSetVarToBeGrouped</a>
9069 <a href="#Cudd_bddSetVarHardGroup">Cudd_bddSetVarHardGroup</a>
9070 </code>
9072 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9074 <dt><pre>
9075 <A NAME="Cudd_bddRestrict"></A>
9076 DdNode * <I></I>
9077 <B>Cudd_bddRestrict</B>(
9078 DdManager * <b>dd</b>, <i></i>
9079 DdNode * <b>f</b>, <i></i>
9080 DdNode * <b>c</b> <i></i>
9082 </pre>
9083 <dd> BDD restrict according to Coudert and Madre's algorithm
9084 (ICCAD90). Returns the restricted BDD if successful; otherwise NULL.
9085 If application of restrict results in a BDD larger than the input
9086 BDD, the input BDD is returned.
9089 <dd> <b>Side Effects</b> None
9092 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
9093 <a href="#Cudd_addRestrict">Cudd_addRestrict</a>
9094 </code>
9096 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
9098 <dt><pre>
9099 <A NAME="Cudd_bddSetNsVar"></A>
9100 int <I></I>
9101 <B>Cudd_bddSetNsVar</B>(
9102 DdManager * <b>dd</b>, <i>manager</i>
9103 int <b>index</b> <i>variable index</i>
9105 </pre>
9106 <dd> Sets a variable type to next state. The variable type is
9107 used by lazy sifting. Returns 1 if successful; 0 otherwise.
9110 <dd> <b>Side Effects</b> modifies the manager
9113 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPiVar">Cudd_bddSetPiVar</a>
9114 <a href="#Cudd_bddSetPsVar">Cudd_bddSetPsVar</a>
9115 <a href="#Cudd_bddIsNsVar">Cudd_bddIsNsVar</a>
9116 </code>
9118 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9120 <dt><pre>
9121 <A NAME="Cudd_bddSetPairIndex"></A>
9122 int <I></I>
9123 <B>Cudd_bddSetPairIndex</B>(
9124 DdManager * <b>dd</b>, <i>manager</i>
9125 int <b>index</b>, <i>variable index</i>
9126 int <b>pairIndex</b> <i>corresponding variable index</i>
9128 </pre>
9129 <dd> Sets a corresponding pair index for a given index.
9130 These pair indices are present and next state variable. Returns 1 if
9131 successful; 0 otherwise.
9134 <dd> <b>Side Effects</b> modifies the manager
9137 <dd> <b>See Also</b> <code><a href="#Cudd_bddReadPairIndex">Cudd_bddReadPairIndex</a>
9138 </code>
9140 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9142 <dt><pre>
9143 <A NAME="Cudd_bddSetPiVar"></A>
9144 int <I></I>
9145 <B>Cudd_bddSetPiVar</B>(
9146 DdManager * <b>dd</b>, <i>manager</i>
9147 int <b>index</b> <i>variable index</i>
9149 </pre>
9150 <dd> Sets a variable type to primary input. The variable type is
9151 used by lazy sifting. Returns 1 if successful; 0 otherwise.
9154 <dd> <b>Side Effects</b> modifies the manager
9157 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPsVar">Cudd_bddSetPsVar</a>
9158 <a href="#Cudd_bddSetNsVar">Cudd_bddSetNsVar</a>
9159 <a href="#Cudd_bddIsPiVar">Cudd_bddIsPiVar</a>
9160 </code>
9162 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9164 <dt><pre>
9165 <A NAME="Cudd_bddSetPsVar"></A>
9166 int <I></I>
9167 <B>Cudd_bddSetPsVar</B>(
9168 DdManager * <b>dd</b>, <i>manager</i>
9169 int <b>index</b> <i>variable index</i>
9171 </pre>
9172 <dd> Sets a variable type to present state. The variable type is
9173 used by lazy sifting. Returns 1 if successful; 0 otherwise.
9176 <dd> <b>Side Effects</b> modifies the manager
9179 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetPiVar">Cudd_bddSetPiVar</a>
9180 <a href="#Cudd_bddSetNsVar">Cudd_bddSetNsVar</a>
9181 <a href="#Cudd_bddIsPsVar">Cudd_bddIsPsVar</a>
9182 </code>
9184 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9186 <dt><pre>
9187 <A NAME="Cudd_bddSetVarHardGroup"></A>
9188 int <I></I>
9189 <B>Cudd_bddSetVarHardGroup</B>(
9190 DdManager * <b>dd</b>, <i></i>
9191 int <b>index</b> <i></i>
9193 </pre>
9194 <dd> Sets a variable to be a hard group. This function is used
9195 for lazy sifting. Returns 1 if successful; 0 otherwise.
9198 <dd> <b>Side Effects</b> modifies the manager
9201 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetVarToBeGrouped">Cudd_bddSetVarToBeGrouped</a>
9202 <a href="#Cudd_bddResetVarToBeGrouped">Cudd_bddResetVarToBeGrouped</a>
9203 <a href="#Cudd_bddIsVarHardGroup">Cudd_bddIsVarHardGroup</a>
9204 </code>
9206 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9208 <dt><pre>
9209 <A NAME="Cudd_bddSetVarToBeGrouped"></A>
9210 int <I></I>
9211 <B>Cudd_bddSetVarToBeGrouped</B>(
9212 DdManager * <b>dd</b>, <i></i>
9213 int <b>index</b> <i></i>
9215 </pre>
9216 <dd> Sets a variable to be grouped. This function is used for
9217 lazy sifting. Returns 1 if successful; 0 otherwise.
9220 <dd> <b>Side Effects</b> modifies the manager
9223 <dd> <b>See Also</b> <code><a href="#Cudd_bddSetVarHardGroup">Cudd_bddSetVarHardGroup</a>
9224 <a href="#Cudd_bddResetVarToBeGrouped">Cudd_bddResetVarToBeGrouped</a>
9225 </code>
9227 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9229 <dt><pre>
9230 <A NAME="Cudd_bddSetVarToBeUngrouped"></A>
9231 int <I></I>
9232 <B>Cudd_bddSetVarToBeUngrouped</B>(
9233 DdManager * <b>dd</b>, <i></i>
9234 int <b>index</b> <i></i>
9236 </pre>
9237 <dd> Sets a variable to be ungrouped. This function is used
9238 for lazy sifting. Returns 1 if successful; 0 otherwise.
9241 <dd> <b>Side Effects</b> modifies the manager
9244 <dd> <b>See Also</b> <code><a href="#Cudd_bddIsVarToBeUngrouped">Cudd_bddIsVarToBeUngrouped</a>
9245 </code>
9247 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9249 <dt><pre>
9250 <A NAME="Cudd_bddSqueeze"></A>
9251 DdNode * <I></I>
9252 <B>Cudd_bddSqueeze</B>(
9253 DdManager * <b>dd</b>, <i>manager</i>
9254 DdNode * <b>l</b>, <i>lower bound</i>
9255 DdNode * <b>u</b> <i>upper bound</i>
9257 </pre>
9258 <dd> Finds a small BDD in a function interval. Given BDDs
9259 <code>l</code> and <code>u</code>, representing the lower bound and
9260 upper bound of a function interval, Cudd_bddSqueeze produces the BDD
9261 of a function within the interval with a small BDD. Returns a
9262 pointer to the result if successful; NULL otherwise.
9265 <dd> <b>Side Effects</b> None
9268 <dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
9269 <a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
9270 </code>
9272 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
9274 <dt><pre>
9275 <A NAME="Cudd_bddSwapVariables"></A>
9276 DdNode * <I></I>
9277 <B>Cudd_bddSwapVariables</B>(
9278 DdManager * <b>dd</b>, <i></i>
9279 DdNode * <b>f</b>, <i></i>
9280 DdNode ** <b>x</b>, <i></i>
9281 DdNode ** <b>y</b>, <i></i>
9282 int <b>n</b> <i></i>
9284 </pre>
9285 <dd> Swaps two sets of variables of the same size (x and y)
9286 in the BDD f. The size is given by n. The two sets of variables are
9287 assumed to be disjoint. Returns a pointer to the resulting BDD if
9288 successful; NULL otherwise.
9291 <dd> <b>Side Effects</b> None
9294 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
9295 <a href="#Cudd_addSwapVariables">Cudd_addSwapVariables</a>
9296 </code>
9298 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
9300 <dt><pre>
9301 <A NAME="Cudd_bddTransfer"></A>
9302 DdNode * <I></I>
9303 <B>Cudd_bddTransfer</B>(
9304 DdManager * <b>ddSource</b>, <i></i>
9305 DdManager * <b>ddDestination</b>, <i></i>
9306 DdNode * <b>f</b> <i></i>
9308 </pre>
9309 <dd> Convert a BDD from a manager to another one. The orders of the
9310 variables in the two managers may be different. Returns a
9311 pointer to the BDD in the destination manager if successful; NULL
9312 otherwise.
9315 <dd> <b>Side Effects</b> None
9318 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
9320 <dt><pre>
9321 <A NAME="Cudd_bddUnbindVar"></A>
9322 int <I></I>
9323 <B>Cudd_bddUnbindVar</B>(
9324 DdManager * <b>dd</b>, <i>manager</i>
9325 int <b>index</b> <i>variable index</i>
9327 </pre>
9328 <dd> This function resets the flag that prevents the sifting
9329 of a variable. In successive variable reorderings, the variable will
9330 NOT be skipped, that is, sifted. Initially all variables can be
9331 sifted. It is necessary to call this function only to re-enable
9332 sifting after a call to Cudd_bddBindVar. Returns 1 if successful; 0
9333 otherwise (i.e., invalid variable index).
9336 <dd> <b>Side Effects</b> Changes the "bindVar" flag in DdSubtable.
9339 <dd> <b>See Also</b> <code><a href="#Cudd_bddBindVar">Cudd_bddBindVar</a>
9340 </code>
9342 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9344 <dt><pre>
9345 <A NAME="Cudd_bddUnivAbstract"></A>
9346 DdNode * <I></I>
9347 <B>Cudd_bddUnivAbstract</B>(
9348 DdManager * <b>manager</b>, <i></i>
9349 DdNode * <b>f</b>, <i></i>
9350 DdNode * <b>cube</b> <i></i>
9352 </pre>
9353 <dd> Universally abstracts all the variables in cube from f.
9354 Returns the abstracted BDD if successful; NULL otherwise.
9357 <dd> <b>Side Effects</b> None
9360 <dd> <b>See Also</b> <code><a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
9361 <a href="#Cudd_addUnivAbstract">Cudd_addUnivAbstract</a>
9362 </code>
9364 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
9366 <dt><pre>
9367 <A NAME="Cudd_bddVarConjDecomp"></A>
9368 int <I></I>
9369 <B>Cudd_bddVarConjDecomp</B>(
9370 DdManager * <b>dd</b>, <i>manager</i>
9371 DdNode * <b>f</b>, <i>function to be decomposed</i>
9372 DdNode *** <b>conjuncts</b> <i>address of the array of conjuncts</i>
9374 </pre>
9375 <dd> Conjunctively decomposes one BDD according to a
9376 variable. If <code>f</code> is the function of the BDD and
9377 <code>x</code> is the variable, the decomposition is
9378 <code>(f+x)(f+x')</code>. The variable is chosen so as to balance
9379 the sizes of the two conjuncts and to keep them small. Returns the
9380 number of conjuncts produced, that is, 2 if successful; 1 if no
9381 meaningful decomposition was found; 0 otherwise.
9384 <dd> <b>Side Effects</b> The two factors are returned in an array as side effects.
9385 The array is allocated by this function. It is the caller's responsibility
9386 to free it. On successful completion, the conjuncts are already
9387 referenced. If the function returns 0, the array for the conjuncts is
9388 not allocated. If the function returns 1, the only factor equals the
9389 function to be decomposed.
9392 <dd> <b>See Also</b> <code><a href="#Cudd_bddVarDisjDecomp">Cudd_bddVarDisjDecomp</a>
9393 <a href="#Cudd_bddGenConjDecomp">Cudd_bddGenConjDecomp</a>
9394 <a href="#Cudd_bddApproxConjDecomp">Cudd_bddApproxConjDecomp</a>
9395 <a href="#Cudd_bddIterConjDecomp">Cudd_bddIterConjDecomp</a>
9396 </code>
9398 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
9400 <dt><pre>
9401 <A NAME="Cudd_bddVarDisjDecomp"></A>
9402 int <I></I>
9403 <B>Cudd_bddVarDisjDecomp</B>(
9404 DdManager * <b>dd</b>, <i>manager</i>
9405 DdNode * <b>f</b>, <i>function to be decomposed</i>
9406 DdNode *** <b>disjuncts</b> <i>address of the array of the disjuncts</i>
9408 </pre>
9409 <dd> Performs two-way disjunctive decomposition of a BDD
9410 according to a variable. If <code>f</code> is the function of the
9411 BDD and <code>x</code> is the variable, the decomposition is
9412 <code>f*x + f*x'</code>. The variable is chosen so as to balance
9413 the sizes of the two disjuncts and to keep them small. Returns the
9414 number of disjuncts produced, that is, 2 if successful; 1 if no
9415 meaningful decomposition was found; 0 otherwise.
9418 <dd> <b>Side Effects</b> The two disjuncts are returned in an array as side effects.
9419 The array is allocated by this function. It is the caller's responsibility
9420 to free it. On successful completion, the disjuncts are already
9421 referenced. If the function returns 0, the array for the disjuncts is
9422 not allocated. If the function returns 1, the only factor equals the
9423 function to be decomposed.
9426 <dd> <b>See Also</b> <code><a href="#Cudd_bddVarConjDecomp">Cudd_bddVarConjDecomp</a>
9427 <a href="#Cudd_bddApproxDisjDecomp">Cudd_bddApproxDisjDecomp</a>
9428 <a href="#Cudd_bddIterDisjDecomp">Cudd_bddIterDisjDecomp</a>
9429 <a href="#Cudd_bddGenDisjDecomp">Cudd_bddGenDisjDecomp</a>
9430 </code>
9432 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
9434 <dt><pre>
9435 <A NAME="Cudd_bddVarIsBound"></A>
9436 int <I></I>
9437 <B>Cudd_bddVarIsBound</B>(
9438 DdManager * <b>dd</b>, <i>manager</i>
9439 int <b>index</b> <i>variable index</i>
9441 </pre>
9442 <dd> This function returns 1 if a variable is enabled for
9443 sifting. Initially all variables can be sifted. This function returns
9444 0 only if there has been a previous call to Cudd_bddBindVar for that
9445 variable not followed by a call to Cudd_bddUnbindVar. The function returns
9446 0 also in the case in which the index of the variable is out of bounds.
9449 <dd> <b>Side Effects</b> none
9452 <dd> <b>See Also</b> <code><a href="#Cudd_bddBindVar">Cudd_bddBindVar</a>
9453 <a href="#Cudd_bddUnbindVar">Cudd_bddUnbindVar</a>
9454 </code>
9456 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
9458 <dt><pre>
9459 <A NAME="Cudd_bddVarIsDependent"></A>
9460 int <I></I>
9461 <B>Cudd_bddVarIsDependent</B>(
9462 DdManager * <b>dd</b>, <i></i>
9463 DdNode * <b>f</b>, <i></i>
9464 DdNode * <b>var</b> <i>variable</i>
9466 </pre>
9467 <dd> Checks whether a variable is dependent on others in a
9468 function. Returns 1 if the variable is dependent; 0 otherwise. No
9469 new nodes are created.
9472 <dd> <b>Side Effects</b> None
9475 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
9477 <dt><pre>
9478 <A NAME="Cudd_bddVarMap"></A>
9479 DdNode * <I></I>
9480 <B>Cudd_bddVarMap</B>(
9481 DdManager * <b>manager</b>, <i>DD manager</i>
9482 DdNode * <b>f</b> <i>function in which to remap variables</i>
9484 </pre>
9485 <dd> Remaps the variables of a BDD using the default
9486 variable map. A typical use of this function is to swap two sets of
9487 variables. The variable map must be registered with Cudd_SetVarMap.
9488 Returns a pointer to the resulting BDD if successful; NULL
9489 otherwise.
9492 <dd> <b>Side Effects</b> None
9495 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
9496 <a href="#Cudd_bddSwapVariables">Cudd_bddSwapVariables</a>
9497 <a href="#Cudd_SetVarMap">Cudd_SetVarMap</a>
9498 </code>
9500 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
9502 <dt><pre>
9503 <A NAME="Cudd_bddVectorCompose"></A>
9504 DdNode * <I></I>
9505 <B>Cudd_bddVectorCompose</B>(
9506 DdManager * <b>dd</b>, <i></i>
9507 DdNode * <b>f</b>, <i></i>
9508 DdNode ** <b>vector</b> <i></i>
9510 </pre>
9511 <dd> Given a vector of BDDs, creates a new BDD by
9512 substituting the BDDs for the variables of the BDD f. There
9513 should be an entry in vector for each variable in the manager.
9514 If no substitution is sought for a given variable, the corresponding
9515 projection function should be specified in the vector.
9516 This function implements simultaneous composition.
9517 Returns a pointer to the resulting BDD if successful; NULL
9518 otherwise.
9521 <dd> <b>Side Effects</b> None
9524 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
9525 <a href="#Cudd_bddCompose">Cudd_bddCompose</a>
9526 <a href="#Cudd_addVectorCompose">Cudd_addVectorCompose</a>
9527 </code>
9529 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
9531 <dt><pre>
9532 <A NAME="Cudd_bddXnor"></A>
9533 DdNode * <I></I>
9534 <B>Cudd_bddXnor</B>(
9535 DdManager * <b>dd</b>, <i></i>
9536 DdNode * <b>f</b>, <i></i>
9537 DdNode * <b>g</b> <i></i>
9539 </pre>
9540 <dd> Computes the exclusive NOR of two BDDs f and g. Returns a
9541 pointer to the resulting BDD if successful; NULL if the intermediate
9542 result blows up.
9545 <dd> <b>Side Effects</b> None
9548 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
9549 <a href="#Cudd_addApply">Cudd_addApply</a>
9550 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
9551 <a href="#Cudd_bddOr">Cudd_bddOr</a>
9552 <a href="#Cudd_bddNand">Cudd_bddNand</a>
9553 <a href="#Cudd_bddNor">Cudd_bddNor</a>
9554 <a href="#Cudd_bddXor">Cudd_bddXor</a>
9555 </code>
9557 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
9559 <dt><pre>
9560 <A NAME="Cudd_bddXorExistAbstract"></A>
9561 DdNode * <I></I>
9562 <B>Cudd_bddXorExistAbstract</B>(
9563 DdManager * <b>manager</b>, <i></i>
9564 DdNode * <b>f</b>, <i></i>
9565 DdNode * <b>g</b>, <i></i>
9566 DdNode * <b>cube</b> <i></i>
9568 </pre>
9569 <dd> Takes the exclusive OR of two BDDs and simultaneously abstracts
9570 the variables in cube. The variables are existentially abstracted. Returns a
9571 pointer to the result is successful; NULL otherwise.
9574 <dd> <b>Side Effects</b> None
9577 <dd> <b>See Also</b> <code><a href="#Cudd_bddUnivAbstract">Cudd_bddUnivAbstract</a>
9578 <a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
9579 <a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
9580 </code>
9582 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
9584 <dt><pre>
9585 <A NAME="Cudd_bddXor"></A>
9586 DdNode * <I></I>
9587 <B>Cudd_bddXor</B>(
9588 DdManager * <b>dd</b>, <i></i>
9589 DdNode * <b>f</b>, <i></i>
9590 DdNode * <b>g</b> <i></i>
9592 </pre>
9593 <dd> Computes the exclusive OR of two BDDs f and g. Returns a
9594 pointer to the resulting BDD if successful; NULL if the intermediate
9595 result blows up.
9598 <dd> <b>Side Effects</b> None
9601 <dd> <b>See Also</b> <code><a href="#Cudd_bddIte">Cudd_bddIte</a>
9602 <a href="#Cudd_addApply">Cudd_addApply</a>
9603 <a href="#Cudd_bddAnd">Cudd_bddAnd</a>
9604 <a href="#Cudd_bddOr">Cudd_bddOr</a>
9605 <a href="#Cudd_bddNand">Cudd_bddNand</a>
9606 <a href="#Cudd_bddNor">Cudd_bddNor</a>
9607 <a href="#Cudd_bddXnor">Cudd_bddXnor</a>
9608 </code>
9610 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
9612 <dt><pre>
9613 <A NAME="Cudd_tlcInfoFree"></A>
9614 void <I></I>
9615 <B>Cudd_tlcInfoFree</B>(
9616 DdTlcInfo * <b>t</b> <i></i>
9618 </pre>
9619 <dd> Frees a DdTlcInfo Structure as well as the memory pointed
9620 by it.
9623 <dd> <b>Side Effects</b> None
9626 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
9628 <dt><pre>
9629 <A NAME="Cudd_zddChange"></A>
9630 DdNode * <I></I>
9631 <B>Cudd_zddChange</B>(
9632 DdManager * <b>dd</b>, <i></i>
9633 DdNode * <b>P</b>, <i></i>
9634 int <b>var</b> <i></i>
9636 </pre>
9637 <dd> Substitutes a variable with its complement in a ZDD.
9638 returns a pointer to the result if successful; NULL otherwise.
9641 <dd> <b>Side Effects</b> None
9644 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
9646 <dt><pre>
9647 <A NAME="Cudd_zddComplement"></A>
9648 DdNode * <I></I>
9649 <B>Cudd_zddComplement</B>(
9650 DdManager * <b>dd</b>, <i></i>
9651 DdNode * <b>node</b> <i></i>
9653 </pre>
9654 <dd> Computes a complement cover for a ZDD node. For lack of a
9655 better method, we first extract the function BDD from the ZDD cover,
9656 then make the complement of the ZDD cover from the complement of the
9657 BDD node by using ISOP. Returns a pointer to the resulting cover if
9658 successful; NULL otherwise. The result depends on current variable
9659 order.
9662 <dd> <b>Side Effects</b> The result depends on current variable order.
9665 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
9667 <dt><pre>
9668 <A NAME="Cudd_zddCountDouble"></A>
9669 double <I></I>
9670 <B>Cudd_zddCountDouble</B>(
9671 DdManager * <b>zdd</b>, <i></i>
9672 DdNode * <b>P</b> <i></i>
9674 </pre>
9675 <dd> Counts the number of minterms of a ZDD. The result is
9676 returned as a double. If the procedure runs out of memory, it
9677 returns (double) CUDD_OUT_OF_MEM. This procedure is used in
9678 Cudd_zddCountMinterm.
9681 <dd> <b>Side Effects</b> None
9684 <dd> <b>See Also</b> <code><a href="#Cudd_zddCountMinterm">Cudd_zddCountMinterm</a>
9685 <a href="#Cudd_zddCount">Cudd_zddCount</a>
9686 </code>
9688 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
9690 <dt><pre>
9691 <A NAME="Cudd_zddCountMinterm"></A>
9692 double <I></I>
9693 <B>Cudd_zddCountMinterm</B>(
9694 DdManager * <b>zdd</b>, <i></i>
9695 DdNode * <b>node</b>, <i></i>
9696 int <b>path</b> <i></i>
9698 </pre>
9699 <dd> Counts the number of minterms of the ZDD rooted at
9700 <code>node</code>. This procedure takes a parameter
9701 <code>path</code> that specifies how many variables are in the
9702 support of the function. If the procedure runs out of memory, it
9703 returns (double) CUDD_OUT_OF_MEM.
9706 <dd> <b>Side Effects</b> None
9709 <dd> <b>See Also</b> <code><a href="#Cudd_zddCountDouble">Cudd_zddCountDouble</a>
9710 </code>
9712 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddMisc.c"TARGET="ABSTRACT"><CODE>cuddZddMisc.c</CODE></A>
9714 <dt><pre>
9715 <A NAME="Cudd_zddCount"></A>
9716 int <I></I>
9717 <B>Cudd_zddCount</B>(
9718 DdManager * <b>zdd</b>, <i></i>
9719 DdNode * <b>P</b> <i></i>
9721 </pre>
9722 <dd> Returns an integer representing the number of minterms
9723 in a ZDD.
9726 <dd> <b>Side Effects</b> None
9729 <dd> <b>See Also</b> <code><a href="#Cudd_zddCountDouble">Cudd_zddCountDouble</a>
9730 </code>
9732 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
9734 <dt><pre>
9735 <A NAME="Cudd_zddCoverPathToString"></A>
9736 char * <I></I>
9737 <B>Cudd_zddCoverPathToString</B>(
9738 DdManager * <b>zdd</b>, <i>DD manager</i>
9739 int * <b>path</b>, <i>path of ZDD representing a cover</i>
9740 char * <b>str</b> <i>pointer to string to use if != NULL</i>
9742 </pre>
9743 <dd> Converts a path of a ZDD representing a cover to a
9744 string. The string represents an implicant of the cover. The path
9745 is typically produced by Cudd_zddForeachPath. Returns a pointer to
9746 the string if successful; NULL otherwise. If the str input is NULL,
9747 it allocates a new string. The string passed to this function must
9748 have enough room for all variables and for the terminator.
9751 <dd> <b>Side Effects</b> None
9754 <dd> <b>See Also</b> <code><a href="#Cudd_zddForeachPath">Cudd_zddForeachPath</a>
9755 </code>
9757 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
9759 <dt><pre>
9760 <A NAME="Cudd_zddDagSize"></A>
9761 int <I></I>
9762 <B>Cudd_zddDagSize</B>(
9763 DdNode * <b>p_node</b> <i></i>
9765 </pre>
9766 <dd> Counts the number of nodes in a ZDD. This function
9767 duplicates Cudd_DagSize and is only retained for compatibility.
9770 <dd> <b>Side Effects</b> None
9773 <dd> <b>See Also</b> <code><a href="#Cudd_DagSize">Cudd_DagSize</a>
9774 </code>
9776 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddMisc.c"TARGET="ABSTRACT"><CODE>cuddZddMisc.c</CODE></A>
9778 <dt><pre>
9779 <A NAME="Cudd_zddDiffConst"></A>
9780 DdNode * <I></I>
9781 <B>Cudd_zddDiffConst</B>(
9782 DdManager * <b>zdd</b>, <i></i>
9783 DdNode * <b>P</b>, <i></i>
9784 DdNode * <b>Q</b> <i></i>
9786 </pre>
9787 <dd> Inclusion test for ZDDs (P implies Q). No new nodes are
9788 generated by this procedure. Returns empty if true;
9789 a valid pointer different from empty or DD_NON_CONSTANT otherwise.
9792 <dd> <b>Side Effects</b> None
9795 <dd> <b>See Also</b> <code><a href="#Cudd_zddDiff">Cudd_zddDiff</a>
9796 </code>
9798 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
9800 <dt><pre>
9801 <A NAME="Cudd_zddDiff"></A>
9802 DdNode * <I></I>
9803 <B>Cudd_zddDiff</B>(
9804 DdManager * <b>dd</b>, <i></i>
9805 DdNode * <b>P</b>, <i></i>
9806 DdNode * <b>Q</b> <i></i>
9808 </pre>
9809 <dd> Computes the difference of two ZDDs. Returns a pointer to the
9810 result if successful; NULL otherwise.
9813 <dd> <b>Side Effects</b> None
9816 <dd> <b>See Also</b> <code><a href="#Cudd_zddDiffConst">Cudd_zddDiffConst</a>
9817 </code>
9819 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
9821 <dt><pre>
9822 <A NAME="Cudd_zddDivideF"></A>
9823 DdNode * <I></I>
9824 <B>Cudd_zddDivideF</B>(
9825 DdManager * <b>dd</b>, <i></i>
9826 DdNode * <b>f</b>, <i></i>
9827 DdNode * <b>g</b> <i></i>
9829 </pre>
9830 <dd> Modified version of Cudd_zddDivide. This function may
9831 disappear in future releases.
9834 <dd> <b>Side Effects</b> None
9837 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
9839 <dt><pre>
9840 <A NAME="Cudd_zddDivide"></A>
9841 DdNode * <I></I>
9842 <B>Cudd_zddDivide</B>(
9843 DdManager * <b>dd</b>, <i></i>
9844 DdNode * <b>f</b>, <i></i>
9845 DdNode * <b>g</b> <i></i>
9847 </pre>
9848 <dd> Computes the quotient of two unate covers represented
9849 by ZDDs. Unate covers use one ZDD variable for each BDD
9850 variable. Returns a pointer to the resulting ZDD if successful; NULL
9851 otherwise.
9854 <dd> <b>Side Effects</b> None
9857 <dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDiv">Cudd_zddWeakDiv</a>
9858 </code>
9860 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
9862 <dt><pre>
9863 <A NAME="Cudd_zddDumpDot"></A>
9864 int <I></I>
9865 <B>Cudd_zddDumpDot</B>(
9866 DdManager * <b>dd</b>, <i>manager</i>
9867 int <b>n</b>, <i>number of output nodes to be dumped</i>
9868 DdNode ** <b>f</b>, <i>array of output nodes to be dumped</i>
9869 char ** <b>inames</b>, <i>array of input names (or NULL)</i>
9870 char ** <b>onames</b>, <i>array of output names (or NULL)</i>
9871 FILE * <b>fp</b> <i>pointer to the dump file</i>
9873 </pre>
9874 <dd> Writes a file representing the argument ZDDs in a format
9875 suitable for the graph drawing program dot.
9876 It returns 1 in case of success; 0 otherwise (e.g., out-of-memory,
9877 file system full).
9878 Cudd_zddDumpDot does not close the file: This is the caller
9879 responsibility. Cudd_zddDumpDot uses a minimal unique subset of the
9880 hexadecimal address of a node as name for it.
9881 If the argument inames is non-null, it is assumed to hold the pointers
9882 to the names of the inputs. Similarly for onames.
9883 Cudd_zddDumpDot uses the following convention to draw arcs:
9884 <ul>
9885 <li> solid line: THEN arcs;
9886 <li> dashed line: ELSE arcs.
9887 </ul>
9888 The dot options are chosen so that the drawing fits on a letter-size
9889 sheet.
9892 <dd> <b>Side Effects</b> None
9895 <dd> <b>See Also</b> <code><a href="#Cudd_DumpDot">Cudd_DumpDot</a>
9896 <a href="#Cudd_zddPrintDebug">Cudd_zddPrintDebug</a>
9897 </code>
9899 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
9901 <dt><pre>
9902 <A NAME="Cudd_zddFirstPath"></A>
9903 DdGen * <I></I>
9904 <B>Cudd_zddFirstPath</B>(
9905 DdManager * <b>zdd</b>, <i></i>
9906 DdNode * <b>f</b>, <i></i>
9907 int ** <b>path</b> <i></i>
9909 </pre>
9910 <dd> Defines an iterator on the paths of a ZDD
9911 and finds its first path. Returns a generator that contains the
9912 information necessary to continue the enumeration if successful; NULL
9913 otherwise.<p>
9914 A path is represented as an array of literals, which are integers in
9915 {0, 1, 2}; 0 represents an else arc out of a node, 1 represents a then arc
9916 out of a node, and 2 stands for the absence of a node.
9917 The size of the array equals the number of variables in the manager at
9918 the time Cudd_zddFirstCube is called.<p>
9919 The paths that end in the empty terminal are not enumerated.
9922 <dd> <b>Side Effects</b> The first path is returned as a side effect.
9925 <dd> <b>See Also</b> <code><a href="#Cudd_zddForeachPath">Cudd_zddForeachPath</a>
9926 <a href="#Cudd_zddNextPath">Cudd_zddNextPath</a>
9927 <a href="#Cudd_GenFree">Cudd_GenFree</a>
9928 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
9929 </code>
9931 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
9933 <dt><pre>
9934 <A NAME="Cudd_zddIntersect"></A>
9935 DdNode * <I></I>
9936 <B>Cudd_zddIntersect</B>(
9937 DdManager * <b>dd</b>, <i></i>
9938 DdNode * <b>P</b>, <i></i>
9939 DdNode * <b>Q</b> <i></i>
9941 </pre>
9942 <dd> Computes the intersection of two ZDDs. Returns a pointer to
9943 the result if successful; NULL otherwise.
9946 <dd> <b>Side Effects</b> None
9949 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
9951 <dt><pre>
9952 <A NAME="Cudd_zddIsop"></A>
9953 DdNode * <I></I>
9954 <B>Cudd_zddIsop</B>(
9955 DdManager * <b>dd</b>, <i></i>
9956 DdNode * <b>L</b>, <i></i>
9957 DdNode * <b>U</b>, <i></i>
9958 DdNode ** <b>zdd_I</b> <i></i>
9960 </pre>
9961 <dd> Computes an irredundant sum of products (ISOP) in ZDD
9962 form from BDDs. The two BDDs L and U represent the lower bound and
9963 the upper bound, respectively, of the function. The ISOP uses two
9964 ZDD variables for each BDD variable: One for the positive literal,
9965 and one for the negative literal. These two variables should be
9966 adjacent in the ZDD order. The two ZDD variables corresponding to
9967 BDD variable <code>i</code> should have indices <code>2i</code> and
9968 <code>2i+1</code>. The result of this procedure depends on the
9969 variable order. If successful, Cudd_zddIsop returns the BDD for
9970 the function chosen from the interval. The ZDD representing the
9971 irredundant cover is returned as a side effect in zdd_I. In case of
9972 failure, NULL is returned.
9975 <dd> <b>Side Effects</b> zdd_I holds the pointer to the ZDD for the ISOP on
9976 successful return.
9979 <dd> <b>See Also</b> <code><a href="#Cudd_bddIsop">Cudd_bddIsop</a>
9980 <a href="#Cudd_zddVarsFromBddVars">Cudd_zddVarsFromBddVars</a>
9981 </code>
9983 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
9985 <dt><pre>
9986 <A NAME="Cudd_zddIte"></A>
9987 DdNode * <I></I>
9988 <B>Cudd_zddIte</B>(
9989 DdManager * <b>dd</b>, <i></i>
9990 DdNode * <b>f</b>, <i></i>
9991 DdNode * <b>g</b>, <i></i>
9992 DdNode * <b>h</b> <i></i>
9994 </pre>
9995 <dd> Computes the ITE of three ZDDs. Returns a pointer to the
9996 result if successful; NULL otherwise.
9999 <dd> <b>Side Effects</b> None
10002 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
10004 <dt><pre>
10005 <A NAME="Cudd_zddIthVar"></A>
10006 DdNode * <I></I>
10007 <B>Cudd_zddIthVar</B>(
10008 DdManager * <b>dd</b>, <i></i>
10009 int <b>i</b> <i></i>
10011 </pre>
10012 <dd> Retrieves the ZDD variable with index i if it already
10013 exists, or creates a new ZDD variable. Returns a pointer to the
10014 variable if successful; NULL otherwise.
10017 <dd> <b>Side Effects</b> None
10020 <dd> <b>See Also</b> <code><a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
10021 <a href="#Cudd_addIthVar">Cudd_addIthVar</a>
10022 </code>
10024 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10026 <dt><pre>
10027 <A NAME="Cudd_zddNextPath"></A>
10028 int <I></I>
10029 <B>Cudd_zddNextPath</B>(
10030 DdGen * <b>gen</b>, <i></i>
10031 int ** <b>path</b> <i></i>
10033 </pre>
10034 <dd> Generates the next path of a ZDD onset,
10035 using generator gen. Returns 0 if the enumeration is completed; 1
10036 otherwise.
10039 <dd> <b>Side Effects</b> The path is returned as a side effect. The
10040 generator is modified.
10043 <dd> <b>See Also</b> <code><a href="#Cudd_zddForeachPath">Cudd_zddForeachPath</a>
10044 <a href="#Cudd_zddFirstPath">Cudd_zddFirstPath</a>
10045 <a href="#Cudd_GenFree">Cudd_GenFree</a>
10046 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
10047 </code>
10049 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
10051 <dt><pre>
10052 <A NAME="Cudd_zddPortFromBdd"></A>
10053 DdNode * <I></I>
10054 <B>Cudd_zddPortFromBdd</B>(
10055 DdManager * <b>dd</b>, <i></i>
10056 DdNode * <b>B</b> <i></i>
10058 </pre>
10059 <dd> Converts a BDD into a ZDD. This function assumes that
10060 there is a one-to-one correspondence between the BDD variables and the
10061 ZDD variables, and that the variable order is the same for both types
10062 of variables. These conditions are established if the ZDD variables
10063 are created by one call to Cudd_zddVarsFromBddVars with multiplicity =
10064 1. Returns a pointer to the resulting ZDD if successful; NULL otherwise.
10067 <dd> <b>Side Effects</b> None
10070 <dd> <b>See Also</b> <code><a href="#Cudd_zddVarsFromBddVars">Cudd_zddVarsFromBddVars</a>
10071 </code>
10073 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>
10075 <dt><pre>
10076 <A NAME="Cudd_zddPortToBdd"></A>
10077 DdNode * <I></I>
10078 <B>Cudd_zddPortToBdd</B>(
10079 DdManager * <b>dd</b>, <i></i>
10080 DdNode * <b>f</b> <i></i>
10082 </pre>
10083 <dd> Converts a ZDD into a BDD. Returns a pointer to the resulting
10084 ZDD if successful; NULL otherwise.
10087 <dd> <b>Side Effects</b> None
10090 <dd> <b>See Also</b> <code><a href="#Cudd_zddPortFromBdd">Cudd_zddPortFromBdd</a>
10091 </code>
10093 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>
10095 <dt><pre>
10096 <A NAME="Cudd_zddPrintCover"></A>
10097 int <I></I>
10098 <B>Cudd_zddPrintCover</B>(
10099 DdManager * <b>zdd</b>, <i></i>
10100 DdNode * <b>node</b> <i></i>
10102 </pre>
10103 <dd> Prints a sum of products from a ZDD representing a cover.
10104 Returns 1 if successful; 0 otherwise.
10107 <dd> <b>Side Effects</b> None
10110 <dd> <b>See Also</b> <code><a href="#Cudd_zddPrintMinterm">Cudd_zddPrintMinterm</a>
10111 </code>
10113 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
10115 <dt><pre>
10116 <A NAME="Cudd_zddPrintDebug"></A>
10117 int <I></I>
10118 <B>Cudd_zddPrintDebug</B>(
10119 DdManager * <b>zdd</b>, <i></i>
10120 DdNode * <b>f</b>, <i></i>
10121 int <b>n</b>, <i></i>
10122 int <b>pr</b> <i></i>
10124 </pre>
10125 <dd> Prints to the standard output a DD and its statistics.
10126 The statistics include the number of nodes and the number of minterms.
10127 (The number of minterms is also the number of combinations in the set.)
10128 The statistics are printed if pr &gt; 0. Specifically:
10129 <ul>
10130 <li> pr = 0 : prints nothing
10131 <li> pr = 1 : prints counts of nodes and minterms
10132 <li> pr = 2 : prints counts + disjoint sum of products
10133 <li> pr = 3 : prints counts + list of nodes
10134 <li> pr &gt; 3 : prints counts + disjoint sum of products + list of nodes
10135 </ul>
10136 Returns 1 if successful; 0 otherwise.
10139 <dd> <b>Side Effects</b> None
10142 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
10144 <dt><pre>
10145 <A NAME="Cudd_zddPrintMinterm"></A>
10146 int <I></I>
10147 <B>Cudd_zddPrintMinterm</B>(
10148 DdManager * <b>zdd</b>, <i></i>
10149 DdNode * <b>node</b> <i></i>
10151 </pre>
10152 <dd> Prints a disjoint sum of product form for a ZDD. Returns 1
10153 if successful; 0 otherwise.
10156 <dd> <b>Side Effects</b> None
10159 <dd> <b>See Also</b> <code><a href="#Cudd_zddPrintDebug">Cudd_zddPrintDebug</a>
10160 <a href="#Cudd_zddPrintCover">Cudd_zddPrintCover</a>
10161 </code>
10163 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
10165 <dt><pre>
10166 <A NAME="Cudd_zddPrintSubtable"></A>
10167 void <I></I>
10168 <B>Cudd_zddPrintSubtable</B>(
10169 DdManager * <b>table</b> <i></i>
10171 </pre>
10172 <dd> Prints the ZDD table for debugging purposes.
10175 <dd> <b>Side Effects</b> None
10178 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddMisc.c"TARGET="ABSTRACT"><CODE>cuddZddMisc.c</CODE></A>
10180 <dt><pre>
10181 <A NAME="Cudd_zddProduct"></A>
10182 DdNode * <I></I>
10183 <B>Cudd_zddProduct</B>(
10184 DdManager * <b>dd</b>, <i></i>
10185 DdNode * <b>f</b>, <i></i>
10186 DdNode * <b>g</b> <i></i>
10188 </pre>
10189 <dd> Computes the product of two covers represented by
10190 ZDDs. The result is also a ZDD. Returns a pointer to the result if
10191 successful; NULL otherwise. The covers on which Cudd_zddProduct
10192 operates use two ZDD variables for each function variable (one ZDD
10193 variable for each literal of the variable). Those two ZDD variables
10194 should be adjacent in the order.
10197 <dd> <b>Side Effects</b> None
10200 <dd> <b>See Also</b> <code><a href="#Cudd_zddUnateProduct">Cudd_zddUnateProduct</a>
10201 </code>
10203 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
10205 <dt><pre>
10206 <A NAME="Cudd_zddReadNodeCount"></A>
10207 long <I></I>
10208 <B>Cudd_zddReadNodeCount</B>(
10209 DdManager * <b>dd</b> <i></i>
10211 </pre>
10212 <dd> Reports the number of nodes in ZDDs. This
10213 number always includes the two constants 1 and 0.
10216 <dd> <b>Side Effects</b> None
10219 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPeakNodeCount">Cudd_ReadPeakNodeCount</a>
10220 <a href="#Cudd_ReadNodeCount">Cudd_ReadNodeCount</a>
10221 </code>
10223 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10225 <dt><pre>
10226 <A NAME="Cudd_zddRealignDisable"></A>
10227 void <I></I>
10228 <B>Cudd_zddRealignDisable</B>(
10229 DdManager * <b>unique</b> <i></i>
10231 </pre>
10232 <dd> Disables realignment of ZDD order to BDD order.
10235 <dd> <b>Side Effects</b> None
10238 <dd> <b>See Also</b> <code><a href="#Cudd_zddRealignEnable">Cudd_zddRealignEnable</a>
10239 <a href="#Cudd_zddRealignmentEnabled">Cudd_zddRealignmentEnabled</a>
10240 <a href="#Cudd_bddRealignEnable">Cudd_bddRealignEnable</a>
10241 <a href="#Cudd_bddRealignmentEnabled">Cudd_bddRealignmentEnabled</a>
10242 </code>
10244 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10246 <dt><pre>
10247 <A NAME="Cudd_zddRealignEnable"></A>
10248 void <I></I>
10249 <B>Cudd_zddRealignEnable</B>(
10250 DdManager * <b>unique</b> <i></i>
10252 </pre>
10253 <dd> Enables realignment of the ZDD variable order to the
10254 BDD variable order after the BDDs and ADDs have been reordered. The
10255 number of ZDD variables must be a multiple of the number of BDD
10256 variables for realignment to make sense. If this condition is not met,
10257 Cudd_ReduceHeap will return 0. Let <code>M</code> be the
10258 ratio of the two numbers. For the purpose of realignment, the ZDD
10259 variables from <code>M*i</code> to <code>(M+1)*i-1</code> are
10260 reagarded as corresponding to BDD variable <code>i</code>. Realignment
10261 is initially disabled.
10264 <dd> <b>Side Effects</b> None
10267 <dd> <b>See Also</b> <code><a href="#Cudd_ReduceHeap">Cudd_ReduceHeap</a>
10268 <a href="#Cudd_zddRealignDisable">Cudd_zddRealignDisable</a>
10269 <a href="#Cudd_zddRealignmentEnabled">Cudd_zddRealignmentEnabled</a>
10270 <a href="#Cudd_bddRealignDisable">Cudd_bddRealignDisable</a>
10271 <a href="#Cudd_bddRealignmentEnabled">Cudd_bddRealignmentEnabled</a>
10272 </code>
10274 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10276 <dt><pre>
10277 <A NAME="Cudd_zddRealignmentEnabled"></A>
10278 int <I></I>
10279 <B>Cudd_zddRealignmentEnabled</B>(
10280 DdManager * <b>unique</b> <i></i>
10282 </pre>
10283 <dd> Returns 1 if the realignment of ZDD order to BDD order is
10284 enabled; 0 otherwise.
10287 <dd> <b>Side Effects</b> None
10290 <dd> <b>See Also</b> <code><a href="#Cudd_zddRealignEnable">Cudd_zddRealignEnable</a>
10291 <a href="#Cudd_zddRealignDisable">Cudd_zddRealignDisable</a>
10292 <a href="#Cudd_bddRealignEnable">Cudd_bddRealignEnable</a>
10293 <a href="#Cudd_bddRealignDisable">Cudd_bddRealignDisable</a>
10294 </code>
10296 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10298 <dt><pre>
10299 <A NAME="Cudd_zddReduceHeap"></A>
10300 int <I></I>
10301 <B>Cudd_zddReduceHeap</B>(
10302 DdManager * <b>table</b>, <i>DD manager</i>
10303 Cudd_ReorderingType <b>heuristic</b>, <i>method used for reordering</i>
10304 int <b>minsize</b> <i>bound below which no reordering occurs</i>
10306 </pre>
10307 <dd> Main dynamic reordering routine for ZDDs.
10308 Calls one of the possible reordering procedures:
10309 <ul>
10310 <li>Swapping
10311 <li>Sifting
10312 <li>Symmetric Sifting
10313 </ul>
10315 For sifting and symmetric sifting it is possible to request reordering
10316 to convergence.<p>
10318 The core of all methods is the reordering procedure
10319 cuddZddSwapInPlace() which swaps two adjacent variables.
10320 Returns 1 in case of success; 0 otherwise. In the case of symmetric
10321 sifting (with and without convergence) returns 1 plus the number of
10322 symmetric variables, in case of success.
10325 <dd> <b>Side Effects</b> Changes the variable order for all ZDDs and clears
10326 the cache.
10329 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
10331 <dt><pre>
10332 <A NAME="Cudd_zddShuffleHeap"></A>
10333 int <I></I>
10334 <B>Cudd_zddShuffleHeap</B>(
10335 DdManager * <b>table</b>, <i>DD manager</i>
10336 int * <b>permutation</b> <i>required variable permutation</i>
10338 </pre>
10339 <dd> Reorders ZDD variables according to given permutation.
10340 The i-th entry of the permutation array contains the index of the variable
10341 that should be brought to the i-th level. The size of the array should be
10342 equal or greater to the number of variables currently in use.
10343 Returns 1 in case of success; 0 otherwise.
10346 <dd> <b>Side Effects</b> Changes the ZDD variable order for all diagrams and clears
10347 the cache.
10350 <dd> <b>See Also</b> <code><a href="#Cudd_zddReduceHeap">Cudd_zddReduceHeap</a>
10351 </code>
10353 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
10355 <dt><pre>
10356 <A NAME="Cudd_zddSubset0"></A>
10357 DdNode * <I></I>
10358 <B>Cudd_zddSubset0</B>(
10359 DdManager * <b>dd</b>, <i></i>
10360 DdNode * <b>P</b>, <i></i>
10361 int <b>var</b> <i></i>
10363 </pre>
10364 <dd> Computes the negative cofactor of a ZDD w.r.t. a
10365 variable. In terms of combinations, the result is the set of all
10366 combinations in which the variable is negated. Returns a pointer to
10367 the result if successful; NULL otherwise.
10370 <dd> <b>Side Effects</b> None
10373 <dd> <b>See Also</b> <code><a href="#Cudd_zddSubset1">Cudd_zddSubset1</a>
10374 </code>
10376 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
10378 <dt><pre>
10379 <A NAME="Cudd_zddSubset1"></A>
10380 DdNode * <I></I>
10381 <B>Cudd_zddSubset1</B>(
10382 DdManager * <b>dd</b>, <i></i>
10383 DdNode * <b>P</b>, <i></i>
10384 int <b>var</b> <i></i>
10386 </pre>
10387 <dd> Computes the positive cofactor of a ZDD w.r.t. a
10388 variable. In terms of combinations, the result is the set of all
10389 combinations in which the variable is asserted. Returns a pointer to
10390 the result if successful; NULL otherwise.
10393 <dd> <b>Side Effects</b> None
10396 <dd> <b>See Also</b> <code><a href="#Cudd_zddSubset0">Cudd_zddSubset0</a>
10397 </code>
10399 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
10401 <dt><pre>
10402 <A NAME="Cudd_zddSymmProfile"></A>
10403 void <I></I>
10404 <B>Cudd_zddSymmProfile</B>(
10405 DdManager * <b>table</b>, <i></i>
10406 int <b>lower</b>, <i></i>
10407 int <b>upper</b> <i></i>
10409 </pre>
10410 <dd> Prints statistics on symmetric ZDD variables.
10413 <dd> <b>Side Effects</b> None
10416 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
10418 <dt><pre>
10419 <A NAME="Cudd_zddUnateProduct"></A>
10420 DdNode * <I></I>
10421 <B>Cudd_zddUnateProduct</B>(
10422 DdManager * <b>dd</b>, <i></i>
10423 DdNode * <b>f</b>, <i></i>
10424 DdNode * <b>g</b> <i></i>
10426 </pre>
10427 <dd> Computes the product of two unate covers represented as
10428 ZDDs. Unate covers use one ZDD variable for each BDD
10429 variable. Returns a pointer to the result if successful; NULL
10430 otherwise.
10433 <dd> <b>Side Effects</b> None
10436 <dd> <b>See Also</b> <code><a href="#Cudd_zddProduct">Cudd_zddProduct</a>
10437 </code>
10439 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
10441 <dt><pre>
10442 <A NAME="Cudd_zddUnion"></A>
10443 DdNode * <I></I>
10444 <B>Cudd_zddUnion</B>(
10445 DdManager * <b>dd</b>, <i></i>
10446 DdNode * <b>P</b>, <i></i>
10447 DdNode * <b>Q</b> <i></i>
10449 </pre>
10450 <dd> Computes the union of two ZDDs. Returns a pointer to the
10451 result if successful; NULL otherwise.
10454 <dd> <b>Side Effects</b> None
10457 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
10459 <dt><pre>
10460 <A NAME="Cudd_zddVarsFromBddVars"></A>
10461 int <I></I>
10462 <B>Cudd_zddVarsFromBddVars</B>(
10463 DdManager * <b>dd</b>, <i>DD manager</i>
10464 int <b>multiplicity</b> <i>how many ZDD variables are created for each BDD variable</i>
10466 </pre>
10467 <dd> Creates one or more ZDD variables for each BDD
10468 variable. If some ZDD variables already exist, only the missing
10469 variables are created. Parameter multiplicity allows the caller to
10470 control how many variables are created for each BDD variable in
10471 existence. For instance, if ZDDs are used to represent covers, two
10472 ZDD variables are required for each BDD variable. The order of the
10473 BDD variables is transferred to the ZDD variables. If a variable
10474 group tree exists for the BDD variables, a corresponding ZDD
10475 variable group tree is created by expanding the BDD variable
10476 tree. In any case, the ZDD variables derived from the same BDD
10477 variable are merged in a ZDD variable group. If a ZDD variable group
10478 tree exists, it is freed. Returns 1 if successful; 0 otherwise.
10481 <dd> <b>Side Effects</b> None
10484 <dd> <b>See Also</b> <code><a href="#Cudd_bddNewVar">Cudd_bddNewVar</a>
10485 <a href="#Cudd_bddIthVar">Cudd_bddIthVar</a>
10486 <a href="#Cudd_bddNewVarAtLevel">Cudd_bddNewVarAtLevel</a>
10487 </code>
10489 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
10491 <dt><pre>
10492 <A NAME="Cudd_zddWeakDivF"></A>
10493 DdNode * <I></I>
10494 <B>Cudd_zddWeakDivF</B>(
10495 DdManager * <b>dd</b>, <i></i>
10496 DdNode * <b>f</b>, <i></i>
10497 DdNode * <b>g</b> <i></i>
10499 </pre>
10500 <dd> Modified version of Cudd_zddWeakDiv. This function may
10501 disappear in future releases.
10504 <dd> <b>Side Effects</b> None
10507 <dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDiv">Cudd_zddWeakDiv</a>
10508 </code>
10510 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
10512 <dt><pre>
10513 <A NAME="Cudd_zddWeakDiv"></A>
10514 DdNode * <I></I>
10515 <B>Cudd_zddWeakDiv</B>(
10516 DdManager * <b>dd</b>, <i></i>
10517 DdNode * <b>f</b>, <i></i>
10518 DdNode * <b>g</b> <i></i>
10520 </pre>
10521 <dd> Applies weak division to two ZDDs representing two
10522 covers. Returns a pointer to the ZDD representing the result if
10523 successful; NULL otherwise. The result of weak division depends on
10524 the variable order. The covers on which Cudd_zddWeakDiv operates use
10525 two ZDD variables for each function variable (one ZDD variable for
10526 each literal of the variable). Those two ZDD variables should be
10527 adjacent in the order.
10530 <dd> <b>Side Effects</b> None
10533 <dd> <b>See Also</b> <code><a href="#Cudd_zddDivide">Cudd_zddDivide</a>
10534 </code>
10536 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
10538 <dt><pre>
10539 <A NAME="MarkCacheCleanUp"></A>
10540 static enum st_retval <I></I>
10541 <B>MarkCacheCleanUp</B>(
10542 char * <b>key</b>, <i></i>
10543 char * <b>value</b>, <i></i>
10544 char * <b>arg</b> <i></i>
10546 </pre>
10547 <dd> Frees memory associated with computed table of
10548 cuddBddLICMarkEdges. Returns ST_CONTINUE.
10551 <dd> <b>Side Effects</b> None
10554 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
10555 </code>
10557 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
10559 <dt><pre>
10560 <A NAME="MarkCacheCompare"></A>
10561 static int <I></I>
10562 <B>MarkCacheCompare</B>(
10563 const char * <b>ptr1</b>, <i></i>
10564 const char * <b>ptr2</b> <i></i>
10566 </pre>
10567 <dd> Comparison function for the computed table of
10568 cuddBddLICMarkEdges. Returns 0 if the two nodes of the key are equal; 1
10569 otherwise.
10572 <dd> <b>Side Effects</b> None
10575 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
10576 </code>
10578 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
10580 <dt><pre>
10581 <A NAME="MarkCacheHash"></A>
10582 static int <I></I>
10583 <B>MarkCacheHash</B>(
10584 char * <b>ptr</b>, <i></i>
10585 int <b>modulus</b> <i></i>
10587 </pre>
10588 <dd> Hash function for the computed table of
10589 cuddBddLICMarkEdges. Returns the bucket number.
10592 <dd> <b>Side Effects</b> None
10595 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
10596 </code>
10598 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
10600 <dt><pre>
10601 <A NAME="PMX"></A>
10602 static int <I></I>
10603 <B>PMX</B>(
10604 int <b>maxvar</b> <i></i>
10606 </pre>
10607 <dd> Performs the crossover between two randomly chosen
10608 parents, and creates two children, x1 and x2. Uses the Partially
10609 Matched Crossover operator.
10612 <dd> <b>Side Effects</b> None
10615 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
10617 <dt><pre>
10618 <A NAME="PairInTables"></A>
10619 static int <I></I>
10620 <B>PairInTables</B>(
10621 DdNode * <b>g</b>, <i></i>
10622 DdNode * <b>h</b>, <i></i>
10623 st_table * <b>ghTable</b> <i></i>
10625 </pre>
10626 <dd> .Check whether the given pair is in the tables. gTable
10627 and hTable are combined.
10628 absence in both is indicated by 0,
10629 presence in gTable is indicated by 1,
10630 presence in hTable by 2 and
10631 presence in both by 3.
10632 The values returned by this function are PAIR_ST,
10633 PAIR_CR, G_ST, G_CR, H_ST, H_CR, BOTH_G, BOTH_H, NONE.
10634 PAIR_ST implies g in gTable and h in hTable
10635 PAIR_CR implies g in hTable and h in gTable
10636 G_ST implies g in gTable and h not in any table
10637 G_CR implies g in hTable and h not in any table
10638 H_ST implies h in hTable and g not in any table
10639 H_CR implies h in gTable and g not in any table
10640 BOTH_G implies both in gTable
10641 BOTH_H implies both in hTable
10642 NONE implies none in table;
10645 <dd> <b>See Also</b> <code><a href="#CheckTablesCacheAndReturn">CheckTablesCacheAndReturn</a>
10646 <a href="#CheckInTables">CheckInTables</a>
10647 </code>
10649 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
10651 <dt><pre>
10652 <A NAME="PickOnePair"></A>
10653 static Conjuncts * <I></I>
10654 <B>PickOnePair</B>(
10655 DdNode * <b>node</b>, <i></i>
10656 DdNode * <b>g1</b>, <i></i>
10657 DdNode * <b>h1</b>, <i></i>
10658 DdNode * <b>g2</b>, <i></i>
10659 DdNode * <b>h2</b>, <i></i>
10660 st_table * <b>ghTable</b>, <i></i>
10661 st_table * <b>cacheTable</b> <i></i>
10663 </pre>
10664 <dd> Check the tables for the existence of pair and return
10665 one combination, store in cache. The pair that has more pointers to
10666 it is picked. An approximation of the number of local pointers is
10667 made by taking the reference count of the pairs sent.
10670 <dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
10671 <a href="#BuildConjuncts">BuildConjuncts</a>
10672 </code>
10674 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
10676 <dt><pre>
10677 <A NAME="RAbuildSubset"></A>
10678 static DdNode * <I></I>
10679 <B>RAbuildSubset</B>(
10680 DdManager * <b>dd</b>, <i>DD manager</i>
10681 DdNode * <b>node</b>, <i>current node</i>
10682 ApproxInfo * <b>info</b> <i>node info</i>
10684 </pre>
10685 <dd> Builds the subset BDDfor cuddRemapUnderApprox. Based
10686 on the info table, performs remapping or replacement at selected
10687 nodes. Returns a pointer to the result if successful; NULL
10688 otherwise.
10691 <dd> <b>Side Effects</b> None
10694 <dd> <b>See Also</b> <code><a href="#cuddRemapUnderApprox">cuddRemapUnderApprox</a>
10695 </code>
10697 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
10699 <dt><pre>
10700 <A NAME="RAmarkNodes"></A>
10701 static int <I></I>
10702 <B>RAmarkNodes</B>(
10703 DdManager * <b>dd</b>, <i>manager</i>
10704 DdNode * <b>f</b>, <i>function to be analyzed</i>
10705 ApproxInfo * <b>info</b>, <i>info on BDD</i>
10706 int <b>threshold</b>, <i>when to stop approximating</i>
10707 double <b>quality</b> <i>minimum improvement for accepted changes</i>
10709 </pre>
10710 <dd> Marks nodes for remapping. Returns 1 if successful; 0
10711 otherwise.
10714 <dd> <b>Side Effects</b> None
10717 <dd> <b>See Also</b> <code><a href="#cuddRemapUnderApprox">cuddRemapUnderApprox</a>
10718 </code>
10720 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
10722 <dt><pre>
10723 <A NAME="ResizeCountMintermPages"></A>
10724 static void <I></I>
10725 <B>ResizeCountMintermPages</B>(
10726 <b></b> <i></i>
10728 </pre>
10729 <dd> Resize the number of pages allocated to store the minterm
10730 counts. The procedure moves the counter to the next page when the
10731 end of the page is reached and allocates new pages when necessary.
10734 <dd> <b>Side Effects</b> Changes the size of minterm pages, page, page index, maximum
10735 number of pages freeing stuff in case of memory out.
10738 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10740 <dt><pre>
10741 <A NAME="ResizeCountNodePages"></A>
10742 static void <I></I>
10743 <B>ResizeCountNodePages</B>(
10744 <b></b> <i></i>
10746 </pre>
10747 <dd> Resize the number of pages allocated to store the node counts.
10748 The procedure moves the counter to the next page when the end of
10749 the page is reached and allocates new pages when necessary.
10752 <dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
10753 number of pages freeing stuff in case of memory out.
10756 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10758 <dt><pre>
10759 <A NAME="ResizeNodeDataPages"></A>
10760 static void <I></I>
10761 <B>ResizeNodeDataPages</B>(
10762 <b></b> <i></i>
10764 </pre>
10765 <dd> Resize the number of pages allocated to store the node data
10766 The procedure moves the counter to the next page when the end of
10767 the page is reached and allocates new pages when necessary.
10770 <dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
10771 number of pages freeing stuff in case of memory out.
10774 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10776 <dt><pre>
10777 <A NAME="ResizeNodeDistPages"></A>
10778 static void <I></I>
10779 <B>ResizeNodeDistPages</B>(
10780 <b></b> <i></i>
10782 </pre>
10783 <dd> Resize the number of pages allocated to store the distances
10784 related to each node. The procedure moves the counter to the
10785 next page when the end of the page is reached and allocates new
10786 pages when necessary.
10789 <dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
10790 number of pages freeing stuff in case of memory out.
10793 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
10795 <dt><pre>
10796 <A NAME="ResizeQueuePages"></A>
10797 static void <I></I>
10798 <B>ResizeQueuePages</B>(
10799 <b></b> <i></i>
10801 </pre>
10802 <dd> Resize the number of pages allocated to store nodes in the BFS
10803 traversal of the Bdd. The procedure moves the counter to the
10804 next page when the end of the page is reached and allocates new
10805 pages when necessary.
10808 <dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
10809 number of pages freeing stuff in case of memory out.
10812 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
10814 <dt><pre>
10815 <A NAME="StoreNodes"></A>
10816 static void <I></I>
10817 <B>StoreNodes</B>(
10818 st_table * <b>storeTable</b>, <i></i>
10819 DdManager * <b>dd</b>, <i></i>
10820 DdNode * <b>node</b> <i></i>
10822 </pre>
10823 <dd> rocedure to recursively store nodes that are retained in the subset.
10826 <dd> <b>Side Effects</b> None
10829 <dd> <b>See Also</b> <code><a href="#StoreNodes">StoreNodes</a>
10830 </code>
10832 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10834 <dt><pre>
10835 <A NAME="SubsetCountMintermAux"></A>
10836 static double <I></I>
10837 <B>SubsetCountMintermAux</B>(
10838 DdNode * <b>node</b>, <i>function to analyze</i>
10839 double <b>max</b>, <i>number of minterms of constant 1</i>
10840 st_table * <b>table</b> <i>visitedTable table</i>
10842 </pre>
10843 <dd> Recursively counts minterms of each node in the DAG.
10844 Similar to the cuddCountMintermAux which recursively counts the
10845 number of minterms for the dag rooted at each node in terms of the
10846 total number of variables (max). This procedure creates the node
10847 data structure and stores the minterm count as part of the node
10848 data structure.
10851 <dd> <b>Side Effects</b> Creates structures of type node quality and fills the st_table
10854 <dd> <b>See Also</b> <code><a href="#SubsetCountMinterm">SubsetCountMinterm</a>
10855 </code>
10857 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10859 <dt><pre>
10860 <A NAME="SubsetCountMinterm"></A>
10861 static st_table * <I></I>
10862 <B>SubsetCountMinterm</B>(
10863 DdNode * <b>node</b>, <i>function to be analyzed</i>
10864 int <b>nvars</b> <i>number of variables node depends on</i>
10866 </pre>
10867 <dd> Counts minterms of each node in the DAG. Similar to the
10868 Cudd_CountMinterm procedure except this returns the minterm count for
10869 all the nodes in the bdd in an st_table.
10872 <dd> <b>Side Effects</b> none
10875 <dd> <b>See Also</b> <code><a href="#SubsetCountMintermAux">SubsetCountMintermAux</a>
10876 </code>
10878 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10880 <dt><pre>
10881 <A NAME="SubsetCountNodesAux"></A>
10882 static int <I></I>
10883 <B>SubsetCountNodesAux</B>(
10884 DdNode * <b>node</b>, <i>current node</i>
10885 st_table * <b>table</b>, <i>table to update node count, also serves as visited table.</i>
10886 double <b>max</b> <i>maximum number of variables</i>
10888 </pre>
10889 <dd> Recursively counts the number of nodes under the dag.
10890 Also counts the number of nodes under the lighter child of
10891 this node. . Note that the same dag may be the lighter child of two
10892 different nodes and have different counts. As with the minterm counts,
10893 the node counts are stored in pages to be space efficient and the
10894 address for these node counts are stored in an st_table associated
10895 to each node.
10898 <dd> <b>Side Effects</b> Updates the node data table with node counts
10901 <dd> <b>See Also</b> <code><a href="#SubsetCountNodes">SubsetCountNodes</a>
10902 </code>
10904 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10906 <dt><pre>
10907 <A NAME="SubsetCountNodes"></A>
10908 static int <I></I>
10909 <B>SubsetCountNodes</B>(
10910 DdNode * <b>node</b>, <i>function to be analyzed</i>
10911 st_table * <b>table</b>, <i>node quality table</i>
10912 int <b>nvars</b> <i>number of variables node depends on</i>
10914 </pre>
10915 <dd> Counts the nodes under the current node and its lighter
10916 child. Calls a recursive procedure to count the number of nodes of
10917 a DAG rooted at a particular node and the number of nodes taken by its
10918 lighter child.
10921 <dd> <b>Side Effects</b> None
10924 <dd> <b>See Also</b> <code><a href="#SubsetCountNodesAux">SubsetCountNodesAux</a>
10925 </code>
10927 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
10929 <dt><pre>
10930 <A NAME="UAbuildSubset"></A>
10931 static DdNode * <I></I>
10932 <B>UAbuildSubset</B>(
10933 DdManager * <b>dd</b>, <i>DD manager</i>
10934 DdNode * <b>node</b>, <i>current node</i>
10935 ApproxInfo * <b>info</b> <i>node info</i>
10937 </pre>
10938 <dd> Builds the subset BDD. Based on the info table,
10939 replaces selected nodes by zero. Returns a pointer to the result if
10940 successful; NULL otherwise.
10943 <dd> <b>Side Effects</b> None
10946 <dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
10947 </code>
10949 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
10951 <dt><pre>
10952 <A NAME="UAmarkNodes"></A>
10953 static int <I></I>
10954 <B>UAmarkNodes</B>(
10955 DdManager * <b>dd</b>, <i>manager</i>
10956 DdNode * <b>f</b>, <i>function to be analyzed</i>
10957 ApproxInfo * <b>info</b>, <i>info on BDD</i>
10958 int <b>threshold</b>, <i>when to stop approximating</i>
10959 int <b>safe</b>, <i>enforce safe approximation</i>
10960 double <b>quality</b> <i>minimum improvement for accepted changes</i>
10962 </pre>
10963 <dd> Marks nodes for replacement by zero. Returns 1 if successful;
10964 0 otherwise.
10967 <dd> <b>Side Effects</b> None
10970 <dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
10971 </code>
10973 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
10975 <dt><pre>
10976 <A NAME="ZeroCase"></A>
10977 static Conjuncts * <I></I>
10978 <B>ZeroCase</B>(
10979 DdManager * <b>dd</b>, <i></i>
10980 DdNode * <b>node</b>, <i></i>
10981 Conjuncts * <b>factorsNv</b>, <i></i>
10982 st_table * <b>ghTable</b>, <i></i>
10983 st_table * <b>cacheTable</b>, <i></i>
10984 int <b>switched</b> <i></i>
10986 </pre>
10987 <dd> If one child is zero, do explicitly what Restrict does or better.
10988 First separate a variable and its child in the base case. In case of a cube
10989 times a function, separate the cube and function. As a last resort, look in
10990 tables.
10993 <dd> <b>Side Effects</b> Frees the BDDs in factorsNv. factorsNv itself is not freed
10994 because it is freed above.
10997 <dd> <b>See Also</b> <code><a href="#BuildConjuncts">BuildConjuncts</a>
10998 </code>
11000 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
11002 <dt><pre>
11003 <A NAME="addBddDoInterval"></A>
11004 static DdNode * <I></I>
11005 <B>addBddDoInterval</B>(
11006 DdManager * <b>dd</b>, <i></i>
11007 DdNode * <b>f</b>, <i></i>
11008 DdNode * <b>l</b>, <i></i>
11009 DdNode * <b>u</b> <i></i>
11011 </pre>
11012 <dd> Performs the recursive step for Cudd_addBddInterval.
11013 Returns a pointer to the BDD if successful; NULL otherwise.
11016 <dd> <b>Side Effects</b> None
11019 <dd> <b>See Also</b> <code><a href="#addBddDoThreshold">addBddDoThreshold</a>
11020 <a href="#addBddDoStrictThreshold">addBddDoStrictThreshold</a>
11021 </code>
11023 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
11025 <dt><pre>
11026 <A NAME="addBddDoIthBit"></A>
11027 static DdNode * <I></I>
11028 <B>addBddDoIthBit</B>(
11029 DdManager * <b>dd</b>, <i></i>
11030 DdNode * <b>f</b>, <i></i>
11031 DdNode * <b>index</b> <i></i>
11033 </pre>
11034 <dd> Performs the recursive step for Cudd_addBddIthBit.
11035 Returns a pointer to the BDD if successful; NULL otherwise.
11038 <dd> <b>Side Effects</b> None
11041 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
11043 <dt><pre>
11044 <A NAME="addBddDoStrictThreshold"></A>
11045 static DdNode * <I></I>
11046 <B>addBddDoStrictThreshold</B>(
11047 DdManager * <b>dd</b>, <i></i>
11048 DdNode * <b>f</b>, <i></i>
11049 DdNode * <b>val</b> <i></i>
11051 </pre>
11052 <dd> Performs the recursive step for Cudd_addBddStrictThreshold.
11053 Returns a pointer to the BDD if successful; NULL otherwise.
11056 <dd> <b>Side Effects</b> None
11059 <dd> <b>See Also</b> <code><a href="#addBddDoThreshold">addBddDoThreshold</a>
11060 </code>
11062 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
11064 <dt><pre>
11065 <A NAME="addBddDoThreshold"></A>
11066 static DdNode * <I></I>
11067 <B>addBddDoThreshold</B>(
11068 DdManager * <b>dd</b>, <i></i>
11069 DdNode * <b>f</b>, <i></i>
11070 DdNode * <b>val</b> <i></i>
11072 </pre>
11073 <dd> Performs the recursive step for Cudd_addBddThreshold.
11074 Returns a pointer to the BDD if successful; NULL otherwise.
11077 <dd> <b>Side Effects</b> None
11080 <dd> <b>See Also</b> <code><a href="#addBddDoStrictThreshold">addBddDoStrictThreshold</a>
11081 </code>
11083 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
11085 <dt><pre>
11086 <A NAME="addCheckPositiveCube"></A>
11087 static int <I></I>
11088 <B>addCheckPositiveCube</B>(
11089 DdManager * <b>manager</b>, <i></i>
11090 DdNode * <b>cube</b> <i></i>
11092 </pre>
11093 <dd> Checks whether cube is an ADD representing the product of
11094 positive literals. Returns 1 in case of success; 0 otherwise.
11097 <dd> <b>Side Effects</b> None
11100 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
11102 <dt><pre>
11103 <A NAME="addDoIthBit"></A>
11104 static DdNode * <I></I>
11105 <B>addDoIthBit</B>(
11106 DdManager * <b>dd</b>, <i></i>
11107 DdNode * <b>f</b>, <i></i>
11108 DdNode * <b>index</b> <i></i>
11110 </pre>
11111 <dd> Performs the recursive step for Cudd_addIthBit.
11112 Returns a pointer to the BDD if successful; NULL otherwise.
11115 <dd> <b>Side Effects</b> None
11118 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddFind.c"TARGET="ABSTRACT"><CODE>cuddAddFind.c</CODE></A>
11120 <dt><pre>
11121 <A NAME="addMMRecur"></A>
11122 static DdNode * <I></I>
11123 <B>addMMRecur</B>(
11124 DdManager * <b>dd</b>, <i></i>
11125 DdNode * <b>A</b>, <i></i>
11126 DdNode * <b>B</b>, <i></i>
11127 int <b>topP</b>, <i></i>
11128 int * <b>vars</b> <i></i>
11130 </pre>
11131 <dd> Performs the recursive step of Cudd_addMatrixMultiply.
11132 Returns a pointer to the result if successful; NULL otherwise.
11135 <dd> <b>Side Effects</b> None
11138 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
11140 <dt><pre>
11141 <A NAME="addMultiplicityGroups"></A>
11142 static int <I></I>
11143 <B>addMultiplicityGroups</B>(
11144 DdManager * <b>dd</b>, <i>manager</i>
11145 MtrNode * <b>treenode</b>, <i>current tree node</i>
11146 int <b>multiplicity</b>, <i>how many ZDD vars per BDD var</i>
11147 char * <b>vmask</b>, <i>variable pairs for which a group has been already built</i>
11148 char * <b>lmask</b> <i>levels for which a group has already been built</i>
11150 </pre>
11151 <dd> Adds multiplicity groups to a ZDD variable group tree.
11152 Returns 1 if successful; 0 otherwise. This function creates the groups
11153 for set of ZDD variables (whose cardinality is given by parameter
11154 multiplicity) that are created for each BDD variable in
11155 Cudd_zddVarsFromBddVars. The crux of the matter is to determine the index
11156 each new group. (The index of the first variable in the group.)
11157 We first build all the groups for the children of a node, and then deal
11158 with the ZDD variables that are directly attached to the node. The problem
11159 for these is that the tree itself does not provide information on their
11160 position inside the group. While we deal with the children of the node,
11161 therefore, we keep track of all the positions they occupy. The remaining
11162 positions in the tree can be freely used. Also, we keep track of all the
11163 variables placed in the children. All the remaining variables are directly
11164 attached to the group. We can then place any pair of variables not yet
11165 grouped in any pair of available positions in the node.
11168 <dd> <b>Side Effects</b> Changes the variable group tree.
11171 <dd> <b>See Also</b> <code><a href="#Cudd_zddVarsFromBddVars">Cudd_zddVarsFromBddVars</a>
11172 </code>
11174 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
11176 <dt><pre>
11177 <A NAME="addTriangleRecur"></A>
11178 static DdNode * <I></I>
11179 <B>addTriangleRecur</B>(
11180 DdManager * <b>dd</b>, <i></i>
11181 DdNode * <b>f</b>, <i></i>
11182 DdNode * <b>g</b>, <i></i>
11183 int * <b>vars</b>, <i></i>
11184 DdNode * <b>cube</b> <i></i>
11186 </pre>
11187 <dd> Performs the recursive step of Cudd_addTriangle. Returns
11188 a pointer to the result if successful; NULL otherwise.
11191 <dd> <b>Side Effects</b> None
11194 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
11196 <dt><pre>
11197 <A NAME="addVarToConst"></A>
11198 static void <I></I>
11199 <B>addVarToConst</B>(
11200 DdNode * <b>f</b>, <i></i>
11201 DdNode ** <b>gp</b>, <i></i>
11202 DdNode ** <b>hp</b>, <i></i>
11203 DdNode * <b>one</b>, <i></i>
11204 DdNode * <b>zero</b> <i></i>
11206 </pre>
11207 <dd> Replaces variables with constants if possible (part of
11208 canonical form).
11211 <dd> <b>Side Effects</b> None
11214 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
11216 <dt><pre>
11217 <A NAME="addWalshInt"></A>
11218 static DdNode * <I></I>
11219 <B>addWalshInt</B>(
11220 DdManager * <b>dd</b>, <i></i>
11221 DdNode ** <b>x</b>, <i></i>
11222 DdNode ** <b>y</b>, <i></i>
11223 int <b>n</b> <i></i>
11225 </pre>
11226 <dd> Generates a Walsh matrix in ADD form. Returns a pointer
11227 to the matrixi if successful; NULL otherwise.
11230 <dd> <b>Side Effects</b> None
11233 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddWalsh.c"TARGET="ABSTRACT"><CODE>cuddAddWalsh.c</CODE></A>
11235 <dt><pre>
11236 <A NAME="array_compare"></A>
11237 static int <I></I>
11238 <B>array_compare</B>(
11239 const char * <b>array1</b>, <i></i>
11240 const char * <b>array2</b> <i></i>
11242 </pre>
11243 <dd> Comparison function for the computed table. Returns 0 if
11244 the two arrays are equal; 1 otherwise.
11247 <dd> <b>Side Effects</b> None
11250 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
11252 <dt><pre>
11253 <A NAME="array_hash"></A>
11254 static int <I></I>
11255 <B>array_hash</B>(
11256 char * <b>array</b>, <i></i>
11257 int <b>modulus</b> <i></i>
11259 </pre>
11260 <dd> Hash function for the computed table. Returns the bucket
11261 number.
11264 <dd> <b>Side Effects</b> None
11267 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
11269 <dt><pre>
11270 <A NAME="bddAnnotateMintermCount"></A>
11271 static double <I></I>
11272 <B>bddAnnotateMintermCount</B>(
11273 DdManager * <b>manager</b>, <i></i>
11274 DdNode * <b>node</b>, <i></i>
11275 double <b>max</b>, <i></i>
11276 st_table * <b>table</b> <i></i>
11278 </pre>
11279 <dd> Annotates every node in the BDD node with its minterm count.
11280 In this function, every node and the minterm count represented by it are
11281 stored in a hash table.
11284 <dd> <b>Side Effects</b> Fills up 'table' with the pair <node,minterm_count>.
11287 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>
11289 <dt><pre>
11290 <A NAME="bddCheckPositiveCube"></A>
11291 static int <I></I>
11292 <B>bddCheckPositiveCube</B>(
11293 DdManager * <b>manager</b>, <i></i>
11294 DdNode * <b>cube</b> <i></i>
11296 </pre>
11297 <dd> Returns 1 in case of success; 0 otherwise.
11300 <dd> <b>Side Effects</b> None
11303 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
11305 <dt><pre>
11306 <A NAME="bddCorrelationAux"></A>
11307 static double <I></I>
11308 <B>bddCorrelationAux</B>(
11309 DdManager * <b>dd</b>, <i></i>
11310 DdNode * <b>f</b>, <i></i>
11311 DdNode * <b>g</b>, <i></i>
11312 st_table * <b>table</b> <i></i>
11314 </pre>
11315 <dd> Performs the recursive step of Cudd_bddCorrelation.
11316 Returns the fraction of minterms in the ON-set of the EXNOR of f and
11320 <dd> <b>Side Effects</b> None
11323 <dd> <b>See Also</b> <code><a href="#bddCorrelationWeightsAux">bddCorrelationWeightsAux</a>
11324 </code>
11326 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
11328 <dt><pre>
11329 <A NAME="bddCorrelationWeightsAux"></A>
11330 static double <I></I>
11331 <B>bddCorrelationWeightsAux</B>(
11332 DdManager * <b>dd</b>, <i></i>
11333 DdNode * <b>f</b>, <i></i>
11334 DdNode * <b>g</b>, <i></i>
11335 double * <b>prob</b>, <i></i>
11336 st_table * <b>table</b> <i></i>
11338 </pre>
11339 <dd> Performs the recursive step of Cudd_bddCorrelationWeigths.
11342 <dd> <b>Side Effects</b> None
11345 <dd> <b>See Also</b> <code><a href="#bddCorrelationAux">bddCorrelationAux</a>
11346 </code>
11348 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>
11350 <dt><pre>
11351 <A NAME="bddFixTree"></A>
11352 static void <I></I>
11353 <B>bddFixTree</B>(
11354 DdManager * <b>table</b>, <i></i>
11355 MtrNode * <b>treenode</b> <i></i>
11357 </pre>
11358 <dd> Fixes the BDD variable group tree after a
11359 shuffle. Assumes that the order of the variables in a terminal node
11360 has not been changed.
11363 <dd> <b>Side Effects</b> Changes the BDD variable group tree.
11366 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
11368 <dt><pre>
11369 <A NAME="bddVarToCanonicalSimple"></A>
11370 static int <I></I>
11371 <B>bddVarToCanonicalSimple</B>(
11372 DdManager * <b>dd</b>, <i></i>
11373 DdNode ** <b>fp</b>, <i></i>
11374 DdNode ** <b>gp</b>, <i></i>
11375 DdNode ** <b>hp</b>, <i></i>
11376 unsigned int * <b>topfp</b>, <i></i>
11377 unsigned int * <b>topgp</b>, <i></i>
11378 unsigned int * <b>tophp</b> <i></i>
11380 </pre>
11381 <dd> Makes sure the first two pointers are regular. This
11382 mat require the complementation of the result, which is signaled by
11383 returning 1 instead of 0. This function is simpler than the general
11384 case because it assumes that no two arguments are the same or
11385 complementary, and no argument is constant.
11388 <dd> <b>Side Effects</b> None
11391 <dd> <b>See Also</b> <code><a href="#bddVarToConst">bddVarToConst</a>
11392 <a href="#bddVarToCanonical">bddVarToCanonical</a>
11393 </code>
11395 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
11397 <dt><pre>
11398 <A NAME="bddVarToCanonical"></A>
11399 static int <I></I>
11400 <B>bddVarToCanonical</B>(
11401 DdManager * <b>dd</b>, <i></i>
11402 DdNode ** <b>fp</b>, <i></i>
11403 DdNode ** <b>gp</b>, <i></i>
11404 DdNode ** <b>hp</b>, <i></i>
11405 unsigned int * <b>topfp</b>, <i></i>
11406 unsigned int * <b>topgp</b>, <i></i>
11407 unsigned int * <b>tophp</b> <i></i>
11409 </pre>
11410 <dd> Reduces 2 variable expressions to canonical form.
11413 <dd> <b>Side Effects</b> None
11416 <dd> <b>See Also</b> <code><a href="#bddVarToConst">bddVarToConst</a>
11417 <a href="#bddVarToCanonicalSimple">bddVarToCanonicalSimple</a>
11418 </code>
11420 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
11422 <dt><pre>
11423 <A NAME="bddVarToConst"></A>
11424 static void <I></I>
11425 <B>bddVarToConst</B>(
11426 DdNode * <b>f</b>, <i></i>
11427 DdNode ** <b>gp</b>, <i></i>
11428 DdNode ** <b>hp</b>, <i></i>
11429 DdNode * <b>one</b> <i></i>
11431 </pre>
11432 <dd> This function performs part of the transformation to
11433 standard form by replacing variables with constants if possible.
11436 <dd> <b>Side Effects</b> None
11439 <dd> <b>See Also</b> <code><a href="#bddVarToCanonical">bddVarToCanonical</a>
11440 <a href="#bddVarToCanonicalSimple">bddVarToCanonicalSimple</a>
11441 </code>
11443 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
11445 <dt><pre>
11446 <A NAME="beforep"></A>
11447 static int <I></I>
11448 <B>beforep</B>(
11449 DdHalfWord <b>var1a</b>, <i></i>
11450 short <b>phase1a</b>, <i></i>
11451 DdHalfWord <b>var1b</b>, <i></i>
11452 short <b>phase1b</b>, <i></i>
11453 DdHalfWord <b>var2a</b>, <i></i>
11454 short <b>phase2a</b>, <i></i>
11455 DdHalfWord <b>var2b</b>, <i></i>
11456 short <b>phase2b</b> <i></i>
11458 </pre>
11459 <dd> Returns true iff the first argument precedes the second
11460 in the clause order. A clause precedes another if its first lieral
11461 precedes the first literal of the other, or if the first literals
11462 are the same, and its second literal precedes the second literal of
11463 the other clause. A literal precedes another if it has a higher
11464 index, of if it has the same index, but it has lower phase. Phase 0
11465 is the positive phase, and it is lower than Phase 1 (negative
11466 phase).
11469 <dd> <b>Side Effects</b> None
11472 <dd> <b>See Also</b> <code><a href="#equalp">equalp</a>
11473 </code>
11475 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11477 <dt><pre>
11478 <A NAME="bitVectorAlloc"></A>
11479 static BitVector * <I></I>
11480 <B>bitVectorAlloc</B>(
11481 int <b>size</b> <i></i>
11483 </pre>
11484 <dd> Allocates a bit vector. The parameter size gives the
11485 number of bits. This procedure allocates enough long's to hold the
11486 specified number of bits. Returns a pointer to the allocated vector
11487 if successful; NULL otherwise.
11490 <dd> <b>Side Effects</b> None
11493 <dd> <b>See Also</b> <code><a href="#bitVectorClear">bitVectorClear</a>
11494 <a href="#bitVectorFree">bitVectorFree</a>
11495 </code>
11497 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11499 <dt><pre>
11500 <A NAME="bitVectorClear"></A>
11501 static void <I></I>
11502 <B>bitVectorClear</B>(
11503 BitVector * <b>vector</b>, <i></i>
11504 int <b>size</b> <i></i>
11506 </pre>
11507 <dd> Clears a bit vector. The parameter size gives the
11508 number of bits.
11511 <dd> <b>Side Effects</b> None
11514 <dd> <b>See Also</b> <code><a href="#bitVectorAlloc">bitVectorAlloc</a>
11515 </code>
11517 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11519 <dt><pre>
11520 <A NAME="bitVectorFree"></A>
11521 static void <I></I>
11522 <B>bitVectorFree</B>(
11523 BitVector * <b>vector</b> <i></i>
11525 </pre>
11526 <dd> Frees a bit vector.
11529 <dd> <b>Side Effects</b> None
11532 <dd> <b>See Also</b> <code><a href="#bitVectorAlloc">bitVectorAlloc</a>
11533 </code>
11535 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11537 <dt><pre>
11538 <A NAME="bitVectorRead"></A>
11539 static short <I></I>
11540 <B>bitVectorRead</B>(
11541 BitVector * <b>vector</b>, <i></i>
11542 int <b>i</b> <i></i>
11544 </pre>
11545 <dd> Returns the i-th entry of a bit vector.
11548 <dd> <b>Side Effects</b> None
11551 <dd> <b>See Also</b> <code><a href="#bitVectorSet">bitVectorSet</a>
11552 </code>
11554 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11556 <dt><pre>
11557 <A NAME="bitVectorSet"></A>
11558 static void <I></I>
11559 <B>bitVectorSet</B>(
11560 BitVector * <b>vector</b>, <i></i>
11561 int <b>i</b>, <i></i>
11562 short <b>val</b> <i></i>
11564 </pre>
11565 <dd> Sets the i-th entry of a bit vector to a value.
11568 <dd> <b>Side Effects</b> None
11571 <dd> <b>See Also</b> <code><a href="#bitVectorRead">bitVectorRead</a>
11572 </code>
11574 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11576 <dt><pre>
11577 <A NAME="build_dd"></A>
11578 static int <I></I>
11579 <B>build_dd</B>(
11580 DdManager * <b>table</b>, <i></i>
11581 int <b>num</b>, <i>the index of the individual to be built</i>
11582 int <b>lower</b>, <i></i>
11583 int <b>upper</b> <i></i>
11585 </pre>
11586 <dd> Builds a DD from a given order. This procedure also
11587 sifts the final order and inserts into the array the size in nodes
11588 of the result. Returns 1 if successful; 0 otherwise.
11591 <dd> <b>Side Effects</b> None
11594 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
11596 <dt><pre>
11597 <A NAME="checkSymmInfo"></A>
11598 static int <I></I>
11599 <B>checkSymmInfo</B>(
11600 DdManager * <b>table</b>, <i></i>
11601 DdHalfWord * <b>symmInfo</b>, <i></i>
11602 int <b>index</b>, <i></i>
11603 int <b>level</b> <i></i>
11605 </pre>
11606 <dd> Returns 1 if a variable is the one with the highest index
11607 among those belonging to a symmetry group that are in the top part of
11608 the BDD. The top part is given by level.
11611 <dd> <b>Side Effects</b> None
11614 <dd> <b>See Also</b> <code><a href="#initSymmInfo">initSymmInfo</a>
11615 </code>
11617 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
11619 <dt><pre>
11620 <A NAME="computeClausesWithUniverse"></A>
11621 static DdTlcInfo * <I></I>
11622 <B>computeClausesWithUniverse</B>(
11623 DdTlcInfo * <b>Cres</b>, <i>list of clauses for child</i>
11624 DdHalfWord <b>label</b>, <i>variable labeling the current node</i>
11625 short <b>phase</b> <i>0 if E child is zero; 1 if T child is zero</i>
11627 </pre>
11628 <dd> Computes the two-literal clauses for a node with a zero
11629 child, given the clauses for its other child and the label of the
11630 node. Returns a pointer to a TclInfo structure if successful; NULL
11631 otherwise.
11634 <dd> <b>Side Effects</b> None
11637 <dd> <b>See Also</b> <code><a href="#computeClauses">computeClauses</a>
11638 </code>
11640 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11642 <dt><pre>
11643 <A NAME="computeClauses"></A>
11644 static DdTlcInfo * <I></I>
11645 <B>computeClauses</B>(
11646 DdTlcInfo * <b>Tres</b>, <i>list of clauses for T child</i>
11647 DdTlcInfo * <b>Eres</b>, <i>list of clauses for E child</i>
11648 DdHalfWord <b>label</b>, <i>variable labeling the current node</i>
11649 int <b>size</b> <i>number of variables in the manager</i>
11651 </pre>
11652 <dd> Computes the two-literal clauses for a node given the
11653 clauses for its children and the label of the node. Returns a
11654 pointer to a TclInfo structure if successful; NULL otherwise.
11657 <dd> <b>Side Effects</b> None
11660 <dd> <b>See Also</b> <code><a href="#computeClausesWithUniverse">computeClausesWithUniverse</a>
11661 </code>
11663 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
11665 <dt><pre>
11666 <A NAME="computeLB"></A>
11667 static int <I></I>
11668 <B>computeLB</B>(
11669 DdManager * <b>table</b>, <i>manager</i>
11670 DdHalfWord * <b>order</b>, <i>optimal order for the subset</i>
11671 int <b>roots</b>, <i>roots between lower and upper</i>
11672 int <b>cost</b>, <i>minimum cost for the subset</i>
11673 int <b>lower</b>, <i>lower level to be reordered</i>
11674 int <b>upper</b>, <i>upper level to be reordered</i>
11675 int <b>level</b> <i>offset for the current top bottom var</i>
11677 </pre>
11678 <dd> Computes a lower bound on the size of a BDD from the
11679 following factors:
11680 <ul>
11681 <li> size of the lower part of it;
11682 <li> size of the part of the upper part not subjected to reordering;
11683 <li> number of roots in the part of the BDD subjected to reordering;
11684 <li> variable in the support of the roots in the upper part of the
11685 BDD subjected to reordering.
11686 <ul/>
11689 <dd> <b>Side Effects</b> None
11692 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
11694 <dt><pre>
11695 <A NAME="computeSavings"></A>
11696 static int <I></I>
11697 <B>computeSavings</B>(
11698 DdManager * <b>dd</b>, <i></i>
11699 DdNode * <b>f</b>, <i></i>
11700 DdNode * <b>skip</b>, <i></i>
11701 ApproxInfo * <b>info</b>, <i></i>
11702 DdLevelQueue * <b>queue</b> <i></i>
11704 </pre>
11705 <dd> Counts the nodes that would be eliminated if a given
11706 node were replaced by zero. This procedure uses a queue passed by
11707 the caller for efficiency: since the queue is left empty at the
11708 endof the search, it can be reused as is by the next search. Returns
11709 the count (always striclty positive) if successful; 0 otherwise.
11712 <dd> <b>Side Effects</b> None
11715 <dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
11716 </code>
11718 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
11720 <dt><pre>
11721 <A NAME="copyOrder"></A>
11722 static void <I></I>
11723 <B>copyOrder</B>(
11724 DdManager * <b>table</b>, <i></i>
11725 int * <b>array</b>, <i></i>
11726 int <b>lower</b>, <i></i>
11727 int <b>upper</b> <i></i>
11729 </pre>
11730 <dd> Copies the current variable order to array.
11731 At the same time inverts the permutation.
11734 <dd> <b>Side Effects</b> None
11737 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
11739 <dt><pre>
11740 <A NAME="createResult"></A>
11741 static DdNode * <I></I>
11742 <B>createResult</B>(
11743 DdManager * <b>dd</b>, <i></i>
11744 unsigned int <b>index</b>, <i></i>
11745 unsigned int <b>phase</b>, <i></i>
11746 DdNode * <b>cube</b>, <i></i>
11747 CUDD_VALUE_TYPE <b>distance</b> <i></i>
11749 </pre>
11750 <dd> Builds a result for cache storage. Returns a pointer
11751 to the resulting ADD if successful; NULL otherwise.
11754 <dd> <b>Side Effects</b> None
11757 <dd> <b>See Also</b> <code><a href="#cuddBddClosestCube">cuddBddClosestCube</a>
11758 separateCube
11759 </code>
11761 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
11763 <dt><pre>
11764 <A NAME="cuddAddApplyRecur"></A>
11765 DdNode * <I></I>
11766 <B>cuddAddApplyRecur</B>(
11767 DdManager * <b>dd</b>, <i></i>
11768 DD_AOP <b>op</b>, <i></i>
11769 DdNode * <b>f</b>, <i></i>
11770 DdNode * <b>g</b> <i></i>
11772 </pre>
11773 <dd> Performs the recursive step of Cudd_addApply. Returns a
11774 pointer to the result if successful; NULL otherwise.
11777 <dd> <b>Side Effects</b> None
11780 <dd> <b>See Also</b> <code><a href="#cuddAddMonadicApplyRecur">cuddAddMonadicApplyRecur</a>
11781 </code>
11783 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
11785 <dt><pre>
11786 <A NAME="cuddAddBddDoPattern"></A>
11787 DdNode * <I></I>
11788 <B>cuddAddBddDoPattern</B>(
11789 DdManager * <b>dd</b>, <i></i>
11790 DdNode * <b>f</b> <i></i>
11792 </pre>
11793 <dd> Performs the recursive step for Cudd_addBddPattern. Returns a
11794 pointer to the resulting BDD if successful; NULL otherwise.
11797 <dd> <b>Side Effects</b> None
11800 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
11802 <dt><pre>
11803 <A NAME="cuddAddCmplRecur"></A>
11804 DdNode * <I></I>
11805 <B>cuddAddCmplRecur</B>(
11806 DdManager * <b>dd</b>, <i></i>
11807 DdNode * <b>f</b> <i></i>
11809 </pre>
11810 <dd> Performs the recursive step of Cudd_addCmpl. Returns a
11811 pointer to the resulting ADD if successful; NULL otherwise.
11814 <dd> <b>Side Effects</b> None
11817 <dd> <b>See Also</b> <code><a href="#Cudd_addCmpl">Cudd_addCmpl</a>
11818 </code>
11820 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
11822 <dt><pre>
11823 <A NAME="cuddAddComposeRecur"></A>
11824 DdNode * <I></I>
11825 <B>cuddAddComposeRecur</B>(
11826 DdManager * <b>dd</b>, <i></i>
11827 DdNode * <b>f</b>, <i></i>
11828 DdNode * <b>g</b>, <i></i>
11829 DdNode * <b>proj</b> <i></i>
11831 </pre>
11832 <dd> Performs the recursive step of Cudd_addCompose.
11833 Returns the composed BDD if successful; NULL otherwise.
11836 <dd> <b>Side Effects</b> None
11839 <dd> <b>See Also</b> <code><a href="#Cudd_addCompose">Cudd_addCompose</a>
11840 </code>
11842 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
11844 <dt><pre>
11845 <A NAME="cuddAddConstrainRecur"></A>
11846 DdNode * <I></I>
11847 <B>cuddAddConstrainRecur</B>(
11848 DdManager * <b>dd</b>, <i></i>
11849 DdNode * <b>f</b>, <i></i>
11850 DdNode * <b>c</b> <i></i>
11852 </pre>
11853 <dd> Performs the recursive step of Cudd_addConstrain.
11854 Returns a pointer to the result if successful; NULL otherwise.
11857 <dd> <b>Side Effects</b> None
11860 <dd> <b>See Also</b> <code><a href="#Cudd_addConstrain">Cudd_addConstrain</a>
11861 </code>
11863 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
11865 <dt><pre>
11866 <A NAME="cuddAddExistAbstractRecur"></A>
11867 DdNode * <I></I>
11868 <B>cuddAddExistAbstractRecur</B>(
11869 DdManager * <b>manager</b>, <i></i>
11870 DdNode * <b>f</b>, <i></i>
11871 DdNode * <b>cube</b> <i></i>
11873 </pre>
11874 <dd> Performs the recursive step of Cudd_addExistAbstract.
11875 Returns the ADD obtained by abstracting the variables of cube from f,
11876 if successful; NULL otherwise.
11879 <dd> <b>Side Effects</b> None
11882 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
11884 <dt><pre>
11885 <A NAME="cuddAddGeneralVectorComposeRecur"></A>
11886 static DdNode * <I></I>
11887 <B>cuddAddGeneralVectorComposeRecur</B>(
11888 DdManager * <b>dd</b>, <i>DD manager</i>
11889 DdHashTable * <b>table</b>, <i>computed table</i>
11890 DdNode * <b>f</b>, <i>ADD in which to compose</i>
11891 DdNode ** <b>vectorOn</b>, <i>functions to substitute for x_i</i>
11892 DdNode ** <b>vectorOff</b>, <i>functions to substitute for x_i'</i>
11893 int <b>deepest</b> <i>depth of deepest substitution</i>
11895 </pre>
11896 <dd> Performs the recursive step of Cudd_addGeneralVectorCompose.
11899 <dd> <b>Side Effects</b> None
11902 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
11904 <dt><pre>
11905 <A NAME="cuddAddIteRecur"></A>
11906 DdNode * <I></I>
11907 <B>cuddAddIteRecur</B>(
11908 DdManager * <b>dd</b>, <i></i>
11909 DdNode * <b>f</b>, <i></i>
11910 DdNode * <b>g</b>, <i></i>
11911 DdNode * <b>h</b> <i></i>
11913 </pre>
11914 <dd> Implements the recursive step of Cudd_addIte(f,g,h).
11915 Returns a pointer to the resulting ADD if successful; NULL
11916 otherwise.
11919 <dd> <b>Side Effects</b> None
11922 <dd> <b>See Also</b> <code><a href="#Cudd_addIte">Cudd_addIte</a>
11923 </code>
11925 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>
11927 <dt><pre>
11928 <A NAME="cuddAddMonadicApplyRecur"></A>
11929 DdNode * <I></I>
11930 <B>cuddAddMonadicApplyRecur</B>(
11931 DdManager * <b>dd</b>, <i></i>
11932 DD_MAOP <b>op</b>, <i></i>
11933 DdNode * <b>f</b> <i></i>
11935 </pre>
11936 <dd> Performs the recursive step of Cudd_addMonadicApply. Returns a
11937 pointer to the result if successful; NULL otherwise.
11940 <dd> <b>Side Effects</b> None
11943 <dd> <b>See Also</b> <code><a href="#cuddAddApplyRecur">cuddAddApplyRecur</a>
11944 </code>
11946 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>
11948 <dt><pre>
11949 <A NAME="cuddAddNegateRecur"></A>
11950 DdNode * <I></I>
11951 <B>cuddAddNegateRecur</B>(
11952 DdManager * <b>dd</b>, <i></i>
11953 DdNode * <b>f</b> <i></i>
11955 </pre>
11956 <dd> Implements the recursive step of Cudd_addNegate.
11957 Returns a pointer to the result.
11960 <dd> <b>Side Effects</b> None
11963 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>
11965 <dt><pre>
11966 <A NAME="cuddAddNonSimComposeRecur"></A>
11967 static DdNode * <I></I>
11968 <B>cuddAddNonSimComposeRecur</B>(
11969 DdManager * <b>dd</b>, <i></i>
11970 DdNode * <b>f</b>, <i></i>
11971 DdNode ** <b>vector</b>, <i></i>
11972 DdNode * <b>key</b>, <i></i>
11973 DdNode * <b>cube</b>, <i></i>
11974 int <b>lastsub</b> <i></i>
11976 </pre>
11977 <dd> Performs the recursive step of Cudd_addNonSimCompose.
11980 <dd> <b>Side Effects</b> None
11983 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
11985 <dt><pre>
11986 <A NAME="cuddAddOrAbstractRecur"></A>
11987 DdNode * <I></I>
11988 <B>cuddAddOrAbstractRecur</B>(
11989 DdManager * <b>manager</b>, <i></i>
11990 DdNode * <b>f</b>, <i></i>
11991 DdNode * <b>cube</b> <i></i>
11993 </pre>
11994 <dd> Performs the recursive step of Cudd_addOrAbstract.
11995 Returns the ADD obtained by abstracting the variables of cube from f,
11996 if successful; NULL otherwise.
11999 <dd> <b>Side Effects</b> None
12002 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
12004 <dt><pre>
12005 <A NAME="cuddAddOuterSumRecur"></A>
12006 static DdNode * <I></I>
12007 <B>cuddAddOuterSumRecur</B>(
12008 DdManager * <b>dd</b>, <i></i>
12009 DdNode * <b>M</b>, <i></i>
12010 DdNode * <b>r</b>, <i></i>
12011 DdNode * <b>c</b> <i></i>
12013 </pre>
12014 <dd> Performs the recursive step of Cudd_addOuterSum.
12015 Returns a pointer to the result if successful; NULL otherwise.
12018 <dd> <b>Side Effects</b> None
12021 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>
12023 <dt><pre>
12024 <A NAME="cuddAddPermuteRecur"></A>
12025 static DdNode * <I></I>
12026 <B>cuddAddPermuteRecur</B>(
12027 DdManager * <b>manager</b>, <i>DD manager</i>
12028 DdHashTable * <b>table</b>, <i>computed table</i>
12029 DdNode * <b>node</b>, <i>ADD to be reordered</i>
12030 int * <b>permut</b> <i>permutation array</i>
12032 </pre>
12033 <dd> Recursively puts the ADD in the order given in the
12034 array permut. Checks for trivial cases to terminate recursion, then
12035 splits on the children of this node. Once the solutions for the
12036 children are obtained, it puts into the current position the node
12037 from the rest of the ADD that should be here. Then returns this ADD.
12038 The key here is that the node being visited is NOT put in its proper
12039 place by this instance, but rather is switched when its proper
12040 position is reached in the recursion tree.<p>
12041 The DdNode * that is returned is the same ADD as passed in as node,
12042 but in the new order.
12045 <dd> <b>Side Effects</b> None
12048 <dd> <b>See Also</b> <code><a href="#Cudd_addPermute">Cudd_addPermute</a>
12049 <a href="#cuddBddPermuteRecur">cuddBddPermuteRecur</a>
12050 </code>
12052 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12054 <dt><pre>
12055 <A NAME="cuddAddRestrictRecur"></A>
12056 DdNode * <I></I>
12057 <B>cuddAddRestrictRecur</B>(
12058 DdManager * <b>dd</b>, <i></i>
12059 DdNode * <b>f</b>, <i></i>
12060 DdNode * <b>c</b> <i></i>
12062 </pre>
12063 <dd> Performs the recursive step of Cudd_addRestrict.
12064 Returns the restricted ADD if successful; otherwise NULL.
12067 <dd> <b>Side Effects</b> None
12070 <dd> <b>See Also</b> <code><a href="#Cudd_addRestrict">Cudd_addRestrict</a>
12071 </code>
12073 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12075 <dt><pre>
12076 <A NAME="cuddAddRoundOffRecur"></A>
12077 DdNode * <I></I>
12078 <B>cuddAddRoundOffRecur</B>(
12079 DdManager * <b>dd</b>, <i></i>
12080 DdNode * <b>f</b>, <i></i>
12081 double <b>trunc</b> <i></i>
12083 </pre>
12084 <dd> Implements the recursive step of Cudd_addRoundOff.
12085 Returns a pointer to the result.
12088 <dd> <b>Side Effects</b> None
12091 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>
12093 <dt><pre>
12094 <A NAME="cuddAddScalarInverseRecur"></A>
12095 DdNode * <I></I>
12096 <B>cuddAddScalarInverseRecur</B>(
12097 DdManager * <b>dd</b>, <i></i>
12098 DdNode * <b>f</b>, <i></i>
12099 DdNode * <b>epsilon</b> <i></i>
12101 </pre>
12102 <dd> Returns a pointer to the resulting ADD in case of
12103 success. Returns NULL if any discriminants smaller than epsilon is
12104 encountered.
12107 <dd> <b>Side Effects</b> None
12110 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddInv.c"TARGET="ABSTRACT"><CODE>cuddAddInv.c</CODE></A>
12112 <dt><pre>
12113 <A NAME="cuddAddUnivAbstractRecur"></A>
12114 DdNode * <I></I>
12115 <B>cuddAddUnivAbstractRecur</B>(
12116 DdManager * <b>manager</b>, <i></i>
12117 DdNode * <b>f</b>, <i></i>
12118 DdNode * <b>cube</b> <i></i>
12120 </pre>
12121 <dd> Performs the recursive step of Cudd_addUnivAbstract.
12122 Returns the ADD obtained by abstracting the variables of cube from f,
12123 if successful; NULL otherwise.
12126 <dd> <b>Side Effects</b> None
12129 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>
12131 <dt><pre>
12132 <A NAME="cuddAddVectorComposeRecur"></A>
12133 static DdNode * <I></I>
12134 <B>cuddAddVectorComposeRecur</B>(
12135 DdManager * <b>dd</b>, <i>DD manager</i>
12136 DdHashTable * <b>table</b>, <i>computed table</i>
12137 DdNode * <b>f</b>, <i>ADD in which to compose</i>
12138 DdNode ** <b>vector</b>, <i>functions to substitute</i>
12139 int <b>deepest</b> <i>depth of deepest substitution</i>
12141 </pre>
12142 <dd> Performs the recursive step of Cudd_addVectorCompose.
12145 <dd> <b>Side Effects</b> None
12148 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12150 <dt><pre>
12151 <A NAME="cuddAllocNode"></A>
12152 DdNode * <I></I>
12153 <B>cuddAllocNode</B>(
12154 DdManager * <b>unique</b> <i></i>
12156 </pre>
12157 <dd> Fast storage allocation for DdNodes in the table. The
12158 first 4 bytes of a chunk contain a pointer to the next block; the
12159 rest contains DD_MEM_CHUNK spaces for DdNodes. Returns a pointer to
12160 a new node if successful; NULL is memory is full.
12163 <dd> <b>Side Effects</b> None
12166 <dd> <b>See Also</b> <code><a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
12167 </code>
12169 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
12171 <dt><pre>
12172 <A NAME="cuddAnnealing"></A>
12173 int <I></I>
12174 <B>cuddAnnealing</B>(
12175 DdManager * <b>table</b>, <i></i>
12176 int <b>lower</b>, <i></i>
12177 int <b>upper</b> <i></i>
12179 </pre>
12180 <dd> Get x, y by random selection. Choose either
12181 exchange or jump randomly. In case of jump, choose between jump_up
12182 and jump_down randomly. Do exchange or jump and get optimal case.
12183 Loop until there is no improvement or temperature reaches
12184 minimum. Returns 1 in case of success; 0 otherwise.
12187 <dd> <b>Side Effects</b> None
12190 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
12192 <dt><pre>
12193 <A NAME="cuddApaCountMintermAux"></A>
12194 static DdApaNumber <I></I>
12195 <B>cuddApaCountMintermAux</B>(
12196 DdNode * <b>node</b>, <i></i>
12197 int <b>digits</b>, <i></i>
12198 DdApaNumber <b>max</b>, <i></i>
12199 DdApaNumber <b>min</b>, <i></i>
12200 st_table * <b>table</b> <i></i>
12202 </pre>
12203 <dd> Performs the recursive step of Cudd_ApaCountMinterm.
12204 It is based on the following identity. Let |f| be the
12205 number of minterms of f. Then:
12206 <xmp>
12207 |f| = (|f0|+|f1|)/2
12208 </xmp>
12209 where f0 and f1 are the two cofactors of f.
12210 Uses the identity <code>|f'| = max - |f|</code>.
12211 The procedure expects the argument "node" to be a regular pointer, and
12212 guarantees this condition is met in the recursive calls.
12213 For efficiency, the result of a call is cached only if the node has
12214 a reference count greater than 1.
12215 Returns the number of minterms of the function rooted at node.
12218 <dd> <b>Side Effects</b> None
12221 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
12223 <dt><pre>
12224 <A NAME="cuddApaStCountfree"></A>
12225 static enum st_retval <I></I>
12226 <B>cuddApaStCountfree</B>(
12227 char * <b>key</b>, <i></i>
12228 char * <b>value</b>, <i></i>
12229 char * <b>arg</b> <i></i>
12231 </pre>
12232 <dd> Frees the memory used to store the minterm counts
12233 recorded in the visited table. Returns ST_CONTINUE.
12236 <dd> <b>Side Effects</b> None
12239 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>
12241 <dt><pre>
12242 <A NAME="cuddBddAlignToZdd"></A>
12243 int <I></I>
12244 <B>cuddBddAlignToZdd</B>(
12245 DdManager * <b>table</b> <i>DD manager</i>
12247 </pre>
12248 <dd> Reorders BDD variables according to the order of the
12249 ZDD variables. This function can be called at the end of ZDD
12250 reordering to insure that the order of the BDD variables is
12251 consistent with the order of the ZDD variables. The number of ZDD
12252 variables must be a multiple of the number of BDD variables. Let
12253 <code>M</code> be the ratio of the two numbers. cuddBddAlignToZdd
12254 then considers the ZDD variables from <code>M*i</code> to
12255 <code>(M+1)*i-1</code> as corresponding to BDD variable
12256 <code>i</code>. This function should be normally called from
12257 Cudd_zddReduceHeap, which clears the cache. Returns 1 in case of
12258 success; 0 otherwise.
12261 <dd> <b>Side Effects</b> Changes the BDD variable order for all diagrams and performs
12262 garbage collection of the BDD unique table.
12265 <dd> <b>See Also</b> <code><a href="#Cudd_ShuffleHeap">Cudd_ShuffleHeap</a>
12266 <a href="#Cudd_zddReduceHeap">Cudd_zddReduceHeap</a>
12267 </code>
12269 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
12271 <dt><pre>
12272 <A NAME="cuddBddAndAbstractRecur"></A>
12273 DdNode * <I></I>
12274 <B>cuddBddAndAbstractRecur</B>(
12275 DdManager * <b>manager</b>, <i></i>
12276 DdNode * <b>f</b>, <i></i>
12277 DdNode * <b>g</b>, <i></i>
12278 DdNode * <b>cube</b> <i></i>
12280 </pre>
12281 <dd> Takes the AND of two BDDs and simultaneously abstracts
12282 the variables in cube. The variables are existentially abstracted.
12283 Returns a pointer to the result is successful; NULL otherwise.
12286 <dd> <b>Side Effects</b> None
12289 <dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
12290 </code>
12292 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAndAbs.c"TARGET="ABSTRACT"><CODE>cuddAndAbs.c</CODE></A>
12294 <dt><pre>
12295 <A NAME="cuddBddAndRecur"></A>
12296 DdNode * <I></I>
12297 <B>cuddBddAndRecur</B>(
12298 DdManager * <b>manager</b>, <i></i>
12299 DdNode * <b>f</b>, <i></i>
12300 DdNode * <b>g</b> <i></i>
12302 </pre>
12303 <dd> Implements the recursive step of Cudd_bddAnd by taking
12304 the conjunction of two BDDs. Returns a pointer to the result is
12305 successful; NULL otherwise.
12308 <dd> <b>Side Effects</b> None
12311 <dd> <b>See Also</b> <code><a href="#Cudd_bddAnd">Cudd_bddAnd</a>
12312 </code>
12314 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
12316 <dt><pre>
12317 <A NAME="cuddBddBooleanDiffRecur"></A>
12318 DdNode * <I></I>
12319 <B>cuddBddBooleanDiffRecur</B>(
12320 DdManager * <b>manager</b>, <i></i>
12321 DdNode * <b>f</b>, <i></i>
12322 DdNode * <b>var</b> <i></i>
12324 </pre>
12325 <dd> Performs the recursive steps of Cudd_bddBoleanDiff.
12326 Returns the BDD obtained by XORing the cofactors of f with respect to
12327 var if successful; NULL otherwise. Exploits the fact that dF/dx =
12328 dF'/dx.
12331 <dd> <b>Side Effects</b> None
12334 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
12336 <dt><pre>
12337 <A NAME="cuddBddCharToVect"></A>
12338 static DdNode * <I></I>
12339 <B>cuddBddCharToVect</B>(
12340 DdManager * <b>dd</b>, <i></i>
12341 DdNode * <b>f</b>, <i></i>
12342 DdNode * <b>x</b> <i></i>
12344 </pre>
12345 <dd> Performs the recursive step of Cudd_bddCharToVect.
12346 This function maintains the invariant that f is non-zero.
12347 Returns the i-th component of the vector if successful; otherwise NULL.
12350 <dd> <b>Side Effects</b> None
12353 <dd> <b>See Also</b> <code><a href="#Cudd_bddCharToVect">Cudd_bddCharToVect</a>
12354 </code>
12356 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12358 <dt><pre>
12359 <A NAME="cuddBddClipAndAbsRecur"></A>
12360 static DdNode * <I></I>
12361 <B>cuddBddClipAndAbsRecur</B>(
12362 DdManager * <b>manager</b>, <i></i>
12363 DdNode * <b>f</b>, <i></i>
12364 DdNode * <b>g</b>, <i></i>
12365 DdNode * <b>cube</b>, <i></i>
12366 int <b>distance</b>, <i></i>
12367 int <b>direction</b> <i></i>
12369 </pre>
12370 <dd> Approximates the AND of two BDDs and simultaneously
12371 abstracts the variables in cube. The variables are existentially
12372 abstracted. Returns a pointer to the result is successful; NULL
12373 otherwise.
12376 <dd> <b>Side Effects</b> None
12379 <dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAndAbstract">Cudd_bddClippingAndAbstract</a>
12380 </code>
12382 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
12384 <dt><pre>
12385 <A NAME="cuddBddClippingAndAbstract"></A>
12386 DdNode * <I></I>
12387 <B>cuddBddClippingAndAbstract</B>(
12388 DdManager * <b>dd</b>, <i>manager</i>
12389 DdNode * <b>f</b>, <i>first conjunct</i>
12390 DdNode * <b>g</b>, <i>second conjunct</i>
12391 DdNode * <b>cube</b>, <i>cube of variables to be abstracted</i>
12392 int <b>maxDepth</b>, <i>maximum recursion depth</i>
12393 int <b>direction</b> <i>under (0) or over (1) approximation</i>
12395 </pre>
12396 <dd> Approximates the conjunction of two BDDs f and g and
12397 simultaneously abstracts the variables in cube. Returns a
12398 pointer to the resulting BDD if successful; NULL if the intermediate
12399 result blows up.
12402 <dd> <b>Side Effects</b> None
12405 <dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAndAbstract">Cudd_bddClippingAndAbstract</a>
12406 </code>
12408 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
12410 <dt><pre>
12411 <A NAME="cuddBddClippingAndRecur"></A>
12412 static DdNode * <I></I>
12413 <B>cuddBddClippingAndRecur</B>(
12414 DdManager * <b>manager</b>, <i></i>
12415 DdNode * <b>f</b>, <i></i>
12416 DdNode * <b>g</b>, <i></i>
12417 int <b>distance</b>, <i></i>
12418 int <b>direction</b> <i></i>
12420 </pre>
12421 <dd> Implements the recursive step of Cudd_bddClippingAnd by taking
12422 the conjunction of two BDDs. Returns a pointer to the result is
12423 successful; NULL otherwise.
12426 <dd> <b>Side Effects</b> None
12429 <dd> <b>See Also</b> <code><a href="#cuddBddClippingAnd">cuddBddClippingAnd</a>
12430 </code>
12432 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
12434 <dt><pre>
12435 <A NAME="cuddBddClippingAnd"></A>
12436 DdNode * <I></I>
12437 <B>cuddBddClippingAnd</B>(
12438 DdManager * <b>dd</b>, <i>manager</i>
12439 DdNode * <b>f</b>, <i>first conjunct</i>
12440 DdNode * <b>g</b>, <i>second conjunct</i>
12441 int <b>maxDepth</b>, <i>maximum recursion depth</i>
12442 int <b>direction</b> <i>under (0) or over (1) approximation</i>
12444 </pre>
12445 <dd> Approximates the conjunction of two BDDs f and g. Returns a
12446 pointer to the resulting BDD if successful; NULL if the intermediate
12447 result blows up.
12450 <dd> <b>Side Effects</b> None
12453 <dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAnd">Cudd_bddClippingAnd</a>
12454 </code>
12456 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>
12458 <dt><pre>
12459 <A NAME="cuddBddClosestCube"></A>
12460 DdNode * <I></I>
12461 <B>cuddBddClosestCube</B>(
12462 DdManager * <b>dd</b>, <i></i>
12463 DdNode * <b>f</b>, <i></i>
12464 DdNode * <b>g</b>, <i></i>
12465 CUDD_VALUE_TYPE <b>bound</b> <i></i>
12467 </pre>
12468 <dd> Performs the recursive step of Cudd_bddClosestCube.
12469 Returns the cube if succesful; NULL otherwise. The procedure uses a
12470 four-way recursion to examine all four combinations of cofactors of
12471 <code>f</code> and <code>g</code> according to the following formula.
12472 <pre>
12473 H(f,g) = min(H(ft,gt), H(fe,ge), H(ft,ge)+1, H(fe,gt)+1)
12474 </pre>
12475 Bounding is based on the following observations.
12476 <ul>
12477 <li> If we already found two points at distance 0, there is no point in
12478 continuing. Furthermore,
12479 <li> If F == not(G) then the best we can hope for is a minimum distance
12480 of 1. If we have already found two points at distance 1, there is
12481 no point in continuing. (Indeed, H(F,G) == 1 in this case. We
12482 have to continue, though, to find the cube.)
12483 </ul>
12484 The variable <code>bound</code> is set at the largest value of the distance
12485 that we are still interested in. Therefore, we desist when
12486 <pre>
12487 (bound == -1) and (F != not(G)) or (bound == 0) and (F == not(G)).
12488 </pre>
12489 If we were maximally aggressive in using the bound, we would always
12490 set the bound to the minimum distance seen thus far minus one. That
12491 is, we would maintain the invariant
12492 <pre>
12493 bound < minD,
12494 </pre>
12495 except at the very beginning, when we have no value for
12496 <code>minD</code>.<p>
12498 However, we do not use <code>bound < minD</code> when examining the
12499 two negative cofactors, because we try to find a large cube at
12500 minimum distance. To do so, we try to find a cube in the negative
12501 cofactors at the same or smaller distance from the cube found in the
12502 positive cofactors.<p>
12504 When we compute <code>H(ft,ge)</code> and <code>H(fe,gt)</code> we
12505 know that we are going to add 1 to the result of the recursive call
12506 to account for the difference in the splitting variable. Therefore,
12507 we decrease the bound correspondingly.<p>
12509 Another important observation concerns the need of examining all
12510 four pairs of cofators only when both <code>f</code> and
12511 <code>g</code> depend on the top variable.<p>
12513 Suppose <code>gt == ge == g</code>. (That is, <code>g</code> does
12514 not depend on the top variable.) Then
12515 <pre>
12516 H(f,g) = min(H(ft,g), H(fe,g), H(ft,g)+1, H(fe,g)+1)
12517 = min(H(ft,g), H(fe,g)) .
12518 </pre>
12519 Therefore, under these circumstances, we skip the two "cross" cases.<p>
12521 An interesting feature of this function is the scheme used for
12522 caching the results in the global computed table. Since we have a
12523 cube and a distance, we combine them to form an ADD. The
12524 combination replaces the zero child of the top node of the cube with
12525 the negative of the distance. (The use of the negative is to avoid
12526 ambiguity with 1.) The degenerate cases (zero and one) are treated
12527 specially because the distance is known (0 for one, and infinity for
12528 zero).
12531 <dd> <b>Side Effects</b> None
12534 <dd> <b>See Also</b> <code><a href="#Cudd_bddClosestCube">Cudd_bddClosestCube</a>
12535 </code>
12537 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
12539 <dt><pre>
12540 <A NAME="cuddBddComposeRecur"></A>
12541 DdNode * <I></I>
12542 <B>cuddBddComposeRecur</B>(
12543 DdManager * <b>dd</b>, <i></i>
12544 DdNode * <b>f</b>, <i></i>
12545 DdNode * <b>g</b>, <i></i>
12546 DdNode * <b>proj</b> <i></i>
12548 </pre>
12549 <dd> Performs the recursive step of Cudd_bddCompose.
12550 Exploits the fact that the composition of f' with g
12551 produces the complement of the composition of f with g to better
12552 utilize the cache. Returns the composed BDD if successful; NULL
12553 otherwise.
12556 <dd> <b>Side Effects</b> None
12559 <dd> <b>See Also</b> <code><a href="#Cudd_bddCompose">Cudd_bddCompose</a>
12560 </code>
12562 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12564 <dt><pre>
12565 <A NAME="cuddBddConstrainDecomp"></A>
12566 static int <I></I>
12567 <B>cuddBddConstrainDecomp</B>(
12568 DdManager * <b>dd</b>, <i></i>
12569 DdNode * <b>f</b>, <i></i>
12570 DdNode ** <b>decomp</b> <i></i>
12572 </pre>
12573 <dd> Performs the recursive step of Cudd_bddConstrainDecomp.
12574 Returns f super (i) if successful; otherwise NULL.
12577 <dd> <b>Side Effects</b> None
12580 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrainDecomp">Cudd_bddConstrainDecomp</a>
12581 </code>
12583 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12585 <dt><pre>
12586 <A NAME="cuddBddConstrainRecur"></A>
12587 DdNode * <I></I>
12588 <B>cuddBddConstrainRecur</B>(
12589 DdManager * <b>dd</b>, <i></i>
12590 DdNode * <b>f</b>, <i></i>
12591 DdNode * <b>c</b> <i></i>
12593 </pre>
12594 <dd> Performs the recursive step of Cudd_bddConstrain.
12595 Returns a pointer to the result if successful; NULL otherwise.
12598 <dd> <b>Side Effects</b> None
12601 <dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
12602 </code>
12604 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12606 <dt><pre>
12607 <A NAME="cuddBddExistAbstractRecur"></A>
12608 DdNode * <I></I>
12609 <B>cuddBddExistAbstractRecur</B>(
12610 DdManager * <b>manager</b>, <i></i>
12611 DdNode * <b>f</b>, <i></i>
12612 DdNode * <b>cube</b> <i></i>
12614 </pre>
12615 <dd> Performs the recursive steps of Cudd_bddExistAbstract.
12616 Returns the BDD obtained by abstracting the variables
12617 of cube from f if successful; NULL otherwise. It is also used by
12618 Cudd_bddUnivAbstract.
12621 <dd> <b>Side Effects</b> None
12624 <dd> <b>See Also</b> <code><a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
12625 <a href="#Cudd_bddUnivAbstract">Cudd_bddUnivAbstract</a>
12626 </code>
12628 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
12630 <dt><pre>
12631 <A NAME="cuddBddIntersectRecur"></A>
12632 DdNode * <I></I>
12633 <B>cuddBddIntersectRecur</B>(
12634 DdManager * <b>dd</b>, <i></i>
12635 DdNode * <b>f</b>, <i></i>
12636 DdNode * <b>g</b> <i></i>
12638 </pre>
12639 <dd> Implements the recursive step of Cudd_bddIntersect.
12642 <dd> <b>Side Effects</b> None
12645 <dd> <b>See Also</b> <code><a href="#Cudd_bddIntersect">Cudd_bddIntersect</a>
12646 </code>
12648 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
12650 <dt><pre>
12651 <A NAME="cuddBddIsop"></A>
12652 DdNode * <I></I>
12653 <B>cuddBddIsop</B>(
12654 DdManager * <b>dd</b>, <i></i>
12655 DdNode * <b>L</b>, <i></i>
12656 DdNode * <b>U</b> <i></i>
12658 </pre>
12659 <dd> Performs the recursive step of Cudd_bddIsop.
12662 <dd> <b>Side Effects</b> None
12665 <dd> <b>See Also</b> <code><a href="#Cudd_bddIsop">Cudd_bddIsop</a>
12666 </code>
12668 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
12670 <dt><pre>
12671 <A NAME="cuddBddIteRecur"></A>
12672 DdNode * <I></I>
12673 <B>cuddBddIteRecur</B>(
12674 DdManager * <b>dd</b>, <i></i>
12675 DdNode * <b>f</b>, <i></i>
12676 DdNode * <b>g</b>, <i></i>
12677 DdNode * <b>h</b> <i></i>
12679 </pre>
12680 <dd> Implements the recursive step of Cudd_bddIte. Returns a
12681 pointer to the resulting BDD. NULL if the intermediate result blows
12682 up or if reordering occurs.
12685 <dd> <b>Side Effects</b> None
12688 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
12690 <dt><pre>
12691 <A NAME="cuddBddLICBuildResult"></A>
12692 static DdNode * <I></I>
12693 <B>cuddBddLICBuildResult</B>(
12694 DdManager * <b>dd</b>, <i></i>
12695 DdNode * <b>f</b>, <i></i>
12696 st_table * <b>cache</b>, <i></i>
12697 st_table * <b>table</b> <i></i>
12699 </pre>
12700 <dd> Builds the results of Cudd_bddLICompaction.
12701 Returns a pointer to the minimized BDD if successful; otherwise NULL.
12704 <dd> <b>Side Effects</b> None
12707 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
12708 <a href="#cuddBddLICMarkEdges">cuddBddLICMarkEdges</a>
12709 </code>
12711 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12713 <dt><pre>
12714 <A NAME="cuddBddLICMarkEdges"></A>
12715 static int <I></I>
12716 <B>cuddBddLICMarkEdges</B>(
12717 DdManager * <b>dd</b>, <i></i>
12718 DdNode * <b>f</b>, <i></i>
12719 DdNode * <b>c</b>, <i></i>
12720 st_table * <b>table</b>, <i></i>
12721 st_table * <b>cache</b> <i></i>
12723 </pre>
12724 <dd> Performs the edge marking step of Cudd_bddLICompaction.
12725 Returns the LUB of the markings of the two outgoing edges of <code>f</code>
12726 if successful; otherwise CUDD_OUT_OF_MEM.
12729 <dd> <b>Side Effects</b> None
12732 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
12733 <a href="#cuddBddLICBuildResult">cuddBddLICBuildResult</a>
12734 </code>
12736 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12738 <dt><pre>
12739 <A NAME="cuddBddLICompaction"></A>
12740 DdNode * <I></I>
12741 <B>cuddBddLICompaction</B>(
12742 DdManager * <b>dd</b>, <i>manager</i>
12743 DdNode * <b>f</b>, <i>function to be minimized</i>
12744 DdNode * <b>c</b> <i>constraint (care set)</i>
12746 </pre>
12747 <dd> Performs safe minimization of a BDD. Given the BDD
12748 <code>f</code> of a function to be minimized and a BDD
12749 <code>c</code> representing the care set, Cudd_bddLICompaction
12750 produces the BDD of a function that agrees with <code>f</code>
12751 wherever <code>c</code> is 1. Safe minimization means that the size
12752 of the result is guaranteed not to exceed the size of
12753 <code>f</code>. This function is based on the DAC97 paper by Hong et
12754 al.. Returns a pointer to the result if successful; NULL
12755 otherwise.
12758 <dd> <b>Side Effects</b> None
12761 <dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
12762 </code>
12764 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12766 <dt><pre>
12767 <A NAME="cuddBddLiteralSetIntersectionRecur"></A>
12768 DdNode * <I></I>
12769 <B>cuddBddLiteralSetIntersectionRecur</B>(
12770 DdManager * <b>dd</b>, <i></i>
12771 DdNode * <b>f</b>, <i></i>
12772 DdNode * <b>g</b> <i></i>
12774 </pre>
12775 <dd> Performs the recursive step of
12776 Cudd_bddLiteralSetIntersection. Scans the cubes for common variables,
12777 and checks whether they agree in phase. Returns a pointer to the
12778 resulting cube if successful; NULL otherwise.
12781 <dd> <b>Side Effects</b> None
12784 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLiteral.c"TARGET="ABSTRACT"><CODE>cuddLiteral.c</CODE></A>
12786 <dt><pre>
12787 <A NAME="cuddBddMakePrime"></A>
12788 DdNode * <I></I>
12789 <B>cuddBddMakePrime</B>(
12790 DdManager * <b>dd</b>, <i>manager</i>
12791 DdNode * <b>cube</b>, <i>cube to be expanded</i>
12792 DdNode * <b>f</b> <i>function of which the cube is to be made a prime</i>
12794 </pre>
12795 <dd> Performs the recursive step of Cudd_bddMakePrime.
12796 Returns the prime if successful; NULL otherwise.
12799 <dd> <b>Side Effects</b> None
12802 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
12804 <dt><pre>
12805 <A NAME="cuddBddNPAndRecur"></A>
12806 DdNode * <I></I>
12807 <B>cuddBddNPAndRecur</B>(
12808 DdManager * <b>manager</b>, <i></i>
12809 DdNode * <b>f</b>, <i></i>
12810 DdNode * <b>g</b> <i></i>
12812 </pre>
12813 <dd> Implements the recursive step of Cudd_bddNPAnd.
12814 Returns a pointer to the result is successful; NULL otherwise.
12817 <dd> <b>Side Effects</b> None
12820 <dd> <b>See Also</b> <code><a href="#Cudd_bddNPAnd">Cudd_bddNPAnd</a>
12821 </code>
12823 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12825 <dt><pre>
12826 <A NAME="cuddBddPermuteRecur"></A>
12827 static DdNode * <I></I>
12828 <B>cuddBddPermuteRecur</B>(
12829 DdManager * <b>manager</b>, <i>DD manager</i>
12830 DdHashTable * <b>table</b>, <i>computed table</i>
12831 DdNode * <b>node</b>, <i>BDD to be reordered</i>
12832 int * <b>permut</b> <i>permutation array</i>
12834 </pre>
12835 <dd> Recursively puts the BDD in the order given in the array permut.
12836 Checks for trivial cases to terminate recursion, then splits on the
12837 children of this node. Once the solutions for the children are
12838 obtained, it puts into the current position the node from the rest of
12839 the BDD that should be here. Then returns this BDD.
12840 The key here is that the node being visited is NOT put in its proper
12841 place by this instance, but rather is switched when its proper position
12842 is reached in the recursion tree.<p>
12843 The DdNode * that is returned is the same BDD as passed in as node,
12844 but in the new order.
12847 <dd> <b>Side Effects</b> None
12850 <dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
12851 <a href="#cuddAddPermuteRecur">cuddAddPermuteRecur</a>
12852 </code>
12854 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12856 <dt><pre>
12857 <A NAME="cuddBddRestrictRecur"></A>
12858 DdNode * <I></I>
12859 <B>cuddBddRestrictRecur</B>(
12860 DdManager * <b>dd</b>, <i></i>
12861 DdNode * <b>f</b>, <i></i>
12862 DdNode * <b>c</b> <i></i>
12864 </pre>
12865 <dd> Performs the recursive step of Cudd_bddRestrict.
12866 Returns the restricted BDD if successful; otherwise NULL.
12869 <dd> <b>Side Effects</b> None
12872 <dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
12873 </code>
12875 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12877 <dt><pre>
12878 <A NAME="cuddBddSqueeze"></A>
12879 static DdNode * <I></I>
12880 <B>cuddBddSqueeze</B>(
12881 DdManager * <b>dd</b>, <i></i>
12882 DdNode * <b>l</b>, <i></i>
12883 DdNode * <b>u</b> <i></i>
12885 </pre>
12886 <dd> Performs the recursive step of Cudd_bddSqueeze. This
12887 procedure exploits the fact that if we complement and swap the
12888 bounds of the interval we obtain a valid solution by taking the
12889 complement of the solution to the original problem. Therefore, we
12890 can enforce the condition that the upper bound is always regular.
12891 Returns a pointer to the result if successful; NULL otherwise.
12894 <dd> <b>Side Effects</b> None
12897 <dd> <b>See Also</b> <code><a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
12898 </code>
12900 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>
12902 <dt><pre>
12903 <A NAME="cuddBddTransferRecur"></A>
12904 static DdNode * <I></I>
12905 <B>cuddBddTransferRecur</B>(
12906 DdManager * <b>ddS</b>, <i></i>
12907 DdManager * <b>ddD</b>, <i></i>
12908 DdNode * <b>f</b>, <i></i>
12909 st_table * <b>table</b> <i></i>
12911 </pre>
12912 <dd> Performs the recursive step of Cudd_bddTransfer.
12913 Returns a pointer to the result if successful; NULL otherwise.
12916 <dd> <b>Side Effects</b> None
12919 <dd> <b>See Also</b> <code><a href="#cuddBddTransfer">cuddBddTransfer</a>
12920 </code>
12922 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
12924 <dt><pre>
12925 <A NAME="cuddBddTransfer"></A>
12926 DdNode * <I></I>
12927 <B>cuddBddTransfer</B>(
12928 DdManager * <b>ddS</b>, <i></i>
12929 DdManager * <b>ddD</b>, <i></i>
12930 DdNode * <b>f</b> <i></i>
12932 </pre>
12933 <dd> Convert a BDD from a manager to another one. Returns a
12934 pointer to the BDD in the destination manager if successful; NULL
12935 otherwise.
12938 <dd> <b>Side Effects</b> None
12941 <dd> <b>See Also</b> <code><a href="#Cudd_bddTransfer">Cudd_bddTransfer</a>
12942 </code>
12944 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
12946 <dt><pre>
12947 <A NAME="cuddBddVarMapRecur"></A>
12948 static DdNode * <I></I>
12949 <B>cuddBddVarMapRecur</B>(
12950 DdManager * <b>manager</b>, <i>DD manager</i>
12951 DdNode * <b>f</b> <i>BDD to be remapped</i>
12953 </pre>
12954 <dd> Implements the recursive step of Cudd_bddVarMap.
12955 Returns a pointer to the result if successful; NULL otherwise.
12958 <dd> <b>Side Effects</b> None
12961 <dd> <b>See Also</b> <code><a href="#Cudd_bddVarMap">Cudd_bddVarMap</a>
12962 </code>
12964 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12966 <dt><pre>
12967 <A NAME="cuddBddVectorComposeRecur"></A>
12968 static DdNode * <I></I>
12969 <B>cuddBddVectorComposeRecur</B>(
12970 DdManager * <b>dd</b>, <i>DD manager</i>
12971 DdHashTable * <b>table</b>, <i>computed table</i>
12972 DdNode * <b>f</b>, <i>BDD in which to compose</i>
12973 DdNode ** <b>vector</b>, <i>functions to be composed</i>
12974 int <b>deepest</b> <i>depth of the deepest substitution</i>
12976 </pre>
12977 <dd> Performs the recursive step of Cudd_bddVectorCompose.
12980 <dd> <b>Side Effects</b> None
12983 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
12985 <dt><pre>
12986 <A NAME="cuddBddXorExistAbstractRecur"></A>
12987 DdNode * <I></I>
12988 <B>cuddBddXorExistAbstractRecur</B>(
12989 DdManager * <b>manager</b>, <i></i>
12990 DdNode * <b>f</b>, <i></i>
12991 DdNode * <b>g</b>, <i></i>
12992 DdNode * <b>cube</b> <i></i>
12994 </pre>
12995 <dd> Takes the exclusive OR of two BDDs and simultaneously abstracts
12996 the variables in cube. The variables are existentially abstracted. Returns a
12997 pointer to the result is successful; NULL otherwise.
13000 <dd> <b>Side Effects</b> None
13003 <dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
13004 </code>
13006 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>
13008 <dt><pre>
13009 <A NAME="cuddBddXorRecur"></A>
13010 DdNode * <I></I>
13011 <B>cuddBddXorRecur</B>(
13012 DdManager * <b>manager</b>, <i></i>
13013 DdNode * <b>f</b>, <i></i>
13014 DdNode * <b>g</b> <i></i>
13016 </pre>
13017 <dd> Implements the recursive step of Cudd_bddXor by taking
13018 the exclusive OR of two BDDs. Returns a pointer to the result is
13019 successful; NULL otherwise.
13022 <dd> <b>Side Effects</b> None
13025 <dd> <b>See Also</b> <code><a href="#Cudd_bddXor">Cudd_bddXor</a>
13026 </code>
13028 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>
13030 <dt><pre>
13031 <A NAME="cuddBiasedUnderApprox"></A>
13032 DdNode * <I></I>
13033 <B>cuddBiasedUnderApprox</B>(
13034 DdManager * <b>dd</b>, <i>DD manager</i>
13035 DdNode * <b>f</b>, <i>current DD</i>
13036 DdNode * <b>b</b>, <i>bias function</i>
13037 int <b>numVars</b>, <i>maximum number of variables</i>
13038 int <b>threshold</b>, <i>threshold under which approximation stops</i>
13039 double <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
13040 double <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
13042 </pre>
13043 <dd> Applies the biased remapping underappoximation algorithm.
13044 Proceeds in three phases:
13045 <ul>
13046 <li> collect information on each node in the BDD; this is done via DFS.
13047 <li> traverse the BDD in top-down fashion and compute for each node
13048 whether remapping increases density.
13049 <li> traverse the BDD via DFS and actually perform the elimination.
13050 </ul>
13051 Returns the approximated BDD if successful; NULL otherwise.
13054 <dd> <b>Side Effects</b> None
13057 <dd> <b>See Also</b> <code><a href="#Cudd_BiasedUnderApprox">Cudd_BiasedUnderApprox</a>
13058 </code>
13060 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
13062 <dt><pre>
13063 <A NAME="cuddCProjectionRecur"></A>
13064 DdNode * <I></I>
13065 <B>cuddCProjectionRecur</B>(
13066 DdManager * <b>dd</b>, <i></i>
13067 DdNode * <b>R</b>, <i></i>
13068 DdNode * <b>Y</b>, <i></i>
13069 DdNode * <b>Ysupp</b> <i></i>
13071 </pre>
13072 <dd> Performs the recursive step of Cudd_CProjection. Returns
13073 the projection if successful; NULL otherwise.
13076 <dd> <b>Side Effects</b> None
13079 <dd> <b>See Also</b> <code><a href="#Cudd_CProjection">Cudd_CProjection</a>
13080 </code>
13082 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
13084 <dt><pre>
13085 <A NAME="cuddCacheFlush"></A>
13086 void <I></I>
13087 <B>cuddCacheFlush</B>(
13088 DdManager * <b>table</b> <i></i>
13090 </pre>
13091 <dd> Flushes the cache.
13094 <dd> <b>Side Effects</b> None
13097 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13099 <dt><pre>
13100 <A NAME="cuddCacheInsert1"></A>
13101 void <I></I>
13102 <B>cuddCacheInsert1</B>(
13103 DdManager * <b>table</b>, <i></i>
13104 DD_CTFP1 <b>op</b>, <i></i>
13105 DdNode * <b>f</b>, <i></i>
13106 DdNode * <b>data</b> <i></i>
13108 </pre>
13109 <dd> Inserts a result in the cache for a function with two
13110 operands.
13113 <dd> <b>Side Effects</b> None
13116 <dd> <b>See Also</b> <code><a href="#cuddCacheInsert">cuddCacheInsert</a>
13117 <a href="#cuddCacheInsert2">cuddCacheInsert2</a>
13118 </code>
13120 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13122 <dt><pre>
13123 <A NAME="cuddCacheInsert2"></A>
13124 void <I></I>
13125 <B>cuddCacheInsert2</B>(
13126 DdManager * <b>table</b>, <i></i>
13127 DD_CTFP <b>op</b>, <i></i>
13128 DdNode * <b>f</b>, <i></i>
13129 DdNode * <b>g</b>, <i></i>
13130 DdNode * <b>data</b> <i></i>
13132 </pre>
13133 <dd> Inserts a result in the cache for a function with two
13134 operands.
13137 <dd> <b>Side Effects</b> None
13140 <dd> <b>See Also</b> <code><a href="#cuddCacheInsert">cuddCacheInsert</a>
13141 <a href="#cuddCacheInsert1">cuddCacheInsert1</a>
13142 </code>
13144 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13146 <dt><pre>
13147 <A NAME="cuddCacheInsert"></A>
13148 void <I></I>
13149 <B>cuddCacheInsert</B>(
13150 DdManager * <b>table</b>, <i></i>
13151 ptruint <b>op</b>, <i></i>
13152 DdNode * <b>f</b>, <i></i>
13153 DdNode * <b>g</b>, <i></i>
13154 DdNode * <b>h</b>, <i></i>
13155 DdNode * <b>data</b> <i></i>
13157 </pre>
13158 <dd> Inserts a result in the cache.
13161 <dd> <b>Side Effects</b> None
13164 <dd> <b>See Also</b> <code><a href="#cuddCacheInsert2">cuddCacheInsert2</a>
13165 <a href="#cuddCacheInsert1">cuddCacheInsert1</a>
13166 </code>
13168 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13170 <dt><pre>
13171 <A NAME="cuddCacheLookup1Zdd"></A>
13172 DdNode * <I></I>
13173 <B>cuddCacheLookup1Zdd</B>(
13174 DdManager * <b>table</b>, <i></i>
13175 DD_CTFP1 <b>op</b>, <i></i>
13176 DdNode * <b>f</b> <i></i>
13178 </pre>
13179 <dd> Returns the result if found; it returns NULL if no
13180 result is found.
13183 <dd> <b>Side Effects</b> None
13186 <dd> <b>See Also</b> <code><a href="#cuddCacheLookupZdd">cuddCacheLookupZdd</a>
13187 <a href="#cuddCacheLookup2Zdd">cuddCacheLookup2Zdd</a>
13188 </code>
13190 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13192 <dt><pre>
13193 <A NAME="cuddCacheLookup1"></A>
13194 DdNode * <I></I>
13195 <B>cuddCacheLookup1</B>(
13196 DdManager * <b>table</b>, <i></i>
13197 DD_CTFP1 <b>op</b>, <i></i>
13198 DdNode * <b>f</b> <i></i>
13200 </pre>
13201 <dd> Returns the result if found; it returns NULL if no
13202 result is found.
13205 <dd> <b>Side Effects</b> None
13208 <dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
13209 <a href="#cuddCacheLookup2">cuddCacheLookup2</a>
13210 </code>
13212 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13214 <dt><pre>
13215 <A NAME="cuddCacheLookup2Zdd"></A>
13216 DdNode * <I></I>
13217 <B>cuddCacheLookup2Zdd</B>(
13218 DdManager * <b>table</b>, <i></i>
13219 DD_CTFP <b>op</b>, <i></i>
13220 DdNode * <b>f</b>, <i></i>
13221 DdNode * <b>g</b> <i></i>
13223 </pre>
13224 <dd> Returns the result if found; it returns NULL if no
13225 result is found.
13228 <dd> <b>Side Effects</b> None
13231 <dd> <b>See Also</b> <code><a href="#cuddCacheLookupZdd">cuddCacheLookupZdd</a>
13232 <a href="#cuddCacheLookup1Zdd">cuddCacheLookup1Zdd</a>
13233 </code>
13235 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13237 <dt><pre>
13238 <A NAME="cuddCacheLookup2"></A>
13239 DdNode * <I></I>
13240 <B>cuddCacheLookup2</B>(
13241 DdManager * <b>table</b>, <i></i>
13242 DD_CTFP <b>op</b>, <i></i>
13243 DdNode * <b>f</b>, <i></i>
13244 DdNode * <b>g</b> <i></i>
13246 </pre>
13247 <dd> Returns the result if found; it returns NULL if no
13248 result is found.
13251 <dd> <b>Side Effects</b> None
13254 <dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
13255 <a href="#cuddCacheLookup1">cuddCacheLookup1</a>
13256 </code>
13258 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13260 <dt><pre>
13261 <A NAME="cuddCacheLookupZdd"></A>
13262 DdNode * <I></I>
13263 <B>cuddCacheLookupZdd</B>(
13264 DdManager * <b>table</b>, <i></i>
13265 ptruint <b>op</b>, <i></i>
13266 DdNode * <b>f</b>, <i></i>
13267 DdNode * <b>g</b>, <i></i>
13268 DdNode * <b>h</b> <i></i>
13270 </pre>
13271 <dd> Returns the result if found; it returns NULL if no
13272 result is found.
13275 <dd> <b>Side Effects</b> None
13278 <dd> <b>See Also</b> <code><a href="#cuddCacheLookup2Zdd">cuddCacheLookup2Zdd</a>
13279 <a href="#cuddCacheLookup1Zdd">cuddCacheLookup1Zdd</a>
13280 </code>
13282 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13284 <dt><pre>
13285 <A NAME="cuddCacheLookup"></A>
13286 DdNode * <I></I>
13287 <B>cuddCacheLookup</B>(
13288 DdManager * <b>table</b>, <i></i>
13289 ptruint <b>op</b>, <i></i>
13290 DdNode * <b>f</b>, <i></i>
13291 DdNode * <b>g</b>, <i></i>
13292 DdNode * <b>h</b> <i></i>
13294 </pre>
13295 <dd> Returns the result if found; it returns NULL if no
13296 result is found.
13299 <dd> <b>Side Effects</b> None
13302 <dd> <b>See Also</b> <code><a href="#cuddCacheLookup2">cuddCacheLookup2</a>
13303 <a href="#cuddCacheLookup1">cuddCacheLookup1</a>
13304 </code>
13306 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13308 <dt><pre>
13309 <A NAME="cuddCacheProfile"></A>
13310 int <I></I>
13311 <B>cuddCacheProfile</B>(
13312 DdManager * <b>table</b>, <i></i>
13313 FILE * <b>fp</b> <i></i>
13315 </pre>
13316 <dd> Computes and prints a profile of the cache usage.
13317 Returns 1 if successful; 0 otherwise.
13320 <dd> <b>Side Effects</b> None
13323 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13325 <dt><pre>
13326 <A NAME="cuddCacheResize"></A>
13327 void <I></I>
13328 <B>cuddCacheResize</B>(
13329 DdManager * <b>table</b> <i></i>
13331 </pre>
13332 <dd> Resizes the cache.
13335 <dd> <b>Side Effects</b> None
13338 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13340 <dt><pre>
13341 <A NAME="cuddCheckCollisionOrdering"></A>
13342 static int <I></I>
13343 <B>cuddCheckCollisionOrdering</B>(
13344 DdManager * <b>unique</b>, <i></i>
13345 int <b>i</b>, <i></i>
13346 int <b>j</b> <i></i>
13348 </pre>
13349 <dd> Checks whether a collision list is ordered.
13352 <dd> <b>Side Effects</b> None
13355 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13357 <dt><pre>
13358 <A NAME="cuddCheckCube"></A>
13359 int <I></I>
13360 <B>cuddCheckCube</B>(
13361 DdManager * <b>dd</b>, <i></i>
13362 DdNode * <b>g</b> <i></i>
13364 </pre>
13365 <dd> Checks whether g is the BDD of a cube. Returns 1 in case
13366 of success; 0 otherwise. The constant 1 is a valid cube, but all other
13367 constant functions cause cuddCheckCube to return 0.
13370 <dd> <b>Side Effects</b> None
13373 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>
13375 <dt><pre>
13376 <A NAME="cuddClearDeathRow"></A>
13377 void <I></I>
13378 <B>cuddClearDeathRow</B>(
13379 DdManager * <b>table</b> <i></i>
13381 </pre>
13382 <dd> Clears the death row.
13385 <dd> <b>Side Effects</b> None
13388 <dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
13389 <a href="#Cudd_IterDerefBdd">Cudd_IterDerefBdd</a>
13390 <a href="#Cudd_CheckZeroRef">Cudd_CheckZeroRef</a>
13391 <a href="#cuddGarbageCollect">cuddGarbageCollect</a>
13392 </code>
13394 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
13396 <dt><pre>
13397 <A NAME="cuddCofactorRecur"></A>
13398 DdNode * <I></I>
13399 <B>cuddCofactorRecur</B>(
13400 DdManager * <b>dd</b>, <i></i>
13401 DdNode * <b>f</b>, <i></i>
13402 DdNode * <b>g</b> <i></i>
13404 </pre>
13405 <dd> Performs the recursive step of Cudd_Cofactor. Returns a
13406 pointer to the cofactor if successful; NULL otherwise.
13409 <dd> <b>Side Effects</b> None
13412 <dd> <b>See Also</b> <code><a href="#Cudd_Cofactor">Cudd_Cofactor</a>
13413 </code>
13415 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>
13417 <dt><pre>
13418 <A NAME="cuddCollectNodes"></A>
13419 int <I></I>
13420 <B>cuddCollectNodes</B>(
13421 DdNode * <b>f</b>, <i></i>
13422 st_table * <b>visited</b> <i></i>
13424 </pre>
13425 <dd> Traverses the DD f and collects all its nodes in a
13426 symbol table. f is assumed to be a regular pointer and
13427 cuddCollectNodes guarantees this assumption in the recursive calls.
13428 Returns 1 in case of success; 0 otherwise.
13431 <dd> <b>Side Effects</b> None
13434 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
13436 <dt><pre>
13437 <A NAME="cuddComputeFloorLog2"></A>
13438 int <I></I>
13439 <B>cuddComputeFloorLog2</B>(
13440 unsigned int <b>value</b> <i></i>
13442 </pre>
13443 <dd> Returns the floor of the logarithm to the base 2.
13444 The input value is assumed to be greater than 0.
13447 <dd> <b>Side Effects</b> None
13450 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13452 <dt><pre>
13453 <A NAME="cuddConjunctsAux"></A>
13454 static int <I></I>
13455 <B>cuddConjunctsAux</B>(
13456 DdManager * <b>dd</b>, <i></i>
13457 DdNode * <b>f</b>, <i></i>
13458 DdNode ** <b>c1</b>, <i></i>
13459 DdNode ** <b>c2</b> <i></i>
13461 </pre>
13462 <dd> Procedure to compute two conjunctive factors of f and
13463 place in *c1 and *c2. Sets up the required data - table of distances
13464 from the constant and local reference count. Also minterm table.
13467 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>
13469 <dt><pre>
13470 <A NAME="cuddConstantLookup"></A>
13471 DdNode * <I></I>
13472 <B>cuddConstantLookup</B>(
13473 DdManager * <b>table</b>, <i></i>
13474 ptruint <b>op</b>, <i></i>
13475 DdNode * <b>f</b>, <i></i>
13476 DdNode * <b>g</b>, <i></i>
13477 DdNode * <b>h</b> <i></i>
13479 </pre>
13480 <dd> Looks up in the cache for the result of op applied to f,
13481 g, and h. Assumes that the calling procedure (e.g.,
13482 Cudd_bddIteConstant) is only interested in whether the result is
13483 constant or not. Returns the result if found (possibly
13484 DD_NON_CONSTANT); otherwise it returns NULL.
13487 <dd> <b>Side Effects</b> None
13490 <dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
13491 </code>
13493 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
13495 <dt><pre>
13496 <A NAME="cuddDestroySubtables"></A>
13497 int <I></I>
13498 <B>cuddDestroySubtables</B>(
13499 DdManager * <b>unique</b>, <i></i>
13500 int <b>n</b> <i></i>
13502 </pre>
13503 <dd> Destroys the n most recently created subtables in a unique
13504 table. n should be positive. The subtables should not contain any live
13505 nodes, except the (isolated) projection function. The projection
13506 functions are freed. Returns 1 if successful; 0 otherwise.
13509 <dd> <b>Side Effects</b> The variable map used for fast variable substitution is
13510 destroyed if it exists. In this case the cache is also cleared.
13513 <dd> <b>See Also</b> <code><a href="#cuddInsertSubtables">cuddInsertSubtables</a>
13514 <a href="#Cudd_SetVarMap">Cudd_SetVarMap</a>
13515 </code>
13517 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13519 <dt><pre>
13520 <A NAME="cuddDoRebalance"></A>
13521 static void <I></I>
13522 <B>cuddDoRebalance</B>(
13523 DdNodePtr ** <b>stack</b>, <i></i>
13524 int <b>stackN</b> <i></i>
13526 </pre>
13527 <dd> Rebalances a red/black tree.
13530 <dd> <b>Side Effects</b> None
13533 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13535 <dt><pre>
13536 <A NAME="cuddDynamicAllocNode"></A>
13537 DdNode * <I></I>
13538 <B>cuddDynamicAllocNode</B>(
13539 DdManager * <b>table</b> <i></i>
13541 </pre>
13542 <dd> Dynamically allocates a Node. This procedure is similar
13543 to cuddAllocNode in Cudd_Table.c, but it does not attempt garbage
13544 collection, because during reordering there are no dead nodes.
13545 Returns a pointer to a new node if successful; NULL is memory is
13546 full.
13549 <dd> <b>Side Effects</b> None
13552 <dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
13553 </code>
13555 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
13557 <dt><pre>
13558 <A NAME="cuddEstimateCofactorSimple"></A>
13559 static int <I></I>
13560 <B>cuddEstimateCofactorSimple</B>(
13561 DdNode * <b>node</b>, <i></i>
13562 int <b>i</b> <i></i>
13564 </pre>
13565 <dd> Performs the recursive step of Cudd_CofactorEstimateSimple.
13566 Returns an estimate of the number of nodes in the DD of the positive
13567 cofactor of node. Uses the least significant bit of the next field as
13568 visited flag. node is supposed to be regular; the invariant is maintained
13569 by this procedure.
13572 <dd> <b>Side Effects</b> None
13575 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
13577 <dt><pre>
13578 <A NAME="cuddEstimateCofactor"></A>
13579 static int <I></I>
13580 <B>cuddEstimateCofactor</B>(
13581 DdManager * <b>dd</b>, <i></i>
13582 st_table * <b>table</b>, <i></i>
13583 DdNode * <b>node</b>, <i></i>
13584 int <b>i</b>, <i></i>
13585 int <b>phase</b>, <i></i>
13586 DdNode ** <b>ptr</b> <i></i>
13588 </pre>
13589 <dd> Performs the recursive step of Cudd_CofactorEstimate.
13590 Returns an estimate of the number of nodes in the DD of a
13591 cofactor of node. Uses the least significant bit of the next field as
13592 visited flag. node is supposed to be regular; the invariant is maintained
13593 by this procedure.
13596 <dd> <b>Side Effects</b> None
13599 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
13601 <dt><pre>
13602 <A NAME="cuddExact"></A>
13603 int <I></I>
13604 <B>cuddExact</B>(
13605 DdManager * <b>table</b>, <i></i>
13606 int <b>lower</b>, <i></i>
13607 int <b>upper</b> <i></i>
13609 </pre>
13610 <dd> Exact variable ordering algorithm. Finds an optimum
13611 order for the variables between lower and upper. Returns 1 if
13612 successful; 0 otherwise.
13615 <dd> <b>Side Effects</b> None
13618 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
13620 <dt><pre>
13621 <A NAME="cuddFindParent"></A>
13622 static int <I></I>
13623 <B>cuddFindParent</B>(
13624 DdManager * <b>table</b>, <i></i>
13625 DdNode * <b>node</b> <i></i>
13627 </pre>
13628 <dd> Searches the subtables above node for a parent. Returns 1
13629 as soon as one parent is found. Returns 0 is the search is fruitless.
13632 <dd> <b>Side Effects</b> None
13635 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13637 <dt><pre>
13638 <A NAME="cuddFreeTable"></A>
13639 void <I></I>
13640 <B>cuddFreeTable</B>(
13641 DdManager * <b>unique</b> <i></i>
13643 </pre>
13644 <dd> Frees the resources associated to a unique table.
13647 <dd> <b>Side Effects</b> None
13650 <dd> <b>See Also</b> <code><a href="#cuddInitTable">cuddInitTable</a>
13651 </code>
13653 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13655 <dt><pre>
13656 <A NAME="cuddGarbageCollect"></A>
13657 int <I></I>
13658 <B>cuddGarbageCollect</B>(
13659 DdManager * <b>unique</b>, <i></i>
13660 int <b>clearCache</b> <i></i>
13662 </pre>
13663 <dd> Performs garbage collection on the BDD and ZDD unique tables.
13664 If clearCache is 0, the cache is not cleared. This should only be
13665 specified if the cache has been cleared right before calling
13666 cuddGarbageCollect. (As in the case of dynamic reordering.)
13667 Returns the total number of deleted nodes.
13670 <dd> <b>Side Effects</b> None
13673 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
13675 <dt><pre>
13676 <A NAME="cuddGa"></A>
13677 int <I></I>
13678 <B>cuddGa</B>(
13679 DdManager * <b>table</b>, <i>manager</i>
13680 int <b>lower</b>, <i>lowest level to be reordered</i>
13681 int <b>upper</b> <i>highest level to be reorderded</i>
13683 </pre>
13684 <dd> Genetic algorithm for DD reordering.
13685 The two children of a crossover will be stored in
13686 storedd[popsize
13689 <dd> <b>Side Effects</b> None
13692 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
13694 <dt><pre>
13695 <A NAME="cuddGetBranches"></A>
13696 void <I></I>
13697 <B>cuddGetBranches</B>(
13698 DdNode * <b>g</b>, <i></i>
13699 DdNode ** <b>g1</b>, <i></i>
13700 DdNode ** <b>g0</b> <i></i>
13702 </pre>
13703 <dd> Computes the children of g.
13706 <dd> <b>Side Effects</b> None
13709 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>
13711 <dt><pre>
13712 <A NAME="cuddHashTableAlloc"></A>
13713 static DdHashItem * <I></I>
13714 <B>cuddHashTableAlloc</B>(
13715 DdHashTable * <b>hash</b> <i></i>
13717 </pre>
13718 <dd> Fast storage allocation for items in a hash table. The
13719 first 4 bytes of a chunk contain a pointer to the next block; the
13720 rest contains DD_MEM_CHUNK spaces for hash items. Returns a pointer to
13721 a new item if successful; NULL is memory is full.
13724 <dd> <b>Side Effects</b> None
13727 <dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
13728 <a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
13729 </code>
13731 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13733 <dt><pre>
13734 <A NAME="cuddHashTableInit"></A>
13735 DdHashTable * <I></I>
13736 <B>cuddHashTableInit</B>(
13737 DdManager * <b>manager</b>, <i></i>
13738 unsigned int <b>keySize</b>, <i></i>
13739 unsigned int <b>initSize</b> <i></i>
13741 </pre>
13742 <dd> Initializes a hash table. Returns a pointer to the new
13743 table if successful; NULL otherwise.
13746 <dd> <b>Side Effects</b> None
13749 <dd> <b>See Also</b> <code><a href="#cuddHashTableQuit">cuddHashTableQuit</a>
13750 </code>
13752 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13754 <dt><pre>
13755 <A NAME="cuddHashTableInsert1"></A>
13756 int <I></I>
13757 <B>cuddHashTableInsert1</B>(
13758 DdHashTable * <b>hash</b>, <i></i>
13759 DdNode * <b>f</b>, <i></i>
13760 DdNode * <b>value</b>, <i></i>
13761 ptrint <b>count</b> <i></i>
13763 </pre>
13764 <dd> Inserts an item in a hash table when the key is one pointer.
13765 Returns 1 if successful; 0 otherwise.
13768 <dd> <b>Side Effects</b> None
13771 <dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
13772 <a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
13773 <a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
13774 <a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
13775 </code>
13777 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13779 <dt><pre>
13780 <A NAME="cuddHashTableInsert2"></A>
13781 int <I></I>
13782 <B>cuddHashTableInsert2</B>(
13783 DdHashTable * <b>hash</b>, <i></i>
13784 DdNode * <b>f</b>, <i></i>
13785 DdNode * <b>g</b>, <i></i>
13786 DdNode * <b>value</b>, <i></i>
13787 ptrint <b>count</b> <i></i>
13789 </pre>
13790 <dd> Inserts an item in a hash table when the key is
13791 composed of two pointers. Returns 1 if successful; 0 otherwise.
13794 <dd> <b>Side Effects</b> None
13797 <dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
13798 <a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
13799 <a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
13800 <a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
13801 </code>
13803 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13805 <dt><pre>
13806 <A NAME="cuddHashTableInsert3"></A>
13807 int <I></I>
13808 <B>cuddHashTableInsert3</B>(
13809 DdHashTable * <b>hash</b>, <i></i>
13810 DdNode * <b>f</b>, <i></i>
13811 DdNode * <b>g</b>, <i></i>
13812 DdNode * <b>h</b>, <i></i>
13813 DdNode * <b>value</b>, <i></i>
13814 ptrint <b>count</b> <i></i>
13816 </pre>
13817 <dd> Inserts an item in a hash table when the key is
13818 composed of three pointers. Returns 1 if successful; 0 otherwise.
13821 <dd> <b>Side Effects</b> None
13824 <dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
13825 <a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
13826 <a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
13827 <a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
13828 </code>
13830 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13832 <dt><pre>
13833 <A NAME="cuddHashTableInsert"></A>
13834 int <I></I>
13835 <B>cuddHashTableInsert</B>(
13836 DdHashTable * <b>hash</b>, <i></i>
13837 DdNodePtr * <b>key</b>, <i></i>
13838 DdNode * <b>value</b>, <i></i>
13839 ptrint <b>count</b> <i></i>
13841 </pre>
13842 <dd> Inserts an item in a hash table when the key has more than
13843 three pointers. Returns 1 if successful; 0 otherwise.
13846 <dd> <b>Side Effects</b> None
13849 <dd> <b>See Also</b> <code>[cuddHashTableInsert1
13850 <a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
13851 <a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
13852 <a href="#cuddHashTableLookup">cuddHashTableLookup</a>
13853 </code>
13855 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13857 <dt><pre>
13858 <A NAME="cuddHashTableLookup1"></A>
13859 DdNode * <I></I>
13860 <B>cuddHashTableLookup1</B>(
13861 DdHashTable * <b>hash</b>, <i></i>
13862 DdNode * <b>f</b> <i></i>
13864 </pre>
13865 <dd> Looks up a key consisting of one pointer in a hash table.
13866 Returns the value associated to the key if there is an entry for the given
13867 key in the table; NULL otherwise. If the entry is present, its reference
13868 counter is decremented if not saturated. If the counter reaches 0, the
13869 value of the entry is dereferenced, and the entry is returned to the free
13870 list.
13873 <dd> <b>Side Effects</b> None
13876 <dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
13877 <a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
13878 <a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
13879 <a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
13880 </code>
13882 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13884 <dt><pre>
13885 <A NAME="cuddHashTableLookup2"></A>
13886 DdNode * <I></I>
13887 <B>cuddHashTableLookup2</B>(
13888 DdHashTable * <b>hash</b>, <i></i>
13889 DdNode * <b>f</b>, <i></i>
13890 DdNode * <b>g</b> <i></i>
13892 </pre>
13893 <dd> Looks up a key consisting of two pointer in a hash table.
13894 Returns the value associated to the key if there is an entry for the given
13895 key in the table; NULL otherwise. If the entry is present, its reference
13896 counter is decremented if not saturated. If the counter reaches 0, the
13897 value of the entry is dereferenced, and the entry is returned to the free
13898 list.
13901 <dd> <b>Side Effects</b> None
13904 <dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
13905 <a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
13906 <a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
13907 <a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
13908 </code>
13910 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13912 <dt><pre>
13913 <A NAME="cuddHashTableLookup3"></A>
13914 DdNode * <I></I>
13915 <B>cuddHashTableLookup3</B>(
13916 DdHashTable * <b>hash</b>, <i></i>
13917 DdNode * <b>f</b>, <i></i>
13918 DdNode * <b>g</b>, <i></i>
13919 DdNode * <b>h</b> <i></i>
13921 </pre>
13922 <dd> Looks up a key consisting of three pointers in a hash table.
13923 Returns the value associated to the key if there is an entry for the given
13924 key in the table; NULL otherwise. If the entry is present, its reference
13925 counter is decremented if not saturated. If the counter reaches 0, the
13926 value of the entry is dereferenced, and the entry is returned to the free
13927 list.
13930 <dd> <b>Side Effects</b> None
13933 <dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
13934 <a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
13935 <a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
13936 <a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
13937 </code>
13939 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13941 <dt><pre>
13942 <A NAME="cuddHashTableLookup"></A>
13943 DdNode * <I></I>
13944 <B>cuddHashTableLookup</B>(
13945 DdHashTable * <b>hash</b>, <i></i>
13946 DdNodePtr * <b>key</b> <i></i>
13948 </pre>
13949 <dd> Looks up a key consisting of more than three pointers
13950 in a hash table. Returns the value associated to the key if there
13951 is an entry for the given key in the table; NULL otherwise. If the
13952 entry is present, its reference counter is decremented if not
13953 saturated. If the counter reaches 0, the value of the entry is
13954 dereferenced, and the entry is returned to the free list.
13957 <dd> <b>Side Effects</b> None
13960 <dd> <b>See Also</b> <code><a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
13961 <a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
13962 <a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
13963 <a href="#cuddHashTableInsert">cuddHashTableInsert</a>
13964 </code>
13966 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13968 <dt><pre>
13969 <A NAME="cuddHashTableQuit"></A>
13970 void <I></I>
13971 <B>cuddHashTableQuit</B>(
13972 DdHashTable * <b>hash</b> <i></i>
13974 </pre>
13975 <dd> Shuts down a hash table, dereferencing all the values.
13978 <dd> <b>Side Effects</b> None
13981 <dd> <b>See Also</b> <code><a href="#cuddHashTableInit">cuddHashTableInit</a>
13982 </code>
13984 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
13986 <dt><pre>
13987 <A NAME="cuddHashTableResize"></A>
13988 static int <I></I>
13989 <B>cuddHashTableResize</B>(
13990 DdHashTable * <b>hash</b> <i></i>
13992 </pre>
13993 <dd> Resizes a hash table. Returns 1 if successful; 0
13994 otherwise.
13997 <dd> <b>Side Effects</b> None
14000 <dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
14001 </code>
14003 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14005 <dt><pre>
14006 <A NAME="cuddHeapProfile"></A>
14007 int <I></I>
14008 <B>cuddHeapProfile</B>(
14009 DdManager * <b>dd</b> <i></i>
14011 </pre>
14012 <dd> Prints to the manager's stdout the number of live nodes for each
14013 level of the DD heap that contains at least one live node. It also
14014 prints a summary containing:
14015 <ul>
14016 <li> total number of tables;
14017 <li> number of tables with live nodes;
14018 <li> table with the largest number of live nodes;
14019 <li> number of nodes in that table.
14020 </ul>
14021 If more than one table contains the maximum number of live nodes,
14022 only the one of lowest index is reported. Returns 1 in case of success
14023 and 0 otherwise.
14026 <dd> <b>Side Effects</b> None
14029 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
14031 <dt><pre>
14032 <A NAME="cuddInitCache"></A>
14033 int <I></I>
14034 <B>cuddInitCache</B>(
14035 DdManager * <b>unique</b>, <i>unique table</i>
14036 unsigned int <b>cacheSize</b>, <i>initial size of the cache</i>
14037 unsigned int <b>maxCacheSize</b> <i>cache size beyond which no resizing occurs</i>
14039 </pre>
14040 <dd> Initializes the computed table. It is called by
14041 Cudd_Init. Returns 1 in case of success; 0 otherwise.
14044 <dd> <b>Side Effects</b> None
14047 <dd> <b>See Also</b> <code><a href="#Cudd_Init">Cudd_Init</a>
14048 </code>
14050 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>
14052 <dt><pre>
14053 <A NAME="cuddInitInteract"></A>
14054 int <I></I>
14055 <B>cuddInitInteract</B>(
14056 DdManager * <b>table</b> <i></i>
14058 </pre>
14059 <dd> Initializes the interaction matrix. The interaction
14060 matrix is implemented as a bit vector storing the upper triangle of
14061 the symmetric interaction matrix. The bit vector is kept in an array
14062 of long integers. The computation is based on a series of depth-first
14063 searches, one for each root of the DAG. Two flags are needed: The
14064 local visited flag uses the LSB of the then pointer. The global
14065 visited flag uses the LSB of the next pointer.
14066 Returns 1 if successful; 0 otherwise.
14069 <dd> <b>Side Effects</b> None
14072 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
14074 <dt><pre>
14075 <A NAME="cuddInitLinear"></A>
14076 int <I></I>
14077 <B>cuddInitLinear</B>(
14078 DdManager * <b>table</b> <i></i>
14080 </pre>
14081 <dd> Initializes the linear transform matrix. Returns 1 if
14082 successful; 0 otherwise.
14085 <dd> <b>Side Effects</b> none
14088 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
14090 <dt><pre>
14091 <A NAME="cuddInitTable"></A>
14092 DdManager * <I></I>
14093 <B>cuddInitTable</B>(
14094 unsigned int <b>numVars</b>, <i>Initial number of BDD variables (and subtables)</i>
14095 unsigned int <b>numVarsZ</b>, <i>Initial number of ZDD variables (and subtables)</i>
14096 unsigned int <b>numSlots</b>, <i>Initial size of the BDD subtables</i>
14097 unsigned int <b>looseUpTo</b> <i>Limit for fast table growth</i>
14099 </pre>
14100 <dd> Creates and initializes the unique table. Returns a pointer
14101 to the table if successful; NULL otherwise.
14104 <dd> <b>Side Effects</b> None
14107 <dd> <b>See Also</b> <code><a href="#Cudd_Init">Cudd_Init</a>
14108 <a href="#cuddFreeTable">cuddFreeTable</a>
14109 </code>
14111 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14113 <dt><pre>
14114 <A NAME="cuddInsertSubtables"></A>
14115 int <I></I>
14116 <B>cuddInsertSubtables</B>(
14117 DdManager * <b>unique</b>, <i></i>
14118 int <b>n</b>, <i></i>
14119 int <b>level</b> <i></i>
14121 </pre>
14122 <dd> Inserts n new subtables in a unique table at level.
14123 The number n should be positive, and level should be an existing level.
14124 Returns 1 if successful; 0 otherwise.
14127 <dd> <b>Side Effects</b> None
14130 <dd> <b>See Also</b> <code><a href="#cuddDestroySubtables">cuddDestroySubtables</a>
14131 </code>
14133 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14135 <dt><pre>
14136 <A NAME="cuddIsInDeathRow"></A>
14137 int <I></I>
14138 <B>cuddIsInDeathRow</B>(
14139 DdManager * <b>dd</b>, <i></i>
14140 DdNode * <b>f</b> <i></i>
14142 </pre>
14143 <dd> Checks whether a node is in the death row. Returns the
14144 position of the first occurrence if the node is present; -1
14145 otherwise.
14148 <dd> <b>Side Effects</b> None
14151 <dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
14152 <a href="#cuddClearDeathRow">cuddClearDeathRow</a>
14153 </code>
14155 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
14157 <dt><pre>
14158 <A NAME="cuddLevelQueueDequeue"></A>
14159 void <I></I>
14160 <B>cuddLevelQueueDequeue</B>(
14161 DdLevelQueue * <b>queue</b>, <i></i>
14162 int <b>level</b> <i></i>
14164 </pre>
14165 <dd> Remove an item from the front of a level queue.
14168 <dd> <b>Side Effects</b> None
14171 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
14172 </code>
14174 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
14176 <dt><pre>
14177 <A NAME="cuddLevelQueueEnqueue"></A>
14178 void * <I></I>
14179 <B>cuddLevelQueueEnqueue</B>(
14180 DdLevelQueue * <b>queue</b>, <i>level queue</i>
14181 void * <b>key</b>, <i>key to be enqueued</i>
14182 int <b>level</b> <i>level at which to insert</i>
14184 </pre>
14185 <dd> Inserts a new key in a level queue. A new entry is
14186 created in the queue only if the node is not already
14187 enqueued. Returns a pointer to the queue item if successful; NULL
14188 otherwise.
14191 <dd> <b>Side Effects</b> None
14194 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueInit">cuddLevelQueueInit</a>
14195 <a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
14196 </code>
14198 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
14200 <dt><pre>
14201 <A NAME="cuddLevelQueueInit"></A>
14202 DdLevelQueue * <I></I>
14203 <B>cuddLevelQueueInit</B>(
14204 int <b>levels</b>, <i>number of levels</i>
14205 int <b>itemSize</b>, <i>size of the item</i>
14206 int <b>numBuckets</b> <i>initial number of hash buckets</i>
14208 </pre>
14209 <dd> Initializes a level queue. A level queue is a queue
14210 where inserts are based on the levels of the nodes. Within each
14211 level the policy is FIFO. Level queues are useful in traversing a
14212 BDD top-down. Queue items are kept in a free list when dequeued for
14213 efficiency. Returns a pointer to the new queue if successful; NULL
14214 otherwise.
14217 <dd> <b>Side Effects</b> None
14220 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueQuit">cuddLevelQueueQuit</a>
14221 <a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
14222 <a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
14223 </code>
14225 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
14227 <dt><pre>
14228 <A NAME="cuddLevelQueueQuit"></A>
14229 void <I></I>
14230 <B>cuddLevelQueueQuit</B>(
14231 DdLevelQueue * <b>queue</b> <i></i>
14233 </pre>
14234 <dd> Shuts down a level queue and releases all the
14235 associated memory.
14238 <dd> <b>Side Effects</b> None
14241 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueInit">cuddLevelQueueInit</a>
14242 </code>
14244 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
14246 <dt><pre>
14247 <A NAME="cuddLinearAndSifting"></A>
14248 int <I></I>
14249 <B>cuddLinearAndSifting</B>(
14250 DdManager * <b>table</b>, <i></i>
14251 int <b>lower</b>, <i></i>
14252 int <b>upper</b> <i></i>
14254 </pre>
14255 <dd> BDD reduction based on combination of sifting and linear
14256 transformations. Assumes that no dead nodes are present.
14257 <ol>
14258 <li> Order all the variables according to the number of entries
14259 in each unique table.
14260 <li> Sift the variable up and down, remembering each time the
14261 total size of the DD heap. At each position, linear transformation
14262 of the two adjacent variables is tried and is accepted if it reduces
14263 the size of the DD.
14264 <li> Select the best permutation.
14265 <li> Repeat 3 and 4 for all variables.
14266 </ol>
14267 Returns 1 if successful; 0 otherwise.
14270 <dd> <b>Side Effects</b> None
14273 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
14275 <dt><pre>
14276 <A NAME="cuddLinearInPlace"></A>
14277 int <I></I>
14278 <B>cuddLinearInPlace</B>(
14279 DdManager * <b>table</b>, <i></i>
14280 int <b>x</b>, <i></i>
14281 int <b>y</b> <i></i>
14283 </pre>
14284 <dd> Linearly combines two adjacent variables. Specifically,
14285 replaces the top variable with the exclusive nor of the two variables.
14286 It assumes that no dead nodes are present on entry to this
14287 procedure. The procedure then guarantees that no dead nodes will be
14288 present when it terminates. cuddLinearInPlace assumes that x &lt;
14289 y. Returns the number of keys in the table if successful; 0
14290 otherwise.
14293 <dd> <b>Side Effects</b> The two subtables corrresponding to variables x and y are
14294 modified. The global counters of the unique table are also affected.
14297 <dd> <b>See Also</b> <code><a href="#cuddSwapInPlace">cuddSwapInPlace</a>
14298 </code>
14300 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
14302 <dt><pre>
14303 <A NAME="cuddLocalCacheAddToList"></A>
14304 static void <I></I>
14305 <B>cuddLocalCacheAddToList</B>(
14306 DdLocalCache * <b>cache</b> <i></i>
14308 </pre>
14309 <dd> Inserts a local cache in the manager list.
14312 <dd> <b>Side Effects</b> None
14315 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14317 <dt><pre>
14318 <A NAME="cuddLocalCacheClearAll"></A>
14319 void <I></I>
14320 <B>cuddLocalCacheClearAll</B>(
14321 DdManager * <b>manager</b> <i></i>
14323 </pre>
14324 <dd> Clears the local caches of a manager.
14325 Used before reordering.
14328 <dd> <b>Side Effects</b> None
14331 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14333 <dt><pre>
14334 <A NAME="cuddLocalCacheClearDead"></A>
14335 void <I></I>
14336 <B>cuddLocalCacheClearDead</B>(
14337 DdManager * <b>manager</b> <i></i>
14339 </pre>
14340 <dd> Clears the dead entries of the local caches of a manager.
14341 Used during garbage collection.
14344 <dd> <b>Side Effects</b> None
14347 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14349 <dt><pre>
14350 <A NAME="cuddLocalCacheInit"></A>
14351 DdLocalCache * <I></I>
14352 <B>cuddLocalCacheInit</B>(
14353 DdManager * <b>manager</b>, <i>manager</i>
14354 unsigned int <b>keySize</b>, <i>size of the key (number of operands)</i>
14355 unsigned int <b>cacheSize</b>, <i>Initial size of the cache</i>
14356 unsigned int <b>maxCacheSize</b> <i>Size of the cache beyond which no resizing occurs</i>
14358 </pre>
14359 <dd> Initializes a computed table. Returns a pointer the
14360 the new local cache in case of success; NULL otherwise.
14363 <dd> <b>Side Effects</b> None
14366 <dd> <b>See Also</b> <code><a href="#cuddInitCache">cuddInitCache</a>
14367 </code>
14369 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14371 <dt><pre>
14372 <A NAME="cuddLocalCacheInsert"></A>
14373 void <I></I>
14374 <B>cuddLocalCacheInsert</B>(
14375 DdLocalCache * <b>cache</b>, <i></i>
14376 DdNodePtr * <b>key</b>, <i></i>
14377 DdNode * <b>value</b> <i></i>
14379 </pre>
14380 <dd> Inserts a result in a local cache.
14383 <dd> <b>Side Effects</b> None
14386 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14388 <dt><pre>
14389 <A NAME="cuddLocalCacheLookup"></A>
14390 DdNode * <I></I>
14391 <B>cuddLocalCacheLookup</B>(
14392 DdLocalCache * <b>cache</b>, <i></i>
14393 DdNodePtr * <b>key</b> <i></i>
14395 </pre>
14396 <dd> Looks up in a local cache. Returns the result if found;
14397 it returns NULL if no result is found.
14400 <dd> <b>Side Effects</b> None
14403 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14405 <dt><pre>
14406 <A NAME="cuddLocalCacheProfile"></A>
14407 int <I></I>
14408 <B>cuddLocalCacheProfile</B>(
14409 DdLocalCache * <b>cache</b> <i></i>
14411 </pre>
14412 <dd> Computes and prints a profile of a local cache usage.
14413 Returns 1 if successful; 0 otherwise.
14416 <dd> <b>Side Effects</b> None
14419 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14421 <dt><pre>
14422 <A NAME="cuddLocalCacheQuit"></A>
14423 void <I></I>
14424 <B>cuddLocalCacheQuit</B>(
14425 DdLocalCache * <b>cache</b> <i>cache to be shut down</i>
14427 </pre>
14428 <dd> Initializes the computed table. It is called by
14429 Cudd_Init. Returns a pointer the the new local cache in case of
14430 success; NULL otherwise.
14433 <dd> <b>Side Effects</b> None
14436 <dd> <b>See Also</b> <code><a href="#cuddLocalCacheInit">cuddLocalCacheInit</a>
14437 </code>
14439 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14441 <dt><pre>
14442 <A NAME="cuddLocalCacheRemoveFromList"></A>
14443 static void <I></I>
14444 <B>cuddLocalCacheRemoveFromList</B>(
14445 DdLocalCache * <b>cache</b> <i></i>
14447 </pre>
14448 <dd> Removes a local cache from the manager list.
14451 <dd> <b>Side Effects</b> None
14454 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14456 <dt><pre>
14457 <A NAME="cuddLocalCacheResize"></A>
14458 static void <I></I>
14459 <B>cuddLocalCacheResize</B>(
14460 DdLocalCache * <b>cache</b> <i></i>
14462 </pre>
14463 <dd> Resizes a local cache.
14466 <dd> <b>Side Effects</b> None
14469 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
14471 <dt><pre>
14472 <A NAME="cuddMakeBddFromZddCover"></A>
14473 DdNode * <I></I>
14474 <B>cuddMakeBddFromZddCover</B>(
14475 DdManager * <b>dd</b>, <i></i>
14476 DdNode * <b>node</b> <i></i>
14478 </pre>
14479 <dd> Converts a ZDD cover to a BDD graph. If successful, it
14480 returns a BDD node, otherwise it returns NULL. It is a recursive
14481 algorithm as the following. First computes 3 cofactors of a ZDD cover;
14482 f1, f0 and fd. Second, compute BDDs(b1, b0 and bd) of f1, f0 and fd.
14483 Third, compute T=b1+bd and E=b0+bd. Fourth, compute ITE(v,T,E) where v
14484 is the variable which has the index of the top node of the ZDD cover.
14485 In this case, since the index of v can be larger than either one of T or
14486 one of E, cuddUniqueInterIVO is called, here IVO stands for
14487 independent variable ordering.
14490 <dd> <b>See Also</b> <code><a href="#Cudd_MakeBddFromZddCover">Cudd_MakeBddFromZddCover</a>
14491 </code>
14493 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
14495 <dt><pre>
14496 <A NAME="cuddMinHammingDistRecur"></A>
14497 static int <I></I>
14498 <B>cuddMinHammingDistRecur</B>(
14499 DdNode * <b>f</b>, <i></i>
14500 int * <b>minterm</b>, <i></i>
14501 DdHashTable * <b>table</b>, <i></i>
14502 int <b>upperBound</b> <i></i>
14504 </pre>
14505 <dd> Performs the recursive step of Cudd_MinHammingDist.
14506 It is based on the following identity. Let H(f) be the
14507 minimum Hamming distance of the minterms of f from the reference
14508 minterm. Then:
14509 <xmp>
14510 H(f) = min(H(f0)+h0,H(f1)+h1)
14511 </xmp>
14512 where f0 and f1 are the two cofactors of f with respect to its top
14513 variable; h0 is 1 if the minterm assigns 1 to the top variable of f;
14514 h1 is 1 if the minterm assigns 0 to the top variable of f.
14515 The upper bound on the distance is used to bound the depth of the
14516 recursion.
14517 Returns the minimum distance unless it exceeds the upper bound or
14518 computation fails.
14521 <dd> <b>Side Effects</b> None
14524 <dd> <b>See Also</b> <code><a href="#Cudd_MinHammingDist">Cudd_MinHammingDist</a>
14525 </code>
14527 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
14529 <dt><pre>
14530 <A NAME="cuddNextHigh"></A>
14531 int <I></I>
14532 <B>cuddNextHigh</B>(
14533 DdManager * <b>table</b>, <i></i>
14534 int <b>x</b> <i></i>
14536 </pre>
14537 <dd> Finds the next subtable with a larger index. Returns the
14538 index.
14541 <dd> <b>Side Effects</b> None
14544 <dd> <b>See Also</b> <code><a href="#cuddNextLow">cuddNextLow</a>
14545 </code>
14547 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
14549 <dt><pre>
14550 <A NAME="cuddNextLow"></A>
14551 int <I></I>
14552 <B>cuddNextLow</B>(
14553 DdManager * <b>table</b>, <i></i>
14554 int <b>x</b> <i></i>
14556 </pre>
14557 <dd> Finds the next subtable with a smaller index. Returns the
14558 index.
14561 <dd> <b>Side Effects</b> None
14564 <dd> <b>See Also</b> <code><a href="#cuddNextHigh">cuddNextHigh</a>
14565 </code>
14567 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
14569 <dt><pre>
14570 <A NAME="cuddNodeArrayRecur"></A>
14571 static int <I></I>
14572 <B>cuddNodeArrayRecur</B>(
14573 DdNode * <b>f</b>, <i></i>
14574 DdNodePtr * <b>table</b>, <i></i>
14575 int <b>index</b> <i></i>
14577 </pre>
14578 <dd> Performs the recursive step of cuddNodeArray. Returns
14579 an the number of nodes in the DD. Clear the least significant bit
14580 of the next field that was used as visited flag by
14581 cuddNodeArrayRecur when counting the nodes. node is supposed to be
14582 regular; the invariant is maintained by this procedure.
14585 <dd> <b>Side Effects</b> None
14588 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
14590 <dt><pre>
14591 <A NAME="cuddNodeArray"></A>
14592 DdNodePtr * <I></I>
14593 <B>cuddNodeArray</B>(
14594 DdNode * <b>f</b>, <i></i>
14595 int * <b>n</b> <i></i>
14597 </pre>
14598 <dd> Traverses the DD f and collects all its nodes in an array.
14599 The caller should free the array returned by cuddNodeArray.
14600 Returns a pointer to the array of nodes in case of success; NULL
14601 otherwise. The nodes are collected in reverse topological order, so
14602 that a node is always preceded in the array by all its descendants.
14605 <dd> <b>Side Effects</b> The number of nodes is returned as a side effect.
14608 <dd> <b>See Also</b> <code><a href="#Cudd_FirstNode">Cudd_FirstNode</a>
14609 </code>
14611 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
14613 <dt><pre>
14614 <A NAME="cuddOrderedInsert"></A>
14615 static void <I></I>
14616 <B>cuddOrderedInsert</B>(
14617 DdNodePtr * <b>root</b>, <i></i>
14618 DdNodePtr <b>node</b> <i></i>
14620 </pre>
14621 <dd> Inserts a DdNode in a red/black search tree. Nodes from
14622 the same "page" (defined by DD_PAGE_MASK) are linked in a LIFO list.
14625 <dd> <b>Side Effects</b> None
14628 <dd> <b>See Also</b> <code><a href="#cuddOrderedThread">cuddOrderedThread</a>
14629 </code>
14631 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14633 <dt><pre>
14634 <A NAME="cuddOrderedThread"></A>
14635 static DdNode * <I></I>
14636 <B>cuddOrderedThread</B>(
14637 DdNode * <b>root</b>, <i></i>
14638 DdNode * <b>list</b> <i></i>
14640 </pre>
14641 <dd> Threads all the nodes of a search tree into a linear
14642 list. For each node of the search tree, the "left" child, if non-null, has
14643 a lower address than its parent, and the "right" child, if non-null, has a
14644 higher address than its parent.
14645 The list is sorted in order of increasing addresses. The search
14646 tree is destroyed as a result of this operation. The last element of
14647 the linear list is made to point to the address passed in list. Each
14648 node if the search tree is a linearly-linked list of nodes from the
14649 same memory page (as defined in DD_PAGE_MASK). When a node is added to
14650 the linear list, all the elements of the linked list are added.
14653 <dd> <b>Side Effects</b> The search tree is destroyed as a result of this operation.
14656 <dd> <b>See Also</b> <code><a href="#cuddOrderedInsert">cuddOrderedInsert</a>
14657 </code>
14659 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14661 <dt><pre>
14662 <A NAME="cuddPrintNode"></A>
14663 void <I></I>
14664 <B>cuddPrintNode</B>(
14665 DdNode * <b>f</b>, <i></i>
14666 FILE * <b>fp</b> <i></i>
14668 </pre>
14669 <dd> Prints out information on a node.
14672 <dd> <b>Side Effects</b> None
14675 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
14677 <dt><pre>
14678 <A NAME="cuddPrintVarGroups"></A>
14679 void <I></I>
14680 <B>cuddPrintVarGroups</B>(
14681 DdManager * <b>dd</b>, <i>manager</i>
14682 MtrNode * <b>root</b>, <i>root of the group tree</i>
14683 int <b>zdd</b>, <i>0: BDD; 1: ZDD</i>
14684 int <b>silent</b> <i>flag to check tree syntax only</i>
14686 </pre>
14687 <dd> Prints the variable groups as a parenthesized list.
14688 For each group the level range that it represents is printed. After
14689 each group, the group's flags are printed, preceded by a `|'. For
14690 each flag (except MTR_TERMINAL) a character is printed.
14691 <ul>
14692 <li>F: MTR_FIXED
14693 <li>N: MTR_NEWNODE
14694 <li>S: MTR_SOFT
14695 </ul>
14696 The second argument, silent, if different from 0, causes
14697 Cudd_PrintVarGroups to only check the syntax of the group tree.
14700 <dd> <b>Side Effects</b> None
14703 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
14705 <dt><pre>
14706 <A NAME="cuddP"></A>
14707 int <I></I>
14708 <B>cuddP</B>(
14709 DdManager * <b>dd</b>, <i></i>
14710 DdNode * <b>f</b> <i></i>
14712 </pre>
14713 <dd> Prints a DD to the standard output. One line per node is
14714 printed. Returns 1 if successful; 0 otherwise.
14717 <dd> <b>Side Effects</b> None
14720 <dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
14721 </code>
14723 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
14725 <dt><pre>
14726 <A NAME="cuddReclaimZdd"></A>
14727 void <I></I>
14728 <B>cuddReclaimZdd</B>(
14729 DdManager * <b>table</b>, <i></i>
14730 DdNode * <b>n</b> <i></i>
14732 </pre>
14733 <dd> Brings children of a dead ZDD node back.
14736 <dd> <b>Side Effects</b> None
14739 <dd> <b>See Also</b> <code><a href="#cuddReclaim">cuddReclaim</a>
14740 </code>
14742 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
14744 <dt><pre>
14745 <A NAME="cuddReclaim"></A>
14746 void <I></I>
14747 <B>cuddReclaim</B>(
14748 DdManager * <b>table</b>, <i></i>
14749 DdNode * <b>n</b> <i></i>
14751 </pre>
14752 <dd> Brings children of a dead node back.
14755 <dd> <b>Side Effects</b> None
14758 <dd> <b>See Also</b> <code><a href="#cuddReclaimZdd">cuddReclaimZdd</a>
14759 </code>
14761 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
14763 <dt><pre>
14764 <A NAME="cuddRehash"></A>
14765 void <I></I>
14766 <B>cuddRehash</B>(
14767 DdManager * <b>unique</b>, <i></i>
14768 int <b>i</b> <i></i>
14770 </pre>
14771 <dd> Doubles the size of a unique subtable and rehashes its
14772 contents.
14775 <dd> <b>Side Effects</b> None
14778 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14780 <dt><pre>
14781 <A NAME="cuddRemapUnderApprox"></A>
14782 DdNode * <I></I>
14783 <B>cuddRemapUnderApprox</B>(
14784 DdManager * <b>dd</b>, <i>DD manager</i>
14785 DdNode * <b>f</b>, <i>current DD</i>
14786 int <b>numVars</b>, <i>maximum number of variables</i>
14787 int <b>threshold</b>, <i>threshold under which approximation stops</i>
14788 double <b>quality</b> <i>minimum improvement for accepted changes</i>
14790 </pre>
14791 <dd> Applies the remapping underappoximation algorithm.
14792 Proceeds in three phases:
14793 <ul>
14794 <li> collect information on each node in the BDD; this is done via DFS.
14795 <li> traverse the BDD in top-down fashion and compute for each node
14796 whether remapping increases density.
14797 <li> traverse the BDD via DFS and actually perform the elimination.
14798 </ul>
14799 Returns the approximated BDD if successful; NULL otherwise.
14802 <dd> <b>Side Effects</b> None
14805 <dd> <b>See Also</b> <code><a href="#Cudd_RemapUnderApprox">Cudd_RemapUnderApprox</a>
14806 </code>
14808 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
14810 <dt><pre>
14811 <A NAME="cuddResizeLinear"></A>
14812 int <I></I>
14813 <B>cuddResizeLinear</B>(
14814 DdManager * <b>table</b> <i></i>
14816 </pre>
14817 <dd> Resizes the linear transform matrix. Returns 1 if
14818 successful; 0 otherwise.
14821 <dd> <b>Side Effects</b> none
14824 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
14826 <dt><pre>
14827 <A NAME="cuddResizeTableZdd"></A>
14828 int <I></I>
14829 <B>cuddResizeTableZdd</B>(
14830 DdManager * <b>unique</b>, <i></i>
14831 int <b>index</b> <i></i>
14833 </pre>
14834 <dd> Increases the number of ZDD subtables in a unique table so
14835 that it meets or exceeds index. When new ZDD variables are created, it
14836 is possible to preserve the functions unchanged, or it is possible to
14837 preserve the covers unchanged, but not both. cuddResizeTableZdd preserves
14838 the covers. Returns 1 if successful; 0 otherwise.
14841 <dd> <b>Side Effects</b> None
14844 <dd> <b>See Also</b> <code><a href="#ddResizeTable">ddResizeTable</a>
14845 </code>
14847 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14849 <dt><pre>
14850 <A NAME="cuddRotateLeft"></A>
14851 static void <I></I>
14852 <B>cuddRotateLeft</B>(
14853 DdNodePtr * <b>nodeP</b> <i></i>
14855 </pre>
14856 <dd> Performs the left rotation for red/black trees.
14859 <dd> <b>Side Effects</b> None
14862 <dd> <b>See Also</b> <code><a href="#cuddRotateRight">cuddRotateRight</a>
14863 </code>
14865 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14867 <dt><pre>
14868 <A NAME="cuddRotateRight"></A>
14869 static void <I></I>
14870 <B>cuddRotateRight</B>(
14871 DdNodePtr * <b>nodeP</b> <i></i>
14873 </pre>
14874 <dd> Performs the right rotation for red/black trees.
14877 <dd> <b>Side Effects</b> None
14880 <dd> <b>See Also</b> <code><a href="#cuddRotateLeft">cuddRotateLeft</a>
14881 </code>
14883 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14885 <dt><pre>
14886 <A NAME="cuddSetInteract"></A>
14887 void <I></I>
14888 <B>cuddSetInteract</B>(
14889 DdManager * <b>table</b>, <i></i>
14890 int <b>x</b>, <i></i>
14891 int <b>y</b> <i></i>
14893 </pre>
14894 <dd> Given a pair of variables 0 <= x < y < table->size,
14895 sets the corresponding bit of the interaction matrix to 1.
14898 <dd> <b>Side Effects</b> None
14901 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
14903 <dt><pre>
14904 <A NAME="cuddShrinkDeathRow"></A>
14905 void <I></I>
14906 <B>cuddShrinkDeathRow</B>(
14907 DdManager * <b>table</b> <i></i>
14909 </pre>
14910 <dd> Shrinks the death row by a factor of four.
14913 <dd> <b>Side Effects</b> None
14916 <dd> <b>See Also</b> <code><a href="#cuddClearDeathRow">cuddClearDeathRow</a>
14917 </code>
14919 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
14921 <dt><pre>
14922 <A NAME="cuddShrinkSubtable"></A>
14923 void <I></I>
14924 <B>cuddShrinkSubtable</B>(
14925 DdManager * <b>unique</b>, <i></i>
14926 int <b>i</b> <i></i>
14928 </pre>
14929 <dd> Shrinks a subtable.
14932 <dd> <b>Side Effects</b> None
14935 <dd> <b>See Also</b> <code><a href="#cuddRehash">cuddRehash</a>
14936 </code>
14938 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14940 <dt><pre>
14941 <A NAME="cuddSifting"></A>
14942 int <I></I>
14943 <B>cuddSifting</B>(
14944 DdManager * <b>table</b>, <i></i>
14945 int <b>lower</b>, <i></i>
14946 int <b>upper</b> <i></i>
14948 </pre>
14949 <dd> Implementation of Rudell's sifting algorithm.
14950 Assumes that no dead nodes are present.
14951 <ol>
14952 <li> Order all the variables according to the number of entries
14953 in each unique table.
14954 <li> Sift the variable up and down, remembering each time the
14955 total size of the DD heap.
14956 <li> Select the best permutation.
14957 <li> Repeat 3 and 4 for all variables.
14958 </ol>
14959 Returns 1 if successful; 0 otherwise.
14962 <dd> <b>Side Effects</b> None
14965 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
14967 <dt><pre>
14968 <A NAME="cuddSlowTableGrowth"></A>
14969 void <I></I>
14970 <B>cuddSlowTableGrowth</B>(
14971 DdManager * <b>unique</b> <i></i>
14973 </pre>
14974 <dd> Adjusts parameters of a table to slow down its growth.
14977 <dd> <b>Side Effects</b> None
14980 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
14982 <dt><pre>
14983 <A NAME="cuddSolveEqnRecur"></A>
14984 DdNode * <I></I>
14985 <B>cuddSolveEqnRecur</B>(
14986 DdManager * <b>bdd</b>, <i></i>
14987 DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
14988 DdNode * <b>Y</b>, <i>the cube of remaining y variables</i>
14989 DdNode ** <b>G</b>, <i>the array of solutions</i>
14990 int <b>n</b>, <i>number of unknowns</i>
14991 int * <b>yIndex</b>, <i>array holding the y variable indices</i>
14992 int <b>i</b> <i>level of recursion</i>
14994 </pre>
14995 <dd> Implements the recursive step of Cudd_SolveEqn.
14996 Returns NULL if the intermediate solution blows up
14997 or reordering occurs. The parametric solutions are
14998 stored in the array G.
15001 <dd> <b>Side Effects</b> none
15004 <dd> <b>See Also</b> <code><a href="#Cudd_SolveEqn">Cudd_SolveEqn</a>
15005 <a href="#Cudd_VerifySol">Cudd_VerifySol</a>
15006 </code>
15008 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>
15010 <dt><pre>
15011 <A NAME="cuddSplitSetRecur"></A>
15012 DdNode* <I></I>
15013 <B>cuddSplitSetRecur</B>(
15014 DdManager * <b>manager</b>, <i></i>
15015 st_table * <b>mtable</b>, <i></i>
15016 int * <b>varSeen</b>, <i></i>
15017 DdNode * <b>p</b>, <i></i>
15018 double <b>n</b>, <i></i>
15019 double <b>max</b>, <i></i>
15020 int <b>index</b> <i></i>
15022 </pre>
15023 <dd> Implements the recursive step of Cudd_SplitSet. The
15024 procedure recursively traverses the BDD and checks to see if any
15025 node satisfies the minterm requirements as specified by 'n'. At any
15026 node X, n is compared to the number of minterms in the onset of X's
15027 children. If either of the child nodes have exactly n minterms, then
15028 that node is returned; else, if n is greater than the onset of one
15029 of the child nodes, that node is retained and the difference in the
15030 number of minterms is extracted from the other child. In case n
15031 minterms can be extracted from constant 1, the algorithm returns the
15032 result with at most log(n) nodes.
15035 <dd> <b>Side Effects</b> The array 'varSeen' is updated at every recursive call
15036 to set the variables traversed by the procedure.
15039 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>
15041 <dt><pre>
15042 <A NAME="cuddStCountfree"></A>
15043 enum st_retval <I></I>
15044 <B>cuddStCountfree</B>(
15045 char * <b>key</b>, <i></i>
15046 char * <b>value</b>, <i></i>
15047 char * <b>arg</b> <i></i>
15049 </pre>
15050 <dd> Frees the memory used to store the minterm counts
15051 recorded in the visited table. Returns ST_CONTINUE.
15054 <dd> <b>Side Effects</b> None
15057 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
15059 <dt><pre>
15060 <A NAME="cuddSubsetHeavyBranch"></A>
15061 DdNode * <I></I>
15062 <B>cuddSubsetHeavyBranch</B>(
15063 DdManager * <b>dd</b>, <i>DD manager</i>
15064 DdNode * <b>f</b>, <i>current DD</i>
15065 int <b>numVars</b>, <i>maximum number of variables</i>
15066 int <b>threshold</b> <i>threshold size for the subset</i>
15068 </pre>
15069 <dd> Here a subset BDD is built by throwing away one of the
15070 children. Starting at root, annotate each node with the number of
15071 minterms (in terms of the total number of variables specified -
15072 numVars), number of nodes taken by the DAG rooted at this node and
15073 number of additional nodes taken by the child that has the lesser
15074 minterms. The child with the lower number of minterms is thrown away
15075 and a dyanmic count of the nodes of the subset is kept. Once the
15076 threshold is reached the subset is returned to the calling
15077 procedure.
15080 <dd> <b>Side Effects</b> None
15083 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
15084 </code>
15086 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>
15088 <dt><pre>
15089 <A NAME="cuddSubsetShortPaths"></A>
15090 DdNode * <I></I>
15091 <B>cuddSubsetShortPaths</B>(
15092 DdManager * <b>dd</b>, <i>DD manager</i>
15093 DdNode * <b>f</b>, <i>function to be subset</i>
15094 int <b>numVars</b>, <i>total number of variables in consideration</i>
15095 int <b>threshold</b>, <i>maximum number of nodes allowed in the subset</i>
15096 int <b>hardlimit</b> <i>flag determining whether thershold should be respected strictly</i>
15098 </pre>
15099 <dd> The outermost procedure to return a subset of the given
15100 BDD with the largest cubes. The path lengths are calculated, the maximum
15101 allowable path length is determined and the number of nodes of this
15102 path length that can be used to build a subset. If the threshold is
15103 larger than the size of the original BDD, the original BDD is
15104 returned.
15107 <dd> <b>Side Effects</b> None
15110 <dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
15111 </code>
15113 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
15115 <dt><pre>
15116 <A NAME="cuddSwapInPlace"></A>
15117 int <I></I>
15118 <B>cuddSwapInPlace</B>(
15119 DdManager * <b>table</b>, <i></i>
15120 int <b>x</b>, <i></i>
15121 int <b>y</b> <i></i>
15123 </pre>
15124 <dd> Swaps two adjacent variables. It assumes that no dead
15125 nodes are present on entry to this procedure. The procedure then
15126 guarantees that no dead nodes will be present when it terminates.
15127 cuddSwapInPlace assumes that x &lt; y. Returns the number of keys in
15128 the table if successful; 0 otherwise.
15131 <dd> <b>Side Effects</b> None
15134 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
15136 <dt><pre>
15137 <A NAME="cuddSwapping"></A>
15138 int <I></I>
15139 <B>cuddSwapping</B>(
15140 DdManager * <b>table</b>, <i></i>
15141 int <b>lower</b>, <i></i>
15142 int <b>upper</b>, <i></i>
15143 Cudd_ReorderingType <b>heuristic</b> <i></i>
15145 </pre>
15146 <dd> Implementation of Plessier's algorithm that reorders
15147 variables by a sequence of (non-adjacent) swaps.
15148 <ol>
15149 <li> Select two variables (RANDOM or HEURISTIC).
15150 <li> Permute these variables.
15151 <li> If the nodes have decreased accept the permutation.
15152 <li> Otherwise reconstruct the original heap.
15153 <li> Loop.
15154 </ol>
15155 Returns 1 in case of success; 0 otherwise.
15158 <dd> <b>Side Effects</b> None
15161 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
15163 <dt><pre>
15164 <A NAME="cuddSymmCheck"></A>
15165 int <I></I>
15166 <B>cuddSymmCheck</B>(
15167 DdManager * <b>table</b>, <i></i>
15168 int <b>x</b>, <i></i>
15169 int <b>y</b> <i></i>
15171 </pre>
15172 <dd> Checks for symmetry of x and y. Ignores projection
15173 functions, unless they are isolated. Returns 1 in case of symmetry; 0
15174 otherwise.
15177 <dd> <b>Side Effects</b> None
15180 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
15182 <dt><pre>
15183 <A NAME="cuddSymmSiftingConv"></A>
15184 int <I></I>
15185 <B>cuddSymmSiftingConv</B>(
15186 DdManager * <b>table</b>, <i></i>
15187 int <b>lower</b>, <i></i>
15188 int <b>upper</b> <i></i>
15190 </pre>
15191 <dd> Symmetric sifting to convergence algorithm.
15192 Assumes that no dead nodes are present.
15193 <ol>
15194 <li> Order all the variables according to the number of entries in
15195 each unique subtable.
15196 <li> Sift the variable up and down, remembering each time the total
15197 size of the DD heap and grouping variables that are symmetric.
15198 <li> Select the best permutation.
15199 <li> Repeat 3 and 4 for all variables.
15200 <li> Repeat 1-4 until no further improvement.
15201 </ol>
15202 Returns 1 plus the number of symmetric variables if successful; 0
15203 otherwise.
15206 <dd> <b>Side Effects</b> None
15209 <dd> <b>See Also</b> <code><a href="#cuddSymmSifting">cuddSymmSifting</a>
15210 </code>
15212 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
15214 <dt><pre>
15215 <A NAME="cuddSymmSifting"></A>
15216 int <I></I>
15217 <B>cuddSymmSifting</B>(
15218 DdManager * <b>table</b>, <i></i>
15219 int <b>lower</b>, <i></i>
15220 int <b>upper</b> <i></i>
15222 </pre>
15223 <dd> Symmetric sifting algorithm.
15224 Assumes that no dead nodes are present.
15225 <ol>
15226 <li> Order all the variables according to the number of entries in
15227 each unique subtable.
15228 <li> Sift the variable up and down, remembering each time the total
15229 size of the DD heap and grouping variables that are symmetric.
15230 <li> Select the best permutation.
15231 <li> Repeat 3 and 4 for all variables.
15232 </ol>
15233 Returns 1 plus the number of symmetric variables if successful; 0
15234 otherwise.
15237 <dd> <b>Side Effects</b> None
15240 <dd> <b>See Also</b> <code><a href="#cuddSymmSiftingConv">cuddSymmSiftingConv</a>
15241 </code>
15243 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
15245 <dt><pre>
15246 <A NAME="cuddTestInteract"></A>
15247 int <I></I>
15248 <B>cuddTestInteract</B>(
15249 DdManager * <b>table</b>, <i></i>
15250 int <b>x</b>, <i></i>
15251 int <b>y</b> <i></i>
15253 </pre>
15254 <dd> Given a pair of variables 0 <= x < y < table->size,
15255 tests whether the corresponding bit of the interaction matrix is 1.
15256 Returns the value of the bit.
15259 <dd> <b>Side Effects</b> None
15262 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
15264 <dt><pre>
15265 <A NAME="cuddTimesInDeathRow"></A>
15266 int <I></I>
15267 <B>cuddTimesInDeathRow</B>(
15268 DdManager * <b>dd</b>, <i></i>
15269 DdNode * <b>f</b> <i></i>
15271 </pre>
15272 <dd> Counts how many times a node is in the death row.
15275 <dd> <b>Side Effects</b> None
15278 <dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
15279 <a href="#cuddClearDeathRow">cuddClearDeathRow</a>
15280 <a href="#cuddIsInDeathRow">cuddIsInDeathRow</a>
15281 </code>
15283 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>
15285 <dt><pre>
15286 <A NAME="cuddTreeSifting"></A>
15287 int <I></I>
15288 <B>cuddTreeSifting</B>(
15289 DdManager * <b>table</b>, <i>DD table</i>
15290 Cudd_ReorderingType <b>method</b> <i>reordering method for the groups of leaves</i>
15292 </pre>
15293 <dd> Tree sifting algorithm. Assumes that a tree representing
15294 a group hierarchy is passed as a parameter. It then reorders each
15295 group in postorder fashion by calling ddTreeSiftingAux. Assumes that
15296 no dead nodes are present. Returns 1 if successful; 0 otherwise.
15299 <dd> <b>Side Effects</b> None
15302 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
15304 <dt><pre>
15305 <A NAME="cuddUnderApprox"></A>
15306 DdNode * <I></I>
15307 <B>cuddUnderApprox</B>(
15308 DdManager * <b>dd</b>, <i>DD manager</i>
15309 DdNode * <b>f</b>, <i>current DD</i>
15310 int <b>numVars</b>, <i>maximum number of variables</i>
15311 int <b>threshold</b>, <i>threshold under which approximation stops</i>
15312 int <b>safe</b>, <i>enforce safe approximation</i>
15313 double <b>quality</b> <i>minimum improvement for accepted changes</i>
15315 </pre>
15316 <dd> Applies Tom Shiple's underappoximation algorithm. Proceeds
15317 in three phases:
15318 <ul>
15319 <li> collect information on each node in the BDD; this is done via DFS.
15320 <li> traverse the BDD in top-down fashion and compute for each node
15321 whether its elimination increases density.
15322 <li> traverse the BDD via DFS and actually perform the elimination.
15323 </ul>
15324 Returns the approximated BDD if successful; NULL otherwise.
15327 <dd> <b>Side Effects</b> None
15330 <dd> <b>See Also</b> <code><a href="#Cudd_UnderApprox">Cudd_UnderApprox</a>
15331 </code>
15333 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
15335 <dt><pre>
15336 <A NAME="cuddUniqueConst"></A>
15337 DdNode * <I></I>
15338 <B>cuddUniqueConst</B>(
15339 DdManager * <b>unique</b>, <i></i>
15340 CUDD_VALUE_TYPE <b>value</b> <i></i>
15342 </pre>
15343 <dd> Checks the unique table for the existence of a constant node.
15344 If it does not exist, it creates a new one. Does not
15345 modify the reference count of whatever is returned. A newly created
15346 internal node comes back with a reference count 0. Returns a
15347 pointer to the new node.
15350 <dd> <b>Side Effects</b> None
15353 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15355 <dt><pre>
15356 <A NAME="cuddUniqueInterIVO"></A>
15357 DdNode * <I></I>
15358 <B>cuddUniqueInterIVO</B>(
15359 DdManager * <b>unique</b>, <i></i>
15360 int <b>index</b>, <i></i>
15361 DdNode * <b>T</b>, <i></i>
15362 DdNode * <b>E</b> <i></i>
15364 </pre>
15365 <dd> Wrapper for cuddUniqueInter that is independent of
15366 variable ordering (IVO). This function does not require parameter
15367 index to precede the indices of the top nodes of T and E in the
15368 variable order. Returns a pointer to the result node under normal
15369 conditions; NULL if reordering occurred or memory was exhausted.
15372 <dd> <b>Side Effects</b> None
15375 <dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
15376 <a href="#Cudd_MakeBddFromZddCover">Cudd_MakeBddFromZddCover</a>
15377 </code>
15379 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15381 <dt><pre>
15382 <A NAME="cuddUniqueInterZdd"></A>
15383 DdNode * <I></I>
15384 <B>cuddUniqueInterZdd</B>(
15385 DdManager * <b>unique</b>, <i></i>
15386 int <b>index</b>, <i></i>
15387 DdNode * <b>T</b>, <i></i>
15388 DdNode * <b>E</b> <i></i>
15390 </pre>
15391 <dd> Checks the unique table for the existence of an internal
15392 ZDD node. If it does not exist, it creates a new one. Does not
15393 modify the reference count of whatever is returned. A newly created
15394 internal node comes back with a reference count 0. For a newly
15395 created node, increments the reference counts of what T and E point
15396 to. Returns a pointer to the new node if successful; NULL if memory
15397 is exhausted or if reordering took place.
15400 <dd> <b>Side Effects</b> None
15403 <dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
15404 </code>
15406 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15408 <dt><pre>
15409 <A NAME="cuddUniqueInter"></A>
15410 DdNode * <I></I>
15411 <B>cuddUniqueInter</B>(
15412 DdManager * <b>unique</b>, <i></i>
15413 int <b>index</b>, <i></i>
15414 DdNode * <b>T</b>, <i></i>
15415 DdNode * <b>E</b> <i></i>
15417 </pre>
15418 <dd> Checks the unique table for the existence of an internal
15419 node. If it does not exist, it creates a new one. Does not
15420 modify the reference count of whatever is returned. A newly created
15421 internal node comes back with a reference count 0. For a newly
15422 created node, increments the reference counts of what T and E point
15423 to. Returns a pointer to the new node if successful; NULL if memory
15424 is exhausted or if reordering took place.
15427 <dd> <b>Side Effects</b> None
15430 <dd> <b>See Also</b> <code><a href="#cuddUniqueInterZdd">cuddUniqueInterZdd</a>
15431 </code>
15433 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15435 <dt><pre>
15436 <A NAME="cuddUniqueLookup"></A>
15437 static DdNode * <I></I>
15438 <B>cuddUniqueLookup</B>(
15439 DdManager * <b>unique</b>, <i></i>
15440 int <b>index</b>, <i></i>
15441 DdNode * <b>T</b>, <i></i>
15442 DdNode * <b>E</b> <i></i>
15444 </pre>
15445 <dd> Checks the unique table for the existence of an internal
15446 node. Returns a pointer to the node if it is in the table; NULL otherwise.
15449 <dd> <b>Side Effects</b> None
15452 <dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
15453 </code>
15455 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
15457 <dt><pre>
15458 <A NAME="cuddUpdateInteractionMatrix"></A>
15459 void <I></I>
15460 <B>cuddUpdateInteractionMatrix</B>(
15461 DdManager * <b>table</b>, <i></i>
15462 int <b>xindex</b>, <i></i>
15463 int <b>yindex</b> <i></i>
15465 </pre>
15466 <dd> Updates the interaction matrix.
15469 <dd> <b>Side Effects</b> none
15472 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
15474 <dt><pre>
15475 <A NAME="cuddVerifySol"></A>
15476 DdNode * <I></I>
15477 <B>cuddVerifySol</B>(
15478 DdManager * <b>bdd</b>, <i></i>
15479 DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
15480 DdNode ** <b>G</b>, <i>the array of solutions</i>
15481 int * <b>yIndex</b>, <i>array holding the y variable indices</i>
15482 int <b>n</b> <i>number of unknowns</i>
15484 </pre>
15485 <dd> Implements the recursive step of Cudd_VerifySol.
15488 <dd> <b>Side Effects</b> none
15491 <dd> <b>See Also</b> <code><a href="#Cudd_VerifySol">Cudd_VerifySol</a>
15492 </code>
15494 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>
15496 <dt><pre>
15497 <A NAME="cuddWindowReorder"></A>
15498 int <I></I>
15499 <B>cuddWindowReorder</B>(
15500 DdManager * <b>table</b>, <i>DD table</i>
15501 int <b>low</b>, <i>lowest index to reorder</i>
15502 int <b>high</b>, <i>highest index to reorder</i>
15503 Cudd_ReorderingType <b>submethod</b> <i>window reordering option</i>
15505 </pre>
15506 <dd> Reorders by applying the method of the sliding window.
15507 Tries all possible permutations to the variables in a window that
15508 slides from low to high. The size of the window is determined by
15509 submethod. Assumes that no dead nodes are present. Returns 1 in
15510 case of success; 0 otherwise.
15513 <dd> <b>Side Effects</b> None
15516 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
15518 <dt><pre>
15519 <A NAME="cuddXorLinear"></A>
15520 static void <I></I>
15521 <B>cuddXorLinear</B>(
15522 DdManager * <b>table</b>, <i></i>
15523 int <b>x</b>, <i></i>
15524 int <b>y</b> <i></i>
15526 </pre>
15527 <dd> XORs two rows of the linear transform matrix and replaces
15528 the first row with the result.
15531 <dd> <b>Side Effects</b> none
15534 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
15536 <dt><pre>
15537 <A NAME="cuddZddAlignToBdd"></A>
15538 int <I></I>
15539 <B>cuddZddAlignToBdd</B>(
15540 DdManager * <b>table</b> <i>DD manager</i>
15542 </pre>
15543 <dd> Reorders ZDD variables according to the order of the
15544 BDD variables. This function can be called at the end of BDD
15545 reordering to insure that the order of the ZDD variables is
15546 consistent with the order of the BDD variables. The number of ZDD
15547 variables must be a multiple of the number of BDD variables. Let
15548 <code>M</code> be the ratio of the two numbers. cuddZddAlignToBdd
15549 then considers the ZDD variables from <code>M*i</code> to
15550 <code>(M+1)*i-1</code> as corresponding to BDD variable
15551 <code>i</code>. This function should be normally called from
15552 Cudd_ReduceHeap, which clears the cache. Returns 1 in case of
15553 success; 0 otherwise.
15556 <dd> <b>Side Effects</b> Changes the ZDD variable order for all diagrams and performs
15557 garbage collection of the ZDD unique table.
15560 <dd> <b>See Also</b> <code><a href="#Cudd_zddShuffleHeap">Cudd_zddShuffleHeap</a>
15561 <a href="#Cudd_ReduceHeap">Cudd_ReduceHeap</a>
15562 </code>
15564 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
15566 <dt><pre>
15567 <A NAME="cuddZddChangeAux"></A>
15568 DdNode * <I></I>
15569 <B>cuddZddChangeAux</B>(
15570 DdManager * <b>zdd</b>, <i></i>
15571 DdNode * <b>P</b>, <i></i>
15572 DdNode * <b>zvar</b> <i></i>
15574 </pre>
15575 <dd> Performs the recursive step of Cudd_zddChange.
15578 <dd> <b>Side Effects</b> None
15581 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
15583 <dt><pre>
15584 <A NAME="cuddZddChange"></A>
15585 DdNode * <I></I>
15586 <B>cuddZddChange</B>(
15587 DdManager * <b>dd</b>, <i></i>
15588 DdNode * <b>P</b>, <i></i>
15589 int <b>var</b> <i></i>
15591 </pre>
15592 <dd> Substitutes a variable with its complement in a ZDD.
15593 returns a pointer to the result if successful; NULL
15594 otherwise. cuddZddChange performs the same function as
15595 Cudd_zddChange, but does not restart if reordering has taken
15596 place. Therefore it can be called from within a recursive
15597 procedure.
15600 <dd> <b>Side Effects</b> None
15603 <dd> <b>See Also</b> <code><a href="#Cudd_zddChange">Cudd_zddChange</a>
15604 </code>
15606 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
15608 <dt><pre>
15609 <A NAME="cuddZddComplement"></A>
15610 DdNode * <I></I>
15611 <B>cuddZddComplement</B>(
15612 DdManager * <b>dd</b>, <i></i>
15613 DdNode * <b>node</b> <i></i>
15615 </pre>
15616 <dd> Computes the complement of a ZDD node. So far, since we
15617 couldn't find a direct way to get the complement of a ZDD cover, we first
15618 convert a ZDD cover to a BDD, then make the complement of the ZDD cover
15619 from the complement of the BDD node by using ISOP.
15622 <dd> <b>Side Effects</b> The result depends on current variable order.
15625 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15627 <dt><pre>
15628 <A NAME="cuddZddCountDoubleStep"></A>
15629 static double <I></I>
15630 <B>cuddZddCountDoubleStep</B>(
15631 DdNode * <b>P</b>, <i></i>
15632 st_table * <b>table</b>, <i></i>
15633 DdNode * <b>base</b>, <i></i>
15634 DdNode * <b>empty</b> <i></i>
15636 </pre>
15637 <dd> Performs the recursive step of Cudd_zddCountDouble.
15640 <dd> <b>Side Effects</b> None
15643 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
15645 <dt><pre>
15646 <A NAME="cuddZddCountStep"></A>
15647 static int <I></I>
15648 <B>cuddZddCountStep</B>(
15649 DdNode * <b>P</b>, <i></i>
15650 st_table * <b>table</b>, <i></i>
15651 DdNode * <b>base</b>, <i></i>
15652 DdNode * <b>empty</b> <i></i>
15654 </pre>
15655 <dd> Performs the recursive step of Cudd_zddCount.
15658 <dd> <b>Side Effects</b> None
15661 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
15663 <dt><pre>
15664 <A NAME="cuddZddDagInt"></A>
15665 static int <I></I>
15666 <B>cuddZddDagInt</B>(
15667 DdNode * <b>n</b>, <i></i>
15668 st_table * <b>tab</b> <i></i>
15670 </pre>
15671 <dd> Performs the recursive step of Cudd_zddDagSize. Does
15672 not check for out-of-memory conditions.
15675 <dd> <b>Side Effects</b> None
15678 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddMisc.c"TARGET="ABSTRACT"><CODE>cuddZddMisc.c</CODE></A>
15680 <dt><pre>
15681 <A NAME="cuddZddDiff"></A>
15682 DdNode * <I></I>
15683 <B>cuddZddDiff</B>(
15684 DdManager * <b>zdd</b>, <i></i>
15685 DdNode * <b>P</b>, <i></i>
15686 DdNode * <b>Q</b> <i></i>
15688 </pre>
15689 <dd> Performs the recursive step of Cudd_zddDiff.
15692 <dd> <b>Side Effects</b> None
15695 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
15697 <dt><pre>
15698 <A NAME="cuddZddDivideF"></A>
15699 DdNode * <I></I>
15700 <B>cuddZddDivideF</B>(
15701 DdManager * <b>dd</b>, <i></i>
15702 DdNode * <b>f</b>, <i></i>
15703 DdNode * <b>g</b> <i></i>
15705 </pre>
15706 <dd> Performs the recursive step of Cudd_zddDivideF.
15709 <dd> <b>Side Effects</b> None
15712 <dd> <b>See Also</b> <code><a href="#Cudd_zddDivideF">Cudd_zddDivideF</a>
15713 </code>
15715 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15717 <dt><pre>
15718 <A NAME="cuddZddDivide"></A>
15719 DdNode * <I></I>
15720 <B>cuddZddDivide</B>(
15721 DdManager * <b>dd</b>, <i></i>
15722 DdNode * <b>f</b>, <i></i>
15723 DdNode * <b>g</b> <i></i>
15725 </pre>
15726 <dd> Performs the recursive step of Cudd_zddDivide.
15729 <dd> <b>Side Effects</b> None
15732 <dd> <b>See Also</b> <code><a href="#Cudd_zddDivide">Cudd_zddDivide</a>
15733 </code>
15735 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15737 <dt><pre>
15738 <A NAME="cuddZddFreeUniv"></A>
15739 void <I></I>
15740 <B>cuddZddFreeUniv</B>(
15741 DdManager * <b>zdd</b> <i></i>
15743 </pre>
15744 <dd> Frees the ZDD universe.
15747 <dd> <b>Side Effects</b> None
15750 <dd> <b>See Also</b> <code><a href="#cuddZddInitUniv">cuddZddInitUniv</a>
15751 </code>
15753 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>
15755 <dt><pre>
15756 <A NAME="cuddZddGetCofactors2"></A>
15757 int <I></I>
15758 <B>cuddZddGetCofactors2</B>(
15759 DdManager * <b>dd</b>, <i></i>
15760 DdNode * <b>f</b>, <i></i>
15761 int <b>v</b>, <i></i>
15762 DdNode ** <b>f1</b>, <i></i>
15763 DdNode ** <b>f0</b> <i></i>
15765 </pre>
15766 <dd> Computes the two-way decomposition of f w.r.t. v.
15769 <dd> <b>Side Effects</b> The results are returned in f1 and f0.
15772 <dd> <b>See Also</b> <code><a href="#cuddZddGetCofactors3">cuddZddGetCofactors3</a>
15773 </code>
15775 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15777 <dt><pre>
15778 <A NAME="cuddZddGetCofactors3"></A>
15779 int <I></I>
15780 <B>cuddZddGetCofactors3</B>(
15781 DdManager * <b>dd</b>, <i></i>
15782 DdNode * <b>f</b>, <i></i>
15783 int <b>v</b>, <i></i>
15784 DdNode ** <b>f1</b>, <i></i>
15785 DdNode ** <b>f0</b>, <i></i>
15786 DdNode ** <b>fd</b> <i></i>
15788 </pre>
15789 <dd> Computes the three-way decomposition of function f (represented
15790 by a ZDD) wit respect to variable v. Returns 0 if successful; 1 otherwise.
15793 <dd> <b>Side Effects</b> The results are returned in f1, f0, and fd.
15796 <dd> <b>See Also</b> <code><a href="#cuddZddGetCofactors2">cuddZddGetCofactors2</a>
15797 </code>
15799 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15801 <dt><pre>
15802 <A NAME="cuddZddGetNegVarIndex"></A>
15803 int <I></I>
15804 <B>cuddZddGetNegVarIndex</B>(
15805 DdManager * <b>dd</b>, <i></i>
15806 int <b>index</b> <i></i>
15808 </pre>
15809 <dd> Returns the index of negative ZDD variable.
15812 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15814 <dt><pre>
15815 <A NAME="cuddZddGetNegVarLevel"></A>
15816 int <I></I>
15817 <B>cuddZddGetNegVarLevel</B>(
15818 DdManager * <b>dd</b>, <i></i>
15819 int <b>index</b> <i></i>
15821 </pre>
15822 <dd> Returns the level of negative ZDD variable.
15825 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15827 <dt><pre>
15828 <A NAME="cuddZddGetNodeIVO"></A>
15829 DdNode * <I></I>
15830 <B>cuddZddGetNodeIVO</B>(
15831 DdManager * <b>dd</b>, <i></i>
15832 int <b>index</b>, <i></i>
15833 DdNode * <b>g</b>, <i></i>
15834 DdNode * <b>h</b> <i></i>
15836 </pre>
15837 <dd> Wrapper for cuddUniqueInterZdd that is independent of
15838 variable ordering (IVO). This function does not require parameter
15839 index to precede the indices of the top nodes of g and h in the
15840 variable order. Returns a pointer to the result node under normal
15841 conditions; NULL if reordering occurred or memory was exhausted.
15844 <dd> <b>Side Effects</b> None
15847 <dd> <b>See Also</b> <code><a href="#cuddZddGetNode">cuddZddGetNode</a>
15848 <a href="#cuddZddIsop">cuddZddIsop</a>
15849 </code>
15851 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15853 <dt><pre>
15854 <A NAME="cuddZddGetNode"></A>
15855 DdNode * <I></I>
15856 <B>cuddZddGetNode</B>(
15857 DdManager * <b>zdd</b>, <i></i>
15858 int <b>id</b>, <i></i>
15859 DdNode * <b>T</b>, <i></i>
15860 DdNode * <b>E</b> <i></i>
15862 </pre>
15863 <dd> Wrapper for cuddUniqueInterZdd, which applies the ZDD
15864 reduction rule. Returns a pointer to the result node under normal
15865 conditions; NULL if reordering occurred or memory was exhausted.
15868 <dd> <b>Side Effects</b> None
15871 <dd> <b>See Also</b> <code><a href="#cuddUniqueInterZdd">cuddUniqueInterZdd</a>
15872 </code>
15874 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
15876 <dt><pre>
15877 <A NAME="cuddZddGetPosVarIndex"></A>
15878 int <I></I>
15879 <B>cuddZddGetPosVarIndex</B>(
15880 DdManager * <b>dd</b>, <i></i>
15881 int <b>index</b> <i></i>
15883 </pre>
15884 <dd> Returns the index of positive ZDD variable.
15887 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15889 <dt><pre>
15890 <A NAME="cuddZddGetPosVarLevel"></A>
15891 int <I></I>
15892 <B>cuddZddGetPosVarLevel</B>(
15893 DdManager * <b>dd</b>, <i></i>
15894 int <b>index</b> <i></i>
15896 </pre>
15897 <dd> Returns the level of positive ZDD variable.
15900 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
15902 <dt><pre>
15903 <A NAME="cuddZddInitUniv"></A>
15904 int <I></I>
15905 <B>cuddZddInitUniv</B>(
15906 DdManager * <b>zdd</b> <i></i>
15908 </pre>
15909 <dd> Initializes the ZDD universe. Returns 1 if successful; 0
15910 otherwise.
15913 <dd> <b>Side Effects</b> None
15916 <dd> <b>See Also</b> <code><a href="#cuddZddFreeUniv">cuddZddFreeUniv</a>
15917 </code>
15919 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>
15921 <dt><pre>
15922 <A NAME="cuddZddIntersect"></A>
15923 DdNode * <I></I>
15924 <B>cuddZddIntersect</B>(
15925 DdManager * <b>zdd</b>, <i></i>
15926 DdNode * <b>P</b>, <i></i>
15927 DdNode * <b>Q</b> <i></i>
15929 </pre>
15930 <dd> Performs the recursive step of Cudd_zddIntersect.
15933 <dd> <b>Side Effects</b> None
15936 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
15938 <dt><pre>
15939 <A NAME="cuddZddIsop"></A>
15940 DdNode * <I></I>
15941 <B>cuddZddIsop</B>(
15942 DdManager * <b>dd</b>, <i></i>
15943 DdNode * <b>L</b>, <i></i>
15944 DdNode * <b>U</b>, <i></i>
15945 DdNode ** <b>zdd_I</b> <i></i>
15947 </pre>
15948 <dd> Performs the recursive step of Cudd_zddIsop.
15951 <dd> <b>Side Effects</b> None
15954 <dd> <b>See Also</b> <code><a href="#Cudd_zddIsop">Cudd_zddIsop</a>
15955 </code>
15957 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>
15959 <dt><pre>
15960 <A NAME="cuddZddIte"></A>
15961 DdNode * <I></I>
15962 <B>cuddZddIte</B>(
15963 DdManager * <b>dd</b>, <i></i>
15964 DdNode * <b>f</b>, <i></i>
15965 DdNode * <b>g</b>, <i></i>
15966 DdNode * <b>h</b> <i></i>
15968 </pre>
15969 <dd> Performs the recursive step of Cudd_zddIte.
15972 <dd> <b>Side Effects</b> None
15975 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
15977 <dt><pre>
15978 <A NAME="cuddZddLinearAux"></A>
15979 static int <I></I>
15980 <B>cuddZddLinearAux</B>(
15981 DdManager * <b>table</b>, <i></i>
15982 int <b>x</b>, <i></i>
15983 int <b>xLow</b>, <i></i>
15984 int <b>xHigh</b> <i></i>
15986 </pre>
15987 <dd> Given xLow <= x <= xHigh moves x up and down between the
15988 boundaries. Finds the best position and does the required changes.
15989 Returns 1 if successful; 0 otherwise.
15992 <dd> <b>Side Effects</b> None
15995 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
15997 <dt><pre>
15998 <A NAME="cuddZddLinearBackward"></A>
15999 static int <I></I>
16000 <B>cuddZddLinearBackward</B>(
16001 DdManager * <b>table</b>, <i></i>
16002 int <b>size</b>, <i></i>
16003 Move * <b>moves</b> <i></i>
16005 </pre>
16006 <dd> Given a set of moves, returns the ZDD heap to the
16007 position giving the minimum size. In case of ties, returns to the
16008 closest position giving the minimum size. Returns 1 in case of
16009 success; 0 otherwise.
16012 <dd> <b>Side Effects</b> None
16015 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16017 <dt><pre>
16018 <A NAME="cuddZddLinearDown"></A>
16019 static Move * <I></I>
16020 <B>cuddZddLinearDown</B>(
16021 DdManager * <b>table</b>, <i></i>
16022 int <b>x</b>, <i></i>
16023 int <b>xHigh</b>, <i></i>
16024 Move * <b>prevMoves</b> <i></i>
16026 </pre>
16027 <dd> Sifts a variable down. Moves x down until either it
16028 reaches the bound (xHigh) or the size of the ZDD heap increases too
16029 much. Returns the set of moves in case of success; NULL if memory is
16030 full.
16033 <dd> <b>Side Effects</b> None
16036 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16038 <dt><pre>
16039 <A NAME="cuddZddLinearInPlace"></A>
16040 static int <I></I>
16041 <B>cuddZddLinearInPlace</B>(
16042 DdManager * <b>table</b>, <i></i>
16043 int <b>x</b>, <i></i>
16044 int <b>y</b> <i></i>
16046 </pre>
16047 <dd> Linearly combines two adjacent variables. It assumes
16048 that no dead nodes are present on entry to this procedure. The
16049 procedure then guarantees that no dead nodes will be present when it
16050 terminates. cuddZddLinearInPlace assumes that x &lt; y. Returns the
16051 number of keys in the table if successful; 0 otherwise.
16054 <dd> <b>Side Effects</b> None
16057 <dd> <b>See Also</b> <code><a href="#cuddZddSwapInPlace">cuddZddSwapInPlace</a>
16058 <a href="#cuddLinearInPlace">cuddLinearInPlace</a>
16059 </code>
16061 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16063 <dt><pre>
16064 <A NAME="cuddZddLinearSifting"></A>
16065 int <I></I>
16066 <B>cuddZddLinearSifting</B>(
16067 DdManager * <b>table</b>, <i></i>
16068 int <b>lower</b>, <i></i>
16069 int <b>upper</b> <i></i>
16071 </pre>
16072 <dd> Implementation of the linear sifting algorithm for ZDDs.
16073 Assumes that no dead nodes are present.
16074 <ol>
16075 <li> Order all the variables according to the number of entries
16076 in each unique table.
16077 <li> Sift the variable up and down and applies the XOR transformation,
16078 remembering each time the total size of the DD heap.
16079 <li> Select the best permutation.
16080 <li> Repeat 3 and 4 for all variables.
16081 </ol>
16082 Returns 1 if successful; 0 otherwise.
16085 <dd> <b>Side Effects</b> None
16088 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16090 <dt><pre>
16091 <A NAME="cuddZddLinearUp"></A>
16092 static Move * <I></I>
16093 <B>cuddZddLinearUp</B>(
16094 DdManager * <b>table</b>, <i></i>
16095 int <b>y</b>, <i></i>
16096 int <b>xLow</b>, <i></i>
16097 Move * <b>prevMoves</b> <i></i>
16099 </pre>
16100 <dd> Sifts a variable up applying the XOR
16101 transformation. Moves y up until either it reaches the bound (xLow)
16102 or the size of the ZDD heap increases too much. Returns the set of
16103 moves in case of success; NULL if memory is full.
16106 <dd> <b>Side Effects</b> None
16109 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16111 <dt><pre>
16112 <A NAME="cuddZddNextHigh"></A>
16113 int <I></I>
16114 <B>cuddZddNextHigh</B>(
16115 DdManager * <b>table</b>, <i></i>
16116 int <b>x</b> <i></i>
16118 </pre>
16119 <dd> Finds the next subtable with a larger index. Returns the
16120 index.
16123 <dd> <b>Side Effects</b> None
16126 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16128 <dt><pre>
16129 <A NAME="cuddZddNextLow"></A>
16130 int <I></I>
16131 <B>cuddZddNextLow</B>(
16132 DdManager * <b>table</b>, <i></i>
16133 int <b>x</b> <i></i>
16135 </pre>
16136 <dd> Finds the next subtable with a smaller index. Returns the
16137 index.
16140 <dd> <b>Side Effects</b> None
16143 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16145 <dt><pre>
16146 <A NAME="cuddZddProduct"></A>
16147 DdNode * <I></I>
16148 <B>cuddZddProduct</B>(
16149 DdManager * <b>dd</b>, <i></i>
16150 DdNode * <b>f</b>, <i></i>
16151 DdNode * <b>g</b> <i></i>
16153 </pre>
16154 <dd> Performs the recursive step of Cudd_zddProduct.
16157 <dd> <b>Side Effects</b> None
16160 <dd> <b>See Also</b> <code><a href="#Cudd_zddProduct">Cudd_zddProduct</a>
16161 </code>
16163 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
16165 <dt><pre>
16166 <A NAME="cuddZddP"></A>
16167 int <I></I>
16168 <B>cuddZddP</B>(
16169 DdManager * <b>zdd</b>, <i></i>
16170 DdNode * <b>f</b> <i></i>
16172 </pre>
16173 <dd> Prints a ZDD to the standard output. One line per node is
16174 printed. Returns 1 if successful; 0 otherwise.
16177 <dd> <b>Side Effects</b> None
16180 <dd> <b>See Also</b> <code><a href="#Cudd_zddPrintDebug">Cudd_zddPrintDebug</a>
16181 </code>
16183 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
16185 <dt><pre>
16186 <A NAME="cuddZddSiftingAux"></A>
16187 static int <I></I>
16188 <B>cuddZddSiftingAux</B>(
16189 DdManager * <b>table</b>, <i></i>
16190 int <b>x</b>, <i></i>
16191 int <b>x_low</b>, <i></i>
16192 int <b>x_high</b> <i></i>
16194 </pre>
16195 <dd> Given xLow <= x <= xHigh moves x up and down between the
16196 boundaries. Finds the best position and does the required changes.
16197 Returns 1 if successful; 0 otherwise.
16200 <dd> <b>Side Effects</b> None
16203 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16205 <dt><pre>
16206 <A NAME="cuddZddSiftingBackward"></A>
16207 static int <I></I>
16208 <B>cuddZddSiftingBackward</B>(
16209 DdManager * <b>table</b>, <i></i>
16210 Move * <b>moves</b>, <i></i>
16211 int <b>size</b> <i></i>
16213 </pre>
16214 <dd> Given a set of moves, returns the ZDD heap to the
16215 position giving the minimum size. In case of ties, returns to the
16216 closest position giving the minimum size. Returns 1 in case of
16217 success; 0 otherwise.
16220 <dd> <b>Side Effects</b> None
16223 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16225 <dt><pre>
16226 <A NAME="cuddZddSiftingDown"></A>
16227 static Move * <I></I>
16228 <B>cuddZddSiftingDown</B>(
16229 DdManager * <b>table</b>, <i></i>
16230 int <b>x</b>, <i></i>
16231 int <b>x_high</b>, <i></i>
16232 int <b>initial_size</b> <i></i>
16234 </pre>
16235 <dd> Sifts a variable down. Moves x down until either it
16236 reaches the bound (x_high) or the size of the ZDD heap increases too
16237 much. Returns the set of moves in case of success; NULL if memory is
16238 full.
16241 <dd> <b>Side Effects</b> None
16244 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16246 <dt><pre>
16247 <A NAME="cuddZddSiftingUp"></A>
16248 static Move * <I></I>
16249 <B>cuddZddSiftingUp</B>(
16250 DdManager * <b>table</b>, <i></i>
16251 int <b>x</b>, <i></i>
16252 int <b>x_low</b>, <i></i>
16253 int <b>initial_size</b> <i></i>
16255 </pre>
16256 <dd> Sifts a variable up. Moves y up until either it reaches
16257 the bound (x_low) or the size of the ZDD heap increases too much.
16258 Returns the set of moves in case of success; NULL if memory is full.
16261 <dd> <b>Side Effects</b> None
16264 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16266 <dt><pre>
16267 <A NAME="cuddZddSifting"></A>
16268 int <I></I>
16269 <B>cuddZddSifting</B>(
16270 DdManager * <b>table</b>, <i></i>
16271 int <b>lower</b>, <i></i>
16272 int <b>upper</b> <i></i>
16274 </pre>
16275 <dd> Implementation of Rudell's sifting algorithm.
16276 Assumes that no dead nodes are present.
16277 <ol>
16278 <li> Order all the variables according to the number of entries
16279 in each unique table.
16280 <li> Sift the variable up and down, remembering each time the
16281 total size of the DD heap.
16282 <li> Select the best permutation.
16283 <li> Repeat 3 and 4 for all variables.
16284 </ol>
16285 Returns 1 if successful; 0 otherwise.
16288 <dd> <b>Side Effects</b> None
16291 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16293 <dt><pre>
16294 <A NAME="cuddZddSubset0"></A>
16295 DdNode * <I></I>
16296 <B>cuddZddSubset0</B>(
16297 DdManager * <b>dd</b>, <i></i>
16298 DdNode * <b>P</b>, <i></i>
16299 int <b>var</b> <i></i>
16301 </pre>
16302 <dd> Computes the negative cofactor of a ZDD w.r.t. a
16303 variable. In terms of combinations, the result is the set of all
16304 combinations in which the variable is negated. Returns a pointer to
16305 the result if successful; NULL otherwise. cuddZddSubset0 performs
16306 the same function as Cudd_zddSubset0, but does not restart if
16307 reordering has taken place. Therefore it can be called from within a
16308 recursive procedure.
16311 <dd> <b>Side Effects</b> None
16314 <dd> <b>See Also</b> <code><a href="#cuddZddSubset1">cuddZddSubset1</a>
16315 <a href="#Cudd_zddSubset0">Cudd_zddSubset0</a>
16316 </code>
16318 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
16320 <dt><pre>
16321 <A NAME="cuddZddSubset1"></A>
16322 DdNode * <I></I>
16323 <B>cuddZddSubset1</B>(
16324 DdManager * <b>dd</b>, <i></i>
16325 DdNode * <b>P</b>, <i></i>
16326 int <b>var</b> <i></i>
16328 </pre>
16329 <dd> Computes the positive cofactor of a ZDD w.r.t. a
16330 variable. In terms of combinations, the result is the set of all
16331 combinations in which the variable is asserted. Returns a pointer to
16332 the result if successful; NULL otherwise. cuddZddSubset1 performs
16333 the same function as Cudd_zddSubset1, but does not restart if
16334 reordering has taken place. Therefore it can be called from within a
16335 recursive procedure.
16338 <dd> <b>Side Effects</b> None
16341 <dd> <b>See Also</b> <code><a href="#cuddZddSubset0">cuddZddSubset0</a>
16342 <a href="#Cudd_zddSubset1">Cudd_zddSubset1</a>
16343 </code>
16345 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
16347 <dt><pre>
16348 <A NAME="cuddZddSwapInPlace"></A>
16349 int <I></I>
16350 <B>cuddZddSwapInPlace</B>(
16351 DdManager * <b>table</b>, <i></i>
16352 int <b>x</b>, <i></i>
16353 int <b>y</b> <i></i>
16355 </pre>
16356 <dd> Swaps two adjacent variables. It assumes that no dead
16357 nodes are present on entry to this procedure. The procedure then
16358 guarantees that no dead nodes will be present when it terminates.
16359 cuddZddSwapInPlace assumes that x &lt; y. Returns the number of keys in
16360 the table if successful; 0 otherwise.
16363 <dd> <b>Side Effects</b> None
16366 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16368 <dt><pre>
16369 <A NAME="cuddZddSwapping"></A>
16370 int <I></I>
16371 <B>cuddZddSwapping</B>(
16372 DdManager * <b>table</b>, <i></i>
16373 int <b>lower</b>, <i></i>
16374 int <b>upper</b>, <i></i>
16375 Cudd_ReorderingType <b>heuristic</b> <i></i>
16377 </pre>
16378 <dd> Implementation of Plessier's algorithm that reorders
16379 variables by a sequence of (non-adjacent) swaps.
16380 <ol>
16381 <li> Select two variables (RANDOM or HEURISTIC).
16382 <li> Permute these variables.
16383 <li> If the nodes have decreased accept the permutation.
16384 <li> Otherwise reconstruct the original heap.
16385 <li> Loop.
16386 </ol>
16387 Returns 1 in case of success; 0 otherwise.
16390 <dd> <b>Side Effects</b> None
16393 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16395 <dt><pre>
16396 <A NAME="cuddZddSymmCheck"></A>
16397 int <I></I>
16398 <B>cuddZddSymmCheck</B>(
16399 DdManager * <b>table</b>, <i></i>
16400 int <b>x</b>, <i></i>
16401 int <b>y</b> <i></i>
16403 </pre>
16404 <dd> Checks for symmetry of x and y. Ignores projection
16405 functions, unless they are isolated. Returns 1 in case of
16406 symmetry; 0 otherwise.
16409 <dd> <b>Side Effects</b> None
16412 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16414 <dt><pre>
16415 <A NAME="cuddZddSymmSiftingAux"></A>
16416 static int <I></I>
16417 <B>cuddZddSymmSiftingAux</B>(
16418 DdManager * <b>table</b>, <i></i>
16419 int <b>x</b>, <i></i>
16420 int <b>x_low</b>, <i></i>
16421 int <b>x_high</b> <i></i>
16423 </pre>
16424 <dd> Given x_low <= x <= x_high moves x up and down between the
16425 boundaries. Finds the best position and does the required changes.
16426 Assumes that x is not part of a symmetry group. Returns 1 if
16427 successful; 0 otherwise.
16430 <dd> <b>Side Effects</b> None
16433 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16435 <dt><pre>
16436 <A NAME="cuddZddSymmSiftingBackward"></A>
16437 static int <I></I>
16438 <B>cuddZddSymmSiftingBackward</B>(
16439 DdManager * <b>table</b>, <i></i>
16440 Move * <b>moves</b>, <i></i>
16441 int <b>size</b> <i></i>
16443 </pre>
16444 <dd> Given a set of moves, returns the ZDD heap to the
16445 position giving the minimum size. In case of ties, returns to the
16446 closest position giving the minimum size. Returns 1 in case of
16447 success; 0 otherwise.
16450 <dd> <b>Side Effects</b> None
16453 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16455 <dt><pre>
16456 <A NAME="cuddZddSymmSiftingConvAux"></A>
16457 static int <I></I>
16458 <B>cuddZddSymmSiftingConvAux</B>(
16459 DdManager * <b>table</b>, <i></i>
16460 int <b>x</b>, <i></i>
16461 int <b>x_low</b>, <i></i>
16462 int <b>x_high</b> <i></i>
16464 </pre>
16465 <dd> Given x_low <= x <= x_high moves x up and down between the
16466 boundaries. Finds the best position and does the required changes.
16467 Assumes that x is either an isolated variable, or it is the bottom of
16468 a symmetry group. All symmetries may not have been found, because of
16469 exceeded growth limit. Returns 1 if successful; 0 otherwise.
16472 <dd> <b>Side Effects</b> None
16475 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16477 <dt><pre>
16478 <A NAME="cuddZddSymmSiftingConv"></A>
16479 int <I></I>
16480 <B>cuddZddSymmSiftingConv</B>(
16481 DdManager * <b>table</b>, <i></i>
16482 int <b>lower</b>, <i></i>
16483 int <b>upper</b> <i></i>
16485 </pre>
16486 <dd> Symmetric sifting to convergence algorithm for ZDDs.
16487 Assumes that no dead nodes are present.
16488 <ol>
16489 <li> Order all the variables according to the number of entries in
16490 each unique subtable.
16491 <li> Sift the variable up and down, remembering each time the total
16492 size of the ZDD heap and grouping variables that are symmetric.
16493 <li> Select the best permutation.
16494 <li> Repeat 3 and 4 for all variables.
16495 <li> Repeat 1-4 until no further improvement.
16496 </ol>
16497 Returns 1 plus the number of symmetric variables if successful; 0
16498 otherwise.
16501 <dd> <b>Side Effects</b> None
16504 <dd> <b>See Also</b> <code><a href="#cuddZddSymmSifting">cuddZddSymmSifting</a>
16505 </code>
16507 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16509 <dt><pre>
16510 <A NAME="cuddZddSymmSifting_down"></A>
16511 static Move * <I></I>
16512 <B>cuddZddSymmSifting_down</B>(
16513 DdManager * <b>table</b>, <i></i>
16514 int <b>x</b>, <i></i>
16515 int <b>x_high</b>, <i></i>
16516 int <b>initial_size</b> <i></i>
16518 </pre>
16519 <dd> Moves x down until either it reaches the bound (x_high)
16520 or the size of the ZDD heap increases too much. Assumes that x is the
16521 bottom of a symmetry group. Checks x for symmetry to the adjacent
16522 variables. If symmetry is found, the symmetry group of x is merged
16523 with the symmetry group of the other variable. Returns the set of
16524 moves in case of success; ZDD_MV_OOM if memory is full.
16527 <dd> <b>Side Effects</b> None
16530 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16532 <dt><pre>
16533 <A NAME="cuddZddSymmSifting_up"></A>
16534 static Move * <I></I>
16535 <B>cuddZddSymmSifting_up</B>(
16536 DdManager * <b>table</b>, <i></i>
16537 int <b>x</b>, <i></i>
16538 int <b>x_low</b>, <i></i>
16539 int <b>initial_size</b> <i></i>
16541 </pre>
16542 <dd> Moves x up until either it reaches the bound (x_low) or
16543 the size of the ZDD heap increases too much. Assumes that x is the top
16544 of a symmetry group. Checks x for symmetry to the adjacent
16545 variables. If symmetry is found, the symmetry group of x is merged
16546 with the symmetry group of the other variable. Returns the set of
16547 moves in case of success; ZDD_MV_OOM if memory is full.
16550 <dd> <b>Side Effects</b> None
16553 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16555 <dt><pre>
16556 <A NAME="cuddZddSymmSifting"></A>
16557 int <I></I>
16558 <B>cuddZddSymmSifting</B>(
16559 DdManager * <b>table</b>, <i></i>
16560 int <b>lower</b>, <i></i>
16561 int <b>upper</b> <i></i>
16563 </pre>
16564 <dd> Symmetric sifting algorithm.
16565 Assumes that no dead nodes are present.
16566 <ol>
16567 <li> Order all the variables according to the number of entries in
16568 each unique subtable.
16569 <li> Sift the variable up and down, remembering each time the total
16570 size of the ZDD heap and grouping variables that are symmetric.
16571 <li> Select the best permutation.
16572 <li> Repeat 3 and 4 for all variables.
16573 </ol>
16574 Returns 1 plus the number of symmetric variables if successful; 0
16575 otherwise.
16578 <dd> <b>Side Effects</b> None
16581 <dd> <b>See Also</b> <code><a href="#cuddZddSymmSiftingConv">cuddZddSymmSiftingConv</a>
16582 </code>
16584 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16586 <dt><pre>
16587 <A NAME="cuddZddSymmSummary"></A>
16588 static void <I></I>
16589 <B>cuddZddSymmSummary</B>(
16590 DdManager * <b>table</b>, <i></i>
16591 int <b>lower</b>, <i></i>
16592 int <b>upper</b>, <i></i>
16593 int * <b>symvars</b>, <i></i>
16594 int * <b>symgroups</b> <i></i>
16596 </pre>
16597 <dd> Counts numbers of symmetric variables and symmetry
16598 groups.
16601 <dd> <b>Side Effects</b> None
16604 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
16606 <dt><pre>
16607 <A NAME="cuddZddTreeSifting"></A>
16608 int <I></I>
16609 <B>cuddZddTreeSifting</B>(
16610 DdManager * <b>table</b>, <i>DD table</i>
16611 Cudd_ReorderingType <b>method</b> <i>reordering method for the groups of leaves</i>
16613 </pre>
16614 <dd> Tree sifting algorithm for ZDDs. Assumes that a tree
16615 representing a group hierarchy is passed as a parameter. It then
16616 reorders each group in postorder fashion by calling
16617 zddTreeSiftingAux. Assumes that no dead nodes are present. Returns
16618 1 if successful; 0 otherwise.
16621 <dd> <b>Side Effects</b> None
16624 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
16626 <dt><pre>
16627 <A NAME="cuddZddUnateProduct"></A>
16628 DdNode * <I></I>
16629 <B>cuddZddUnateProduct</B>(
16630 DdManager * <b>dd</b>, <i></i>
16631 DdNode * <b>f</b>, <i></i>
16632 DdNode * <b>g</b> <i></i>
16634 </pre>
16635 <dd> Performs the recursive step of Cudd_zddUnateProduct.
16638 <dd> <b>Side Effects</b> None
16641 <dd> <b>See Also</b> <code><a href="#Cudd_zddUnateProduct">Cudd_zddUnateProduct</a>
16642 </code>
16644 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
16646 <dt><pre>
16647 <A NAME="cuddZddUndoMoves"></A>
16648 static Move* <I></I>
16649 <B>cuddZddUndoMoves</B>(
16650 DdManager * <b>table</b>, <i></i>
16651 Move * <b>moves</b> <i></i>
16653 </pre>
16654 <dd> Given a set of moves, returns the ZDD heap to the
16655 order in effect before the moves. Returns 1 in case of success;
16656 0 otherwise.
16659 <dd> <b>Side Effects</b> None
16662 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>
16664 <dt><pre>
16665 <A NAME="cuddZddUnion"></A>
16666 DdNode * <I></I>
16667 <B>cuddZddUnion</B>(
16668 DdManager * <b>zdd</b>, <i></i>
16669 DdNode * <b>P</b>, <i></i>
16670 DdNode * <b>Q</b> <i></i>
16672 </pre>
16673 <dd> Performs the recursive step of Cudd_zddUnion.
16676 <dd> <b>Side Effects</b> None
16679 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
16681 <dt><pre>
16682 <A NAME="cuddZddUniqueCompare"></A>
16683 int <I></I>
16684 <B>cuddZddUniqueCompare</B>(
16685 int * <b>ptr_x</b>, <i></i>
16686 int * <b>ptr_y</b> <i></i>
16688 </pre>
16689 <dd> Comparison function used by qsort to order the
16690 variables according to the number of keys in the subtables.
16691 Returns the difference in number of keys between the two
16692 variables being compared.
16695 <dd> <b>Side Effects</b> None
16698 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
16700 <dt><pre>
16701 <A NAME="cuddZddWeakDivF"></A>
16702 DdNode * <I></I>
16703 <B>cuddZddWeakDivF</B>(
16704 DdManager * <b>dd</b>, <i></i>
16705 DdNode * <b>f</b>, <i></i>
16706 DdNode * <b>g</b> <i></i>
16708 </pre>
16709 <dd> Performs the recursive step of Cudd_zddWeakDivF.
16712 <dd> <b>Side Effects</b> None
16715 <dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDivF">Cudd_zddWeakDivF</a>
16716 </code>
16718 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
16720 <dt><pre>
16721 <A NAME="cuddZddWeakDiv"></A>
16722 DdNode * <I></I>
16723 <B>cuddZddWeakDiv</B>(
16724 DdManager * <b>dd</b>, <i></i>
16725 DdNode * <b>f</b>, <i></i>
16726 DdNode * <b>g</b> <i></i>
16728 </pre>
16729 <dd> Performs the recursive step of Cudd_zddWeakDiv.
16732 <dd> <b>Side Effects</b> None
16735 <dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDiv">Cudd_zddWeakDiv</a>
16736 </code>
16738 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>
16740 <dt><pre>
16741 <A NAME="ddBddToAddRecur"></A>
16742 static DdNode * <I></I>
16743 <B>ddBddToAddRecur</B>(
16744 DdManager * <b>dd</b>, <i></i>
16745 DdNode * <b>B</b> <i></i>
16747 </pre>
16748 <dd> Performs the recursive step for Cudd_BddToAdd. Returns a
16749 pointer to the resulting ADD if successful; NULL otherwise.
16752 <dd> <b>Side Effects</b> None
16755 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>
16757 <dt><pre>
16758 <A NAME="ddCheckPermuation"></A>
16759 static int <I></I>
16760 <B>ddCheckPermuation</B>(
16761 DdManager * <b>table</b>, <i></i>
16762 MtrNode * <b>treenode</b>, <i></i>
16763 int * <b>perm</b>, <i></i>
16764 int * <b>invperm</b> <i></i>
16766 </pre>
16767 <dd> Checks the BDD variable group tree before a shuffle.
16768 Returns 1 if successful; 0 otherwise.
16771 <dd> <b>Side Effects</b> Changes the BDD variable group tree.
16774 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
16776 <dt><pre>
16777 <A NAME="ddClearFlag"></A>
16778 static void <I></I>
16779 <B>ddClearFlag</B>(
16780 DdNode * <b>f</b> <i></i>
16782 </pre>
16783 <dd> Performs a DFS from f, clearing the LSB of the next
16784 pointers.
16787 <dd> <b>Side Effects</b> None
16790 <dd> <b>See Also</b> <code><a href="#ddSupportStep">ddSupportStep</a>
16791 <a href="#ddDagInt">ddDagInt</a>
16792 </code>
16794 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
16796 <dt><pre>
16797 <A NAME="ddClearGlobal"></A>
16798 static void <I></I>
16799 <B>ddClearGlobal</B>(
16800 DdManager * <b>table</b>, <i></i>
16801 int <b>lower</b>, <i></i>
16802 int <b>maxlevel</b> <i></i>
16804 </pre>
16805 <dd> Scans the DD and clears the LSB of the next pointers.
16806 The LSB of the next pointers are used as markers to tell whether a
16807 node was reached. Once the roots are counted, these flags are
16808 reset.
16811 <dd> <b>Side Effects</b> None
16814 <dd> <b>See Also</b> <code><a href="#ddCountRoots">ddCountRoots</a>
16815 </code>
16817 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
16819 <dt><pre>
16820 <A NAME="ddClearGlobal"></A>
16821 static void <I></I>
16822 <B>ddClearGlobal</B>(
16823 DdManager * <b>table</b> <i></i>
16825 </pre>
16826 <dd> The LSB of the next pointers are used as markers to tell
16827 whether a node was reached by at least one DFS. Once the interaction
16828 matrix is built, these flags are reset.
16831 <dd> <b>Side Effects</b> None
16834 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
16836 <dt><pre>
16837 <A NAME="ddClearLocal"></A>
16838 static void <I></I>
16839 <B>ddClearLocal</B>(
16840 DdNode * <b>f</b> <i></i>
16842 </pre>
16843 <dd> Performs a DFS from f, clearing the LSB of the then pointers.
16846 <dd> <b>Side Effects</b> None
16849 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
16851 <dt><pre>
16852 <A NAME="ddCofMintermAux"></A>
16853 static double * <I></I>
16854 <B>ddCofMintermAux</B>(
16855 DdManager * <b>dd</b>, <i></i>
16856 DdNode * <b>node</b>, <i></i>
16857 st_table * <b>table</b> <i></i>
16859 </pre>
16860 <dd> Traverses the DD node and computes the fraction of
16861 minterms in the on-set of all positive cofactors simultaneously.
16862 It allocates an array with two more entries than there are
16863 variables below the one labeling the node. One extra entry (the
16864 first in the array) is for the variable labeling the node. The other
16865 entry (the last one in the array) holds the fraction of minterms of
16866 the function rooted at node. Each other entry holds the value for
16867 one cofactor. The array is put in a symbol table, to avoid repeated
16868 computation, and its address is returned by the procedure, for use
16869 by the caller. Returns a pointer to the array of cofactor measures.
16872 <dd> <b>Side Effects</b> None
16875 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSign.c"TARGET="ABSTRACT"><CODE>cuddSign.c</CODE></A>
16877 <dt><pre>
16878 <A NAME="ddCountInternalMtrNodes"></A>
16879 static int <I></I>
16880 <B>ddCountInternalMtrNodes</B>(
16881 DdManager * <b>table</b>, <i></i>
16882 MtrNode * <b>treenode</b> <i></i>
16884 </pre>
16885 <dd> Counts the number of internal nodes of the group tree.
16886 Returns the count.
16889 <dd> <b>Side Effects</b> None
16892 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
16894 <dt><pre>
16895 <A NAME="ddCountMintermAux"></A>
16896 static double <I></I>
16897 <B>ddCountMintermAux</B>(
16898 DdNode * <b>node</b>, <i></i>
16899 double <b>max</b>, <i></i>
16900 DdHashTable * <b>table</b> <i></i>
16902 </pre>
16903 <dd> Performs the recursive step of Cudd_CountMinterm.
16904 It is based on the following identity. Let |f| be the
16905 number of minterms of f. Then:
16906 <xmp>
16907 |f| = (|f0|+|f1|)/2
16908 </xmp>
16909 where f0 and f1 are the two cofactors of f. Does not use the
16910 identity |f'| = max - |f|, to minimize loss of accuracy due to
16911 roundoff. Returns the number of minterms of the function rooted at
16912 node.
16915 <dd> <b>Side Effects</b> None
16918 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
16920 <dt><pre>
16921 <A NAME="ddCountPathAux"></A>
16922 static double <I></I>
16923 <B>ddCountPathAux</B>(
16924 DdNode * <b>node</b>, <i></i>
16925 st_table * <b>table</b> <i></i>
16927 </pre>
16928 <dd> Performs the recursive step of Cudd_CountPath.
16929 It is based on the following identity. Let |f| be the
16930 number of paths of f. Then:
16931 <xmp>
16932 |f| = |f0|+|f1|
16933 </xmp>
16934 where f0 and f1 are the two cofactors of f. Uses the
16935 identity |f'| = |f|, to improve the utilization of the (local) cache.
16936 Returns the number of paths of the function rooted at node.
16939 <dd> <b>Side Effects</b> None
16942 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
16944 <dt><pre>
16945 <A NAME="ddCountPathsToNonZero"></A>
16946 static double <I></I>
16947 <B>ddCountPathsToNonZero</B>(
16948 DdNode * <b>N</b>, <i></i>
16949 st_table * <b>table</b> <i></i>
16951 </pre>
16952 <dd> Performs the recursive step of Cudd_CountPathsToNonZero.
16953 It is based on the following identity. Let |f| be the
16954 number of paths of f. Then:
16955 <xmp>
16956 |f| = |f0|+|f1|
16957 </xmp>
16958 where f0 and f1 are the two cofactors of f. Returns the number of
16959 paths of the function rooted at node.
16962 <dd> <b>Side Effects</b> None
16965 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
16967 <dt><pre>
16968 <A NAME="ddCountRoots"></A>
16969 static int <I></I>
16970 <B>ddCountRoots</B>(
16971 DdManager * <b>table</b>, <i></i>
16972 int <b>lower</b>, <i></i>
16973 int <b>upper</b> <i></i>
16975 </pre>
16976 <dd> Counts the number of roots at the levels between lower and
16977 upper. The computation is based on breadth-first search.
16978 A node is a root if it is not reachable from any previously visited node.
16979 (All the nodes at level lower are therefore considered roots.)
16980 The visited flag uses the LSB of the next pointer. Returns the root
16981 count. The roots that are constant nodes are always ignored.
16984 <dd> <b>Side Effects</b> None
16987 <dd> <b>See Also</b> <code><a href="#ddClearGlobal">ddClearGlobal</a>
16988 </code>
16990 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
16992 <dt><pre>
16993 <A NAME="ddCreateGroup"></A>
16994 static void <I></I>
16995 <B>ddCreateGroup</B>(
16996 DdManager * <b>table</b>, <i></i>
16997 int <b>x</b>, <i></i>
16998 int <b>y</b> <i></i>
17000 </pre>
17001 <dd> Creates a group encompassing variables from x to y in the
17002 DD table. In the current implementation it must be y == x+1.
17003 Returns 1 in case of success; 0 otherwise.
17006 <dd> <b>Side Effects</b> None
17009 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17011 <dt><pre>
17012 <A NAME="ddDagInt"></A>
17013 static int <I></I>
17014 <B>ddDagInt</B>(
17015 DdNode * <b>n</b> <i></i>
17017 </pre>
17018 <dd> Performs the recursive step of Cudd_DagSize. Returns the
17019 number of nodes in the graph rooted at n.
17022 <dd> <b>Side Effects</b> None
17025 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17027 <dt><pre>
17028 <A NAME="ddDissolveGroup"></A>
17029 static void <I></I>
17030 <B>ddDissolveGroup</B>(
17031 DdManager * <b>table</b>, <i></i>
17032 int <b>x</b>, <i></i>
17033 int <b>y</b> <i></i>
17035 </pre>
17036 <dd> x and y are variables in a group to be cut in two. The cut
17037 is to pass between x and y.
17040 <dd> <b>Side Effects</b> None
17043 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17045 <dt><pre>
17046 <A NAME="ddDoDumpBlif"></A>
17047 static int <I></I>
17048 <B>ddDoDumpBlif</B>(
17049 DdManager * <b>dd</b>, <i></i>
17050 DdNode * <b>f</b>, <i></i>
17051 FILE * <b>fp</b>, <i></i>
17052 st_table * <b>visited</b>, <i></i>
17053 char ** <b>names</b>, <i></i>
17054 int <b>mv</b> <i></i>
17056 </pre>
17057 <dd> Performs the recursive step of Cudd_DumpBlif. Traverses
17058 the BDD f and writes a multiplexer-network description to the file
17059 pointed by fp in blif format. f is assumed to be a regular pointer
17060 and ddDoDumpBlif guarantees this assumption in the recursive calls.
17063 <dd> <b>Side Effects</b> None
17066 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
17068 <dt><pre>
17069 <A NAME="ddDoDumpDDcal"></A>
17070 static int <I></I>
17071 <B>ddDoDumpDDcal</B>(
17072 DdManager * <b>dd</b>, <i></i>
17073 DdNode * <b>f</b>, <i></i>
17074 FILE * <b>fp</b>, <i></i>
17075 st_table * <b>visited</b>, <i></i>
17076 char ** <b>names</b>, <i></i>
17077 unsigned long <b>mask</b> <i></i>
17079 </pre>
17080 <dd> Performs the recursive step of Cudd_DumpDDcal. Traverses
17081 the BDD f and writes a line for each node to the file
17082 pointed by fp in DDcal format. f is assumed to be a regular pointer
17083 and ddDoDumpDDcal guarantees this assumption in the recursive calls.
17086 <dd> <b>Side Effects</b> None
17089 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
17091 <dt><pre>
17092 <A NAME="ddDoDumpDaVinci"></A>
17093 static int <I></I>
17094 <B>ddDoDumpDaVinci</B>(
17095 DdManager * <b>dd</b>, <i></i>
17096 DdNode * <b>f</b>, <i></i>
17097 FILE * <b>fp</b>, <i></i>
17098 st_table * <b>visited</b>, <i></i>
17099 char ** <b>names</b>, <i></i>
17100 unsigned long <b>mask</b> <i></i>
17102 </pre>
17103 <dd> Performs the recursive step of Cudd_DumpDaVinci. Traverses
17104 the BDD f and writes a term expression to the file
17105 pointed by fp in daVinci format. f is assumed to be a regular pointer
17106 and ddDoDumpDaVinci guarantees this assumption in the recursive calls.
17109 <dd> <b>Side Effects</b> None
17112 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
17114 <dt><pre>
17115 <A NAME="ddDoDumpFactoredForm"></A>
17116 static int <I></I>
17117 <B>ddDoDumpFactoredForm</B>(
17118 DdManager * <b>dd</b>, <i></i>
17119 DdNode * <b>f</b>, <i></i>
17120 FILE * <b>fp</b>, <i></i>
17121 char ** <b>names</b> <i></i>
17123 </pre>
17124 <dd> Performs the recursive step of
17125 Cudd_DumpFactoredForm. Traverses the BDD f and writes a factored
17126 form for each node to the file pointed by fp in terms of the
17127 factored forms of the children. Constants are propagated, and
17128 absorption is applied. f is assumed to be a regular pointer and
17129 ddDoDumpFActoredForm guarantees this assumption in the recursive
17130 calls.
17133 <dd> <b>Side Effects</b> None
17136 <dd> <b>See Also</b> <code><a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
17137 </code>
17139 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>
17141 <dt><pre>
17142 <A NAME="ddEpdCountMintermAux"></A>
17143 static int <I></I>
17144 <B>ddEpdCountMintermAux</B>(
17145 DdNode * <b>node</b>, <i></i>
17146 EpDouble * <b>max</b>, <i></i>
17147 EpDouble * <b>epd</b>, <i></i>
17148 st_table * <b>table</b> <i></i>
17150 </pre>
17151 <dd> Performs the recursive step of Cudd_EpdCountMinterm.
17152 It is based on the following identity. Let |f| be the
17153 number of minterms of f. Then:
17154 <xmp>
17155 |f| = (|f0|+|f1|)/2
17156 </xmp>
17157 where f0 and f1 are the two cofactors of f. Does not use the
17158 identity |f'| = max - |f|, to minimize loss of accuracy due to
17159 roundoff. Returns the number of minterms of the function rooted at
17160 node.
17163 <dd> <b>Side Effects</b> None
17166 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17168 <dt><pre>
17169 <A NAME="ddEpdFree"></A>
17170 static enum st_retval <I></I>
17171 <B>ddEpdFree</B>(
17172 char * <b>key</b>, <i></i>
17173 char * <b>value</b>, <i></i>
17174 char * <b>arg</b> <i></i>
17176 </pre>
17177 <dd> Frees the memory used to store the minterm counts
17178 recorded in the visited table. Returns ST_CONTINUE.
17181 <dd> <b>Side Effects</b> None
17184 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17186 <dt><pre>
17187 <A NAME="ddExchange"></A>
17188 static int <I></I>
17189 <B>ddExchange</B>(
17190 DdManager * <b>table</b>, <i></i>
17191 int <b>x</b>, <i></i>
17192 int <b>y</b>, <i></i>
17193 double <b>temp</b> <i></i>
17195 </pre>
17196 <dd> This is the same funcion as ddSwapping except for
17197 comparison expression. Use probability function, exp(-size_change/temp).
17200 <dd> <b>Side Effects</b> None
17203 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
17205 <dt><pre>
17206 <A NAME="ddExtSymmCheck"></A>
17207 static int <I></I>
17208 <B>ddExtSymmCheck</B>(
17209 DdManager * <b>table</b>, <i></i>
17210 int <b>x</b>, <i></i>
17211 int <b>y</b> <i></i>
17213 </pre>
17214 <dd> Checks for extended symmetry of x and y. Returns 1 in
17215 case of extended symmetry; 0 otherwise.
17218 <dd> <b>Side Effects</b> None
17221 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17223 <dt><pre>
17224 <A NAME="ddFindEssentialRecur"></A>
17225 static DdNode * <I></I>
17226 <B>ddFindEssentialRecur</B>(
17227 DdManager * <b>dd</b>, <i></i>
17228 DdNode * <b>f</b> <i></i>
17230 </pre>
17231 <dd> Implements the recursive step of Cudd_FindEssential.
17232 Returns a pointer to the cube BDD if successful; NULL otherwise.
17235 <dd> <b>Side Effects</b> None
17238 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
17240 <dt><pre>
17241 <A NAME="ddFindNodeHiLo"></A>
17242 static void <I></I>
17243 <B>ddFindNodeHiLo</B>(
17244 DdManager * <b>table</b>, <i></i>
17245 MtrNode * <b>treenode</b>, <i></i>
17246 int * <b>lower</b>, <i></i>
17247 int * <b>upper</b> <i></i>
17249 </pre>
17250 <dd> Finds the lower and upper bounds of the group
17251 represented by treenode. From the index and size fields we need to
17252 derive the current positions, and find maximum and minimum.
17255 <dd> <b>Side Effects</b> The bounds are returned as side effects.
17258 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17260 <dt><pre>
17261 <A NAME="ddFindTwoLiteralClausesRecur"></A>
17262 static DdTlcInfo * <I></I>
17263 <B>ddFindTwoLiteralClausesRecur</B>(
17264 DdManager * <b>dd</b>, <i></i>
17265 DdNode * <b>f</b>, <i></i>
17266 st_table * <b>table</b> <i></i>
17268 </pre>
17269 <dd> Implements the recursive step of
17270 Cudd_FindTwoLiteralClauses. The DD node is assumed to be not
17271 constant. Returns a pointer to a set of clauses if successful; NULL
17272 otherwise.
17275 <dd> <b>Side Effects</b> None
17278 <dd> <b>See Also</b> <code><a href="#Cudd_FindTwoLiteralClauses">Cudd_FindTwoLiteralClauses</a>
17279 </code>
17281 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
17283 <dt><pre>
17284 <A NAME="ddFixLimits"></A>
17285 static void <I></I>
17286 <B>ddFixLimits</B>(
17287 DdManager * <b>unique</b> <i></i>
17289 </pre>
17290 <dd> Adjusts the values of table fields controlling the.
17291 sizes of subtables and computed table. If the computed table is too small
17292 according to the new values, it is resized.
17295 <dd> <b>Side Effects</b> Modifies manager fields. May resize computed table.
17298 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
17300 <dt><pre>
17301 <A NAME="ddGroupMoveBackward"></A>
17302 static int <I></I>
17303 <B>ddGroupMoveBackward</B>(
17304 DdManager * <b>table</b>, <i></i>
17305 int <b>x</b>, <i></i>
17306 int <b>y</b> <i></i>
17308 </pre>
17309 <dd> Undoes the swap two groups. Returns 1 in case of
17310 success; 0 otherwise.
17313 <dd> <b>Side Effects</b> None
17316 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17318 <dt><pre>
17319 <A NAME="ddGroupMove"></A>
17320 static int <I></I>
17321 <B>ddGroupMove</B>(
17322 DdManager * <b>table</b>, <i></i>
17323 int <b>x</b>, <i></i>
17324 int <b>y</b>, <i></i>
17325 Move ** <b>moves</b> <i></i>
17327 </pre>
17328 <dd> Swaps two groups and records the move. Returns the
17329 number of keys in the DD table in case of success; 0 otherwise.
17332 <dd> <b>Side Effects</b> None
17335 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17337 <dt><pre>
17338 <A NAME="ddGroupSiftingAux"></A>
17339 static int <I></I>
17340 <B>ddGroupSiftingAux</B>(
17341 DdManager * <b>table</b>, <i></i>
17342 int <b>x</b>, <i></i>
17343 int <b>xLow</b>, <i></i>
17344 int <b>xHigh</b>, <i></i>
17345 DD_CHKFP <b>checkFunction</b>, <i></i>
17346 int <b>lazyFlag</b> <i></i>
17348 </pre>
17349 <dd> Sifts one variable up and down until it has taken all
17350 positions. Checks for aggregation. There may be at most two sweeps,
17351 even if the group grows. Assumes that x is either an isolated
17352 variable, or it is the bottom of a group. All groups may not have
17353 been found. The variable being moved is returned to the best position
17354 seen during sifting. Returns 1 in case of success; 0 otherwise.
17357 <dd> <b>Side Effects</b> None
17360 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17362 <dt><pre>
17363 <A NAME="ddGroupSiftingBackward"></A>
17364 static int <I></I>
17365 <B>ddGroupSiftingBackward</B>(
17366 DdManager * <b>table</b>, <i></i>
17367 Move * <b>moves</b>, <i></i>
17368 int <b>size</b>, <i></i>
17369 int <b>upFlag</b>, <i></i>
17370 int <b>lazyFlag</b> <i></i>
17372 </pre>
17373 <dd> Determines the best position for a variables and returns
17374 it there. Returns 1 in case of success; 0 otherwise.
17377 <dd> <b>Side Effects</b> None
17380 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17382 <dt><pre>
17383 <A NAME="ddGroupSiftingDown"></A>
17384 static int <I></I>
17385 <B>ddGroupSiftingDown</B>(
17386 DdManager * <b>table</b>, <i></i>
17387 int <b>x</b>, <i></i>
17388 int <b>xHigh</b>, <i></i>
17389 DD_CHKFP <b>checkFunction</b>, <i></i>
17390 Move ** <b>moves</b> <i></i>
17392 </pre>
17393 <dd> Sifts down a variable until it reaches position xHigh.
17394 Assumes that x is the bottom of a group (or a singleton). Records
17395 all the moves. Returns 1 in case of success; 0 otherwise.
17398 <dd> <b>Side Effects</b> None
17401 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17403 <dt><pre>
17404 <A NAME="ddGroupSiftingUp"></A>
17405 static int <I></I>
17406 <B>ddGroupSiftingUp</B>(
17407 DdManager * <b>table</b>, <i></i>
17408 int <b>y</b>, <i></i>
17409 int <b>xLow</b>, <i></i>
17410 DD_CHKFP <b>checkFunction</b>, <i></i>
17411 Move ** <b>moves</b> <i></i>
17413 </pre>
17414 <dd> Sifts up a variable until either it reaches position
17415 xLow or the size of the DD heap increases too much. Assumes that y is
17416 the top of a group (or a singleton). Checks y for aggregation to the
17417 adjacent variables. Records all the moves that are appended to the
17418 list of moves received as input and returned as a side effect.
17419 Returns 1 in case of success; 0 otherwise.
17422 <dd> <b>Side Effects</b> None
17425 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17427 <dt><pre>
17428 <A NAME="ddGroupSifting"></A>
17429 static int <I></I>
17430 <B>ddGroupSifting</B>(
17431 DdManager * <b>table</b>, <i></i>
17432 int <b>lower</b>, <i></i>
17433 int <b>upper</b>, <i></i>
17434 DD_CHKFP <b>checkFunction</b>, <i></i>
17435 int <b>lazyFlag</b> <i></i>
17437 </pre>
17438 <dd> Sifts from treenode->low to treenode->high. If
17439 croupcheck == CUDD_GROUP_CHECK7, it checks for group creation at the
17440 end of the initial sifting. If a group is created, it is then sifted
17441 again. After sifting one variable, the group that contains it is
17442 dissolved. Returns 1 in case of success; 0 otherwise.
17445 <dd> <b>Side Effects</b> None
17448 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17450 <dt><pre>
17451 <A NAME="ddIsIthAddVarPair"></A>
17452 static int <I></I>
17453 <B>ddIsIthAddVarPair</B>(
17454 DdManager * <b>dd</b>, <i></i>
17455 DdNode * <b>f</b>, <i></i>
17456 DdNode * <b>g</b>, <i></i>
17457 unsigned int <b>i</b> <i></i>
17459 </pre>
17460 <dd> Comparison of a pair of functions to the i-th ADD
17461 variable. Returns 1 if the functions are the i-th ADD variable and its
17462 complement; 0 otherwise.
17465 <dd> <b>Side Effects</b> None
17468 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
17470 <dt><pre>
17471 <A NAME="ddIsIthAddVar"></A>
17472 static int <I></I>
17473 <B>ddIsIthAddVar</B>(
17474 DdManager * <b>dd</b>, <i></i>
17475 DdNode * <b>f</b>, <i></i>
17476 unsigned int <b>i</b> <i></i>
17478 </pre>
17479 <dd> Comparison of a function to the i-th ADD variable. Returns 1 if
17480 the function is the i-th ADD variable; 0 otherwise.
17483 <dd> <b>Side Effects</b> None
17486 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>
17488 <dt><pre>
17489 <A NAME="ddIsVarHandled"></A>
17490 static int <I></I>
17491 <B>ddIsVarHandled</B>(
17492 DdManager * <b>dd</b>, <i></i>
17493 int <b>index</b> <i></i>
17495 </pre>
17496 <dd> Checks whether a variables is already handled. This
17497 function is used for lazy sifting.
17500 <dd> <b>Side Effects</b> none
17503 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17505 <dt><pre>
17506 <A NAME="ddJumpingAux"></A>
17507 static int <I></I>
17508 <B>ddJumpingAux</B>(
17509 DdManager * <b>table</b>, <i></i>
17510 int <b>x</b>, <i></i>
17511 int <b>x_low</b>, <i></i>
17512 int <b>x_high</b>, <i></i>
17513 double <b>temp</b> <i></i>
17515 </pre>
17516 <dd> If x==x_low, it executes jumping_down. If x==x_high, it
17517 executes jumping_up. This funcion is similar to ddSiftingAux. Returns
17518 1 in case of success; 0 otherwise.
17521 <dd> <b>Side Effects</b> None
17524 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
17526 <dt><pre>
17527 <A NAME="ddJumpingDown"></A>
17528 static Move * <I></I>
17529 <B>ddJumpingDown</B>(
17530 DdManager * <b>table</b>, <i></i>
17531 int <b>x</b>, <i></i>
17532 int <b>x_high</b>, <i></i>
17533 int <b>initial_size</b> <i></i>
17535 </pre>
17536 <dd> This is a simplified version of ddSiftingDown. It does not
17537 use lower bounding. Returns the set of moves in case of success; NULL
17538 if memory is full.
17541 <dd> <b>Side Effects</b> None
17544 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
17546 <dt><pre>
17547 <A NAME="ddJumpingUp"></A>
17548 static Move * <I></I>
17549 <B>ddJumpingUp</B>(
17550 DdManager * <b>table</b>, <i></i>
17551 int <b>x</b>, <i></i>
17552 int <b>x_low</b>, <i></i>
17553 int <b>initial_size</b> <i></i>
17555 </pre>
17556 <dd> This is a simplified version of ddSiftingUp. It does not
17557 use lower bounding. Returns the set of moves in case of success; NULL
17558 if memory is full.
17561 <dd> <b>Side Effects</b> None
17564 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
17566 <dt><pre>
17567 <A NAME="ddLCHash"></A>
17568 static unsigned int <I></I>
17569 <B>ddLCHash</B>(
17570 DdNodePtr * <b>key</b>, <i></i>
17571 unsigned int <b>keysize</b>, <i></i>
17572 int <b>shift</b> <i></i>
17574 </pre>
17575 <dd> Computes the hash value for a local cache. Returns the
17576 bucket index.
17579 <dd> <b>Side Effects</b> None
17582 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
17584 <dt><pre>
17585 <A NAME="ddLeavesInt"></A>
17586 static int <I></I>
17587 <B>ddLeavesInt</B>(
17588 DdNode * <b>n</b> <i></i>
17590 </pre>
17591 <dd> Performs the recursive step of Cudd_CountLeaves. Returns
17592 the number of leaves in the DD rooted at n.
17595 <dd> <b>Side Effects</b> None
17598 <dd> <b>See Also</b> <code><a href="#Cudd_CountLeaves">Cudd_CountLeaves</a>
17599 </code>
17601 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17603 <dt><pre>
17604 <A NAME="ddLinearAndSiftingAux"></A>
17605 static int <I></I>
17606 <B>ddLinearAndSiftingAux</B>(
17607 DdManager * <b>table</b>, <i></i>
17608 int <b>x</b>, <i></i>
17609 int <b>xLow</b>, <i></i>
17610 int <b>xHigh</b> <i></i>
17612 </pre>
17613 <dd> Given xLow <= x <= xHigh moves x up and down between the
17614 boundaries. At each step a linear transformation is tried, and, if it
17615 decreases the size of the DD, it is accepted. Finds the best position
17616 and does the required changes. Returns 1 if successful; 0 otherwise.
17619 <dd> <b>Side Effects</b> None
17622 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
17624 <dt><pre>
17625 <A NAME="ddLinearAndSiftingBackward"></A>
17626 static int <I></I>
17627 <B>ddLinearAndSiftingBackward</B>(
17628 DdManager * <b>table</b>, <i></i>
17629 int <b>size</b>, <i></i>
17630 Move * <b>moves</b> <i></i>
17632 </pre>
17633 <dd> Given a set of moves, returns the DD heap to the
17634 position giving the minimum size. In case of ties, returns to the
17635 closest position giving the minimum size. Returns 1 in case of
17636 success; 0 otherwise.
17639 <dd> <b>Side Effects</b> None
17642 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
17644 <dt><pre>
17645 <A NAME="ddLinearAndSiftingDown"></A>
17646 static Move * <I></I>
17647 <B>ddLinearAndSiftingDown</B>(
17648 DdManager * <b>table</b>, <i></i>
17649 int <b>x</b>, <i></i>
17650 int <b>xHigh</b>, <i></i>
17651 Move * <b>prevMoves</b> <i></i>
17653 </pre>
17654 <dd> Sifts a variable down and applies linear
17655 transformations. Moves x down until either it reaches the bound
17656 (xHigh) or the size of the DD heap increases too much. Returns the
17657 set of moves in case of success; NULL if memory is full.
17660 <dd> <b>Side Effects</b> None
17663 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
17665 <dt><pre>
17666 <A NAME="ddLinearAndSiftingUp"></A>
17667 static Move * <I></I>
17668 <B>ddLinearAndSiftingUp</B>(
17669 DdManager * <b>table</b>, <i></i>
17670 int <b>y</b>, <i></i>
17671 int <b>xLow</b>, <i></i>
17672 Move * <b>prevMoves</b> <i></i>
17674 </pre>
17675 <dd> Sifts a variable up and applies linear transformations.
17676 Moves y up until either it reaches the bound (xLow) or the size of
17677 the DD heap increases too much. Returns the set of moves in case of
17678 success; NULL if memory is full.
17681 <dd> <b>Side Effects</b> None
17684 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
17686 <dt><pre>
17687 <A NAME="ddLinearUniqueCompare"></A>
17688 static int <I></I>
17689 <B>ddLinearUniqueCompare</B>(
17690 int * <b>ptrX</b>, <i></i>
17691 int * <b>ptrY</b> <i></i>
17693 </pre>
17694 <dd> Comparison function used by qsort to order the
17695 variables according to the number of keys in the subtables.
17696 Returns the difference in number of keys between the two
17697 variables being compared.
17700 <dd> <b>Side Effects</b> None
17703 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
17705 <dt><pre>
17706 <A NAME="ddMergeGroups"></A>
17707 static void <I></I>
17708 <B>ddMergeGroups</B>(
17709 DdManager * <b>table</b>, <i></i>
17710 MtrNode * <b>treenode</b>, <i></i>
17711 int <b>low</b>, <i></i>
17712 int <b>high</b> <i></i>
17714 </pre>
17715 <dd> Creates a single group from low to high and adjusts the
17716 index field of the tree node.
17719 <dd> <b>Side Effects</b> None
17722 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17724 <dt><pre>
17725 <A NAME="ddNoCheck"></A>
17726 static int <I></I>
17727 <B>ddNoCheck</B>(
17728 DdManager * <b>table</b>, <i></i>
17729 int <b>x</b>, <i></i>
17730 int <b>y</b> <i></i>
17732 </pre>
17733 <dd> Pretends to check two variables for aggregation. Always
17734 returns 0.
17737 <dd> <b>Side Effects</b> None
17740 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17742 <dt><pre>
17743 <A NAME="ddPatchTree"></A>
17744 static void <I></I>
17745 <B>ddPatchTree</B>(
17746 DdManager * <b>dd</b>, <i></i>
17747 MtrNode * <b>treenode</b> <i></i>
17749 </pre>
17750 <dd> Fixes a variable tree after the insertion of new subtables.
17751 After such an insertion, the low fields of the tree below the insertion
17752 point are inconsistent.
17755 <dd> <b>Side Effects</b> None
17758 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
17760 <dt><pre>
17761 <A NAME="ddPermuteWindow3"></A>
17762 static int <I></I>
17763 <B>ddPermuteWindow3</B>(
17764 DdManager * <b>table</b>, <i></i>
17765 int <b>x</b> <i></i>
17767 </pre>
17768 <dd> Tries all the permutations of the three variables between
17769 x and x+2 and retains the best. Assumes that no dead nodes are
17770 present. Returns the index of the best permutation (1-6) in case of
17771 success; 0 otherwise.Assumes that no dead nodes are present. Returns
17772 the index of the best permutation (1-6) in case of success; 0
17773 otherwise.
17776 <dd> <b>Side Effects</b> None
17779 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
17781 <dt><pre>
17782 <A NAME="ddPermuteWindow4"></A>
17783 static int <I></I>
17784 <B>ddPermuteWindow4</B>(
17785 DdManager * <b>table</b>, <i></i>
17786 int <b>w</b> <i></i>
17788 </pre>
17789 <dd> Tries all the permutations of the four variables between
17790 w and w+3 and retains the best. Assumes that no dead nodes are
17791 present. Returns the index of the best permutation (1-24) in case of
17792 success; 0 otherwise.
17795 <dd> <b>Side Effects</b> None
17798 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
17800 <dt><pre>
17801 <A NAME="ddPickArbitraryMinterms"></A>
17802 static int <I></I>
17803 <B>ddPickArbitraryMinterms</B>(
17804 DdManager * <b>dd</b>, <i></i>
17805 DdNode * <b>node</b>, <i></i>
17806 int <b>nvars</b>, <i></i>
17807 int <b>nminterms</b>, <i></i>
17808 char ** <b>string</b> <i></i>
17810 </pre>
17811 <dd> Performs the recursive step of Cudd_bddPickArbitraryMinterms.
17812 Returns 1 if successful; 0 otherwise.
17815 <dd> <b>Side Effects</b> none
17818 <dd> <b>See Also</b> <code><a href="#Cudd_bddPickArbitraryMinterms">Cudd_bddPickArbitraryMinterms</a>
17819 </code>
17821 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17823 <dt><pre>
17824 <A NAME="ddPickRepresentativeCube"></A>
17825 static int <I></I>
17826 <B>ddPickRepresentativeCube</B>(
17827 DdManager * <b>dd</b>, <i></i>
17828 DdNode * <b>node</b>, <i></i>
17829 double * <b>weight</b>, <i></i>
17830 char * <b>string</b> <i></i>
17832 </pre>
17833 <dd> Finds a representative cube of a BDD with the weight of
17834 each variable. From the top variable, if the weight is greater than or
17835 equal to 0.0, choose THEN branch unless the child is the constant 0.
17836 Otherwise, choose ELSE branch unless the child is the constant 0.
17839 <dd> <b>Side Effects</b> Cudd_SubsetWithMaskVars Cudd_bddPickOneCube
17842 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17844 <dt><pre>
17845 <A NAME="ddPrintMintermAux"></A>
17846 static void <I></I>
17847 <B>ddPrintMintermAux</B>(
17848 DdManager * <b>dd</b>, <i>manager</i>
17849 DdNode * <b>node</b>, <i>current node</i>
17850 int * <b>list</b> <i>current recursion path</i>
17852 </pre>
17853 <dd> Performs the recursive step of Cudd_PrintMinterm.
17856 <dd> <b>Side Effects</b> None
17859 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
17861 <dt><pre>
17862 <A NAME="ddRehashZdd"></A>
17863 static void <I></I>
17864 <B>ddRehashZdd</B>(
17865 DdManager * <b>unique</b>, <i></i>
17866 int <b>i</b> <i></i>
17868 </pre>
17869 <dd> Rehashes a ZDD unique subtable.
17872 <dd> <b>Side Effects</b> None
17875 <dd> <b>See Also</b> <code><a href="#cuddRehash">cuddRehash</a>
17876 </code>
17878 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
17880 <dt><pre>
17881 <A NAME="ddReorderChildren"></A>
17882 static int <I></I>
17883 <B>ddReorderChildren</B>(
17884 DdManager * <b>table</b>, <i></i>
17885 MtrNode * <b>treenode</b>, <i></i>
17886 Cudd_ReorderingType <b>method</b> <i></i>
17888 </pre>
17889 <dd> Reorders the children of a group tree node according to
17890 the options. After reordering puts all the variables in the group
17891 and/or its descendents in a single group. This allows hierarchical
17892 reordering. If the variables in the group do not exist yet, simply
17893 does nothing. Returns 1 if successful; 0 otherwise.
17896 <dd> <b>Side Effects</b> None
17899 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17901 <dt><pre>
17902 <A NAME="ddReorderPostprocess"></A>
17903 static int <I></I>
17904 <B>ddReorderPostprocess</B>(
17905 DdManager * <b>table</b> <i></i>
17907 </pre>
17908 <dd> Cleans up at the end of reordering.
17911 <dd> <b>Side Effects</b> None
17914 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
17916 <dt><pre>
17917 <A NAME="ddReorderPreprocess"></A>
17918 static int <I></I>
17919 <B>ddReorderPreprocess</B>(
17920 DdManager * <b>table</b> <i></i>
17922 </pre>
17923 <dd> Prepares the DD heap for dynamic reordering. Does
17924 garbage collection, to guarantee that there are no dead nodes;
17925 clears the cache, which is invalidated by dynamic reordering; initializes
17926 the number of isolated projection functions; and initializes the
17927 interaction matrix. Returns 1 in case of success; 0 otherwise.
17930 <dd> <b>Side Effects</b> None
17933 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
17935 <dt><pre>
17936 <A NAME="ddReportRefMess"></A>
17937 static void <I></I>
17938 <B>ddReportRefMess</B>(
17939 DdManager * <b>unique</b>, <i>manager</i>
17940 int <b>i</b>, <i>table in which the problem occurred</i>
17941 const char * <b>caller</b> <i>procedure that detected the problem</i>
17943 </pre>
17944 <dd> Reports problem in garbage collection.
17947 <dd> <b>Side Effects</b> None
17950 <dd> <b>See Also</b> <code><a href="#cuddGarbageCollect">cuddGarbageCollect</a>
17951 <a href="#cuddGarbageCollectZdd">cuddGarbageCollectZdd</a>
17952 </code>
17954 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
17956 <dt><pre>
17957 <A NAME="ddResetVarHandled"></A>
17958 static int <I></I>
17959 <B>ddResetVarHandled</B>(
17960 DdManager * <b>dd</b>, <i></i>
17961 int <b>index</b> <i></i>
17963 </pre>
17964 <dd> Resets a variable to be processed. This function is used
17965 for lazy sifting.
17968 <dd> <b>Side Effects</b> none
17971 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
17973 <dt><pre>
17974 <A NAME="ddResizeTable"></A>
17975 static int <I></I>
17976 <B>ddResizeTable</B>(
17977 DdManager * <b>unique</b>, <i></i>
17978 int <b>index</b> <i></i>
17980 </pre>
17981 <dd> Increases the number of subtables in a unique table so
17982 that it meets or exceeds index. Returns 1 if successful; 0 otherwise.
17985 <dd> <b>Side Effects</b> None
17988 <dd> <b>See Also</b> <code><a href="#cuddResizeTableZdd">cuddResizeTableZdd</a>
17989 </code>
17991 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>
17993 <dt><pre>
17994 <A NAME="ddSecDiffCheck"></A>
17995 static int <I></I>
17996 <B>ddSecDiffCheck</B>(
17997 DdManager * <b>table</b>, <i></i>
17998 int <b>x</b>, <i></i>
17999 int <b>y</b> <i></i>
18001 </pre>
18002 <dd> Checks two variables for aggregation. The check is based
18003 on the second difference of the number of nodes as a function of the
18004 layer. If the second difference is lower than a given threshold
18005 (typically negative) then the two variables should be aggregated.
18006 Returns 1 if the two variables pass the test; 0 otherwise.
18009 <dd> <b>Side Effects</b> None
18012 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
18014 <dt><pre>
18015 <A NAME="ddSetVarHandled"></A>
18016 static int <I></I>
18017 <B>ddSetVarHandled</B>(
18018 DdManager * <b>dd</b>, <i></i>
18019 int <b>index</b> <i></i>
18021 </pre>
18022 <dd> Sets a variable to already handled. This function is used
18023 for lazy sifting.
18026 <dd> <b>Side Effects</b> none
18029 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
18031 <dt><pre>
18032 <A NAME="ddShuffle"></A>
18033 static int <I></I>
18034 <B>ddShuffle</B>(
18035 DdManager * <b>table</b>, <i></i>
18036 DdHalfWord * <b>permutation</b>, <i></i>
18037 int <b>lower</b>, <i></i>
18038 int <b>upper</b> <i></i>
18040 </pre>
18041 <dd> Reorders variables according to a given permutation.
18042 The i-th permutation array contains the index of the variable that
18043 should be brought to the i-th level. ddShuffle assumes that no
18044 dead nodes are present and that the interaction matrix is properly
18045 initialized. The reordering is achieved by a series of upward sifts.
18046 Returns 1 if successful; 0 otherwise.
18049 <dd> <b>Side Effects</b> None
18052 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
18054 <dt><pre>
18055 <A NAME="ddShuffle"></A>
18056 static int <I></I>
18057 <B>ddShuffle</B>(
18058 DdManager * <b>table</b>, <i></i>
18059 int * <b>permutation</b> <i></i>
18061 </pre>
18062 <dd> Reorders variables according to a given permutation.
18063 The i-th permutation array contains the index of the variable that
18064 should be brought to the i-th level. ddShuffle assumes that no
18065 dead nodes are present and that the interaction matrix is properly
18066 initialized. The reordering is achieved by a series of upward sifts.
18067 Returns 1 if successful; 0 otherwise.
18070 <dd> <b>Side Effects</b> None
18073 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18075 <dt><pre>
18076 <A NAME="ddSiftUp"></A>
18077 static int <I></I>
18078 <B>ddSiftUp</B>(
18079 DdManager * <b>table</b>, <i></i>
18080 int <b>x</b>, <i></i>
18081 int <b>xLow</b> <i></i>
18083 </pre>
18084 <dd> Takes a variable from position x and sifts it up to
18085 position xLow; xLow should be less than or equal to x.
18086 Returns 1 if successful; 0 otherwise
18089 <dd> <b>Side Effects</b> None
18092 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
18094 <dt><pre>
18095 <A NAME="ddSiftUp"></A>
18096 static int <I></I>
18097 <B>ddSiftUp</B>(
18098 DdManager * <b>table</b>, <i></i>
18099 int <b>x</b>, <i></i>
18100 int <b>xLow</b> <i></i>
18102 </pre>
18103 <dd> Takes a variable from position x and sifts it up to
18104 position xLow; xLow should be less than or equal to x.
18105 Returns 1 if successful; 0 otherwise
18108 <dd> <b>Side Effects</b> None
18111 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18113 <dt><pre>
18114 <A NAME="ddSiftingAux"></A>
18115 static int <I></I>
18116 <B>ddSiftingAux</B>(
18117 DdManager * <b>table</b>, <i></i>
18118 int <b>x</b>, <i></i>
18119 int <b>xLow</b>, <i></i>
18120 int <b>xHigh</b> <i></i>
18122 </pre>
18123 <dd> Given xLow <= x <= xHigh moves x up and down between the
18124 boundaries. Finds the best position and does the required changes.
18125 Returns 1 if successful; 0 otherwise.
18128 <dd> <b>Side Effects</b> None
18131 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18133 <dt><pre>
18134 <A NAME="ddSiftingBackward"></A>
18135 static int <I></I>
18136 <B>ddSiftingBackward</B>(
18137 DdManager * <b>table</b>, <i></i>
18138 int <b>size</b>, <i></i>
18139 Move * <b>moves</b> <i></i>
18141 </pre>
18142 <dd> Given a set of moves, returns the DD heap to the
18143 position giving the minimum size. In case of ties, returns to the
18144 closest position giving the minimum size. Returns 1 in case of
18145 success; 0 otherwise.
18148 <dd> <b>Side Effects</b> None
18151 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18153 <dt><pre>
18154 <A NAME="ddSiftingDown"></A>
18155 static Move * <I></I>
18156 <B>ddSiftingDown</B>(
18157 DdManager * <b>table</b>, <i></i>
18158 int <b>x</b>, <i></i>
18159 int <b>xHigh</b> <i></i>
18161 </pre>
18162 <dd> Sifts a variable down. Moves x down until either it
18163 reaches the bound (xHigh) or the size of the DD heap increases too
18164 much. Returns the set of moves in case of success; NULL if memory is
18165 full.
18168 <dd> <b>Side Effects</b> None
18171 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18173 <dt><pre>
18174 <A NAME="ddSiftingUp"></A>
18175 static Move * <I></I>
18176 <B>ddSiftingUp</B>(
18177 DdManager * <b>table</b>, <i></i>
18178 int <b>y</b>, <i></i>
18179 int <b>xLow</b> <i></i>
18181 </pre>
18182 <dd> Sifts a variable up. Moves y up until either it reaches
18183 the bound (xLow) or the size of the DD heap increases too much.
18184 Returns the set of moves in case of success; NULL if memory is full.
18187 <dd> <b>Side Effects</b> None
18190 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18192 <dt><pre>
18193 <A NAME="ddSuppInteract"></A>
18194 static void <I></I>
18195 <B>ddSuppInteract</B>(
18196 DdNode * <b>f</b>, <i></i>
18197 int * <b>support</b> <i></i>
18199 </pre>
18200 <dd> Performs a DFS from f. Uses the LSB of the then pointer
18201 as visited flag.
18204 <dd> <b>Side Effects</b> Accumulates in support the variables on which f depends.
18207 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
18209 <dt><pre>
18210 <A NAME="ddSupportStep"></A>
18211 static void <I></I>
18212 <B>ddSupportStep</B>(
18213 DdNode * <b>f</b>, <i></i>
18214 int * <b>support</b> <i></i>
18216 </pre>
18217 <dd> Performs the recursive step of Cudd_Support. Performs a
18218 DFS from f. The support is accumulated in supp as a side effect. Uses
18219 the LSB of the then pointer as visited flag.
18222 <dd> <b>Side Effects</b> None
18225 <dd> <b>See Also</b> <code><a href="#ddClearFlag">ddClearFlag</a>
18226 </code>
18228 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
18230 <dt><pre>
18231 <A NAME="ddSwapAny"></A>
18232 static Move * <I></I>
18233 <B>ddSwapAny</B>(
18234 DdManager * <b>table</b>, <i></i>
18235 int <b>x</b>, <i></i>
18236 int <b>y</b> <i></i>
18238 </pre>
18239 <dd> Swaps any two variables. Returns the set of moves.
18242 <dd> <b>Side Effects</b> None
18245 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18247 <dt><pre>
18248 <A NAME="ddSymmGroupMoveBackward"></A>
18249 static int <I></I>
18250 <B>ddSymmGroupMoveBackward</B>(
18251 DdManager * <b>table</b>, <i></i>
18252 int <b>x</b>, <i></i>
18253 int <b>y</b> <i></i>
18255 </pre>
18256 <dd> Undoes the swap of two groups. x is assumed to be the
18257 bottom variable of the first group. y is assumed to be the top
18258 variable of the second group. Returns the number of keys in the table
18259 if successful; 0 otherwise.
18262 <dd> <b>Side Effects</b> None
18265 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18267 <dt><pre>
18268 <A NAME="ddSymmGroupMove"></A>
18269 static int <I></I>
18270 <B>ddSymmGroupMove</B>(
18271 DdManager * <b>table</b>, <i></i>
18272 int <b>x</b>, <i></i>
18273 int <b>y</b>, <i></i>
18274 Move ** <b>moves</b> <i></i>
18276 </pre>
18277 <dd> Swaps two groups. x is assumed to be the bottom variable
18278 of the first group. y is assumed to be the top variable of the second
18279 group. Updates the list of moves. Returns the number of keys in the
18280 table if successful; 0 otherwise.
18283 <dd> <b>Side Effects</b> None
18286 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18288 <dt><pre>
18289 <A NAME="ddSymmSiftingAux"></A>
18290 static int <I></I>
18291 <B>ddSymmSiftingAux</B>(
18292 DdManager * <b>table</b>, <i></i>
18293 int <b>x</b>, <i></i>
18294 int <b>xLow</b>, <i></i>
18295 int <b>xHigh</b> <i></i>
18297 </pre>
18298 <dd> Given xLow <= x <= xHigh moves x up and down between the
18299 boundaries. Finds the best position and does the required changes.
18300 Assumes that x is not part of a symmetry group. Returns 1 if
18301 successful; 0 otherwise.
18304 <dd> <b>Side Effects</b> None
18307 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18309 <dt><pre>
18310 <A NAME="ddSymmSiftingBackward"></A>
18311 static int <I></I>
18312 <B>ddSymmSiftingBackward</B>(
18313 DdManager * <b>table</b>, <i></i>
18314 Move * <b>moves</b>, <i></i>
18315 int <b>size</b> <i></i>
18317 </pre>
18318 <dd> Given a set of moves, returns the DD heap to the
18319 position giving the minimum size. In case of ties, returns to the
18320 closest position giving the minimum size. Returns 1 in case of
18321 success; 0 otherwise.
18324 <dd> <b>Side Effects</b> None
18327 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18329 <dt><pre>
18330 <A NAME="ddSymmSiftingConvAux"></A>
18331 static int <I></I>
18332 <B>ddSymmSiftingConvAux</B>(
18333 DdManager * <b>table</b>, <i></i>
18334 int <b>x</b>, <i></i>
18335 int <b>xLow</b>, <i></i>
18336 int <b>xHigh</b> <i></i>
18338 </pre>
18339 <dd> Given xLow <= x <= xHigh moves x up and down between the
18340 boundaries. Finds the best position and does the required changes.
18341 Assumes that x is either an isolated variable, or it is the bottom of
18342 a symmetry group. All symmetries may not have been found, because of
18343 exceeded growth limit. Returns 1 if successful; 0 otherwise.
18346 <dd> <b>Side Effects</b> None
18349 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18351 <dt><pre>
18352 <A NAME="ddSymmSiftingDown"></A>
18353 static Move * <I></I>
18354 <B>ddSymmSiftingDown</B>(
18355 DdManager * <b>table</b>, <i></i>
18356 int <b>x</b>, <i></i>
18357 int <b>xHigh</b> <i></i>
18359 </pre>
18360 <dd> Moves x down until either it reaches the bound (xHigh)
18361 or the size of the DD heap increases too much. Assumes that x is the
18362 bottom of a symmetry group. Checks x for symmetry to the adjacent
18363 variables. If symmetry is found, the symmetry group of x is merged
18364 with the symmetry group of the other variable. Returns the set of
18365 moves in case of success; MV_OOM if memory is full.
18368 <dd> <b>Side Effects</b> None
18371 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18373 <dt><pre>
18374 <A NAME="ddSymmSiftingUp"></A>
18375 static Move * <I></I>
18376 <B>ddSymmSiftingUp</B>(
18377 DdManager * <b>table</b>, <i></i>
18378 int <b>y</b>, <i></i>
18379 int <b>xLow</b> <i></i>
18381 </pre>
18382 <dd> Moves x up until either it reaches the bound (xLow) or
18383 the size of the DD heap increases too much. Assumes that x is the top
18384 of a symmetry group. Checks x for symmetry to the adjacent
18385 variables. If symmetry is found, the symmetry group of x is merged
18386 with the symmetry group of the other variable. Returns the set of
18387 moves in case of success; MV_OOM if memory is full.
18390 <dd> <b>Side Effects</b> None
18393 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18395 <dt><pre>
18396 <A NAME="ddSymmSummary"></A>
18397 static void <I></I>
18398 <B>ddSymmSummary</B>(
18399 DdManager * <b>table</b>, <i></i>
18400 int <b>lower</b>, <i></i>
18401 int <b>upper</b>, <i></i>
18402 int * <b>symvars</b>, <i></i>
18403 int * <b>symgroups</b> <i></i>
18405 </pre>
18406 <dd> Counts numbers of symmetric variables and symmetry
18407 groups.
18410 <dd> <b>Side Effects</b> None
18413 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18415 <dt><pre>
18416 <A NAME="ddSymmUniqueCompare"></A>
18417 static int <I></I>
18418 <B>ddSymmUniqueCompare</B>(
18419 int * <b>ptrX</b>, <i></i>
18420 int * <b>ptrY</b> <i></i>
18422 </pre>
18423 <dd> Comparison function used by qsort to order the variables
18424 according to the number of keys in the subtables.
18425 Returns the difference in number of keys between the two
18426 variables being compared.
18429 <dd> <b>Side Effects</b> None
18432 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>
18434 <dt><pre>
18435 <A NAME="ddTreeSiftingAux"></A>
18436 static int <I></I>
18437 <B>ddTreeSiftingAux</B>(
18438 DdManager * <b>table</b>, <i></i>
18439 MtrNode * <b>treenode</b>, <i></i>
18440 Cudd_ReorderingType <b>method</b> <i></i>
18442 </pre>
18443 <dd> Recursively visits the group tree and reorders each
18444 group in postorder fashion. Returns 1 if successful; 0 otherwise.
18447 <dd> <b>Side Effects</b> None
18450 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
18452 <dt><pre>
18453 <A NAME="ddUndoMoves"></A>
18454 static Move* <I></I>
18455 <B>ddUndoMoves</B>(
18456 DdManager * <b>table</b>, <i></i>
18457 Move * <b>moves</b> <i></i>
18459 </pre>
18460 <dd> Given a set of moves, returns the DD heap to the
18461 order in effect before the moves. Returns 1 in case of success;
18462 0 otherwise.
18465 <dd> <b>Side Effects</b> None
18468 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>
18470 <dt><pre>
18471 <A NAME="ddUniqueCompareGroup"></A>
18472 static int <I></I>
18473 <B>ddUniqueCompareGroup</B>(
18474 int * <b>ptrX</b>, <i></i>
18475 int * <b>ptrY</b> <i></i>
18477 </pre>
18478 <dd> Comparison function used by qsort to order the variables
18479 according to the number of keys in the subtables. Returns the
18480 difference in number of keys between the two variables being
18481 compared.
18484 <dd> <b>Side Effects</b> None
18487 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
18489 <dt><pre>
18490 <A NAME="ddUniqueCompare"></A>
18491 static int <I></I>
18492 <B>ddUniqueCompare</B>(
18493 int * <b>ptrX</b>, <i></i>
18494 int * <b>ptrY</b> <i></i>
18496 </pre>
18497 <dd> Comparison function used by qsort to order the
18498 variables according to the number of keys in the subtables.
18499 Returns the difference in number of keys between the two
18500 variables being compared.
18503 <dd> <b>Side Effects</b> None
18506 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18508 <dt><pre>
18509 <A NAME="ddUpdateInteract"></A>
18510 static void <I></I>
18511 <B>ddUpdateInteract</B>(
18512 DdManager * <b>table</b>, <i></i>
18513 int * <b>support</b> <i></i>
18515 </pre>
18516 <dd> If support[i
18519 <dd> <b>Side Effects</b> None
18522 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>
18524 <dt><pre>
18525 <A NAME="ddUpdateMtrTree"></A>
18526 static int <I></I>
18527 <B>ddUpdateMtrTree</B>(
18528 DdManager * <b>table</b>, <i></i>
18529 MtrNode * <b>treenode</b>, <i></i>
18530 int * <b>perm</b>, <i></i>
18531 int * <b>invperm</b> <i></i>
18533 </pre>
18534 <dd> Updates the BDD variable group tree before a shuffle.
18535 Returns 1 if successful; 0 otherwise.
18538 <dd> <b>Side Effects</b> Changes the BDD variable group tree.
18541 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>
18543 <dt><pre>
18544 <A NAME="ddVarGroupCheck"></A>
18545 static int <I></I>
18546 <B>ddVarGroupCheck</B>(
18547 DdManager * <b>table</b>, <i></i>
18548 int <b>x</b>, <i></i>
18549 int <b>y</b> <i></i>
18551 </pre>
18552 <dd> Checks for grouping of x and y. Returns 1 in
18553 case of grouping; 0 otherwise. This function is used for lazy sifting.
18556 <dd> <b>Side Effects</b> None
18559 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>
18561 <dt><pre>
18562 <A NAME="ddWindow2"></A>
18563 static int <I></I>
18564 <B>ddWindow2</B>(
18565 DdManager * <b>table</b>, <i></i>
18566 int <b>low</b>, <i></i>
18567 int <b>high</b> <i></i>
18569 </pre>
18570 <dd> Reorders by applying a sliding window of width 2.
18571 Tries both permutations of the variables in a window
18572 that slides from low to high. Assumes that no dead nodes are
18573 present. Returns 1 in case of success; 0 otherwise.
18576 <dd> <b>Side Effects</b> None
18579 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18581 <dt><pre>
18582 <A NAME="ddWindow3"></A>
18583 static int <I></I>
18584 <B>ddWindow3</B>(
18585 DdManager * <b>table</b>, <i></i>
18586 int <b>low</b>, <i></i>
18587 int <b>high</b> <i></i>
18589 </pre>
18590 <dd> Reorders by applying a sliding window of width 3.
18591 Tries all possible permutations to the variables in a
18592 window that slides from low to high. Assumes that no dead nodes are
18593 present. Returns 1 in case of success; 0 otherwise.
18596 <dd> <b>Side Effects</b> None
18599 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18601 <dt><pre>
18602 <A NAME="ddWindow4"></A>
18603 static int <I></I>
18604 <B>ddWindow4</B>(
18605 DdManager * <b>table</b>, <i></i>
18606 int <b>low</b>, <i></i>
18607 int <b>high</b> <i></i>
18609 </pre>
18610 <dd> Reorders by applying a sliding window of width 4.
18611 Tries all possible permutations to the variables in a
18612 window that slides from low to high. Assumes that no dead nodes are
18613 present. Returns 1 in case of success; 0 otherwise.
18616 <dd> <b>Side Effects</b> None
18619 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18621 <dt><pre>
18622 <A NAME="ddWindowConv2"></A>
18623 static int <I></I>
18624 <B>ddWindowConv2</B>(
18625 DdManager * <b>table</b>, <i></i>
18626 int <b>low</b>, <i></i>
18627 int <b>high</b> <i></i>
18629 </pre>
18630 <dd> Reorders by repeatedly applying a sliding window of width
18631 2. Tries both permutations of the variables in a window
18632 that slides from low to high. Assumes that no dead nodes are
18633 present. Uses an event-driven approach to determine convergence.
18634 Returns 1 in case of success; 0 otherwise.
18637 <dd> <b>Side Effects</b> None
18640 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18642 <dt><pre>
18643 <A NAME="ddWindowConv3"></A>
18644 static int <I></I>
18645 <B>ddWindowConv3</B>(
18646 DdManager * <b>table</b>, <i></i>
18647 int <b>low</b>, <i></i>
18648 int <b>high</b> <i></i>
18650 </pre>
18651 <dd> Reorders by repeatedly applying a sliding window of width
18652 3. Tries all possible permutations to the variables in a
18653 window that slides from low to high. Assumes that no dead nodes are
18654 present. Uses an event-driven approach to determine convergence.
18655 Returns 1 in case of success; 0 otherwise.
18658 <dd> <b>Side Effects</b> None
18661 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18663 <dt><pre>
18664 <A NAME="ddWindowConv4"></A>
18665 static int <I></I>
18666 <B>ddWindowConv4</B>(
18667 DdManager * <b>table</b>, <i></i>
18668 int <b>low</b>, <i></i>
18669 int <b>high</b> <i></i>
18671 </pre>
18672 <dd> Reorders by repeatedly applying a sliding window of width
18673 4. Tries all possible permutations to the variables in a
18674 window that slides from low to high. Assumes that no dead nodes are
18675 present. Uses an event-driven approach to determine convergence.
18676 Returns 1 in case of success; 0 otherwise.
18679 <dd> <b>Side Effects</b> None
18682 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>
18684 <dt><pre>
18685 <A NAME="debugCheckParent"></A>
18686 static void <I></I>
18687 <B>debugCheckParent</B>(
18688 DdManager * <b>table</b>, <i></i>
18689 DdNode * <b>node</b> <i></i>
18691 </pre>
18692 <dd> Searches all the subtables above node. Very expensive.
18693 The same check is now implemented more efficiently in ddDebugCheck.
18696 <dd> <b>Side Effects</b> None
18699 <dd> <b>See Also</b> <code><a href="#debugFindParent">debugFindParent</a>
18700 </code>
18702 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
18704 <dt><pre>
18705 <A NAME="debugFindParent"></A>
18706 static void <I></I>
18707 <B>debugFindParent</B>(
18708 DdManager * <b>table</b>, <i></i>
18709 DdNode * <b>node</b> <i></i>
18711 </pre>
18712 <dd> Searches the subtables above node for its parents.
18715 <dd> <b>Side Effects</b> None
18718 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>
18720 <dt><pre>
18721 <A NAME="dp2"></A>
18722 static int <I></I>
18723 <B>dp2</B>(
18724 DdManager * <b>dd</b>, <i></i>
18725 DdNode * <b>f</b>, <i></i>
18726 st_table * <b>t</b> <i></i>
18728 </pre>
18729 <dd> Performs the recursive step of cuddP. Returns 1 in case
18730 of success; 0 otherwise.
18733 <dd> <b>Side Effects</b> None
18736 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>
18738 <dt><pre>
18739 <A NAME="emptyClauseSet"></A>
18740 static DdTlcInfo * <I></I>
18741 <B>emptyClauseSet</B>(
18742 <b></b> <i></i>
18744 </pre>
18745 <dd> Returns a pointer to an empty set of clauses if
18746 successful; NULL otherwise. No bit vector for the phases is
18747 allocated.
18750 <dd> <b>Side Effects</b> None
18753 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
18755 <dt><pre>
18756 <A NAME="equalp"></A>
18757 static int <I></I>
18758 <B>equalp</B>(
18759 DdHalfWord <b>var1a</b>, <i></i>
18760 short <b>phase1a</b>, <i></i>
18761 DdHalfWord <b>var1b</b>, <i></i>
18762 short <b>phase1b</b>, <i></i>
18763 DdHalfWord <b>var2a</b>, <i></i>
18764 short <b>phase2a</b>, <i></i>
18765 DdHalfWord <b>var2b</b>, <i></i>
18766 short <b>phase2b</b> <i></i>
18768 </pre>
18769 <dd> Returns true iff the two arguments are identical
18770 clauses. Since literals are sorted, we only need to compare
18771 literals in the same position.
18774 <dd> <b>Side Effects</b> None
18777 <dd> <b>See Also</b> <code><a href="#beforep">beforep</a>
18778 </code>
18780 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
18782 <dt><pre>
18783 <A NAME="find_average_fitness"></A>
18784 static double <I></I>
18785 <B>find_average_fitness</B>(
18786 <b></b> <i></i>
18788 </pre>
18789 <dd> Returns the average fitness of the population.
18792 <dd> <b>Side Effects</b> None
18795 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
18797 <dt><pre>
18798 <A NAME="find_best"></A>
18799 static int <I></I>
18800 <B>find_best</B>(
18801 <b></b> <i></i>
18803 </pre>
18804 <dd> Returns the index of the fittest individual.
18807 <dd> <b>Side Effects</b> None
18810 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
18812 <dt><pre>
18813 <A NAME="fixVarTree"></A>
18814 static void <I></I>
18815 <B>fixVarTree</B>(
18816 MtrNode * <b>treenode</b>, <i></i>
18817 int * <b>perm</b>, <i></i>
18818 int <b>size</b> <i></i>
18820 </pre>
18821 <dd> Fixes a variable group tree.
18824 <dd> <b>Side Effects</b> Changes the variable group tree.
18827 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>
18829 <dt><pre>
18830 <A NAME="freeMatrix"></A>
18831 static void <I></I>
18832 <B>freeMatrix</B>(
18833 DdHalfWord ** <b>matrix</b> <i></i>
18835 </pre>
18836 <dd> Frees a two-dimensional matrix allocated by getMatrix.
18839 <dd> <b>Side Effects</b> None
18842 <dd> <b>See Also</b> <code><a href="#getMatrix">getMatrix</a>
18843 </code>
18845 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
18847 <dt><pre>
18848 <A NAME="freePathPair"></A>
18849 static enum st_retval <I></I>
18850 <B>freePathPair</B>(
18851 char * <b>key</b>, <i></i>
18852 char * <b>value</b>, <i></i>
18853 char * <b>arg</b> <i></i>
18855 </pre>
18856 <dd> Frees the entries of the visited symbol table. Returns
18857 ST_CONTINUE.
18860 <dd> <b>Side Effects</b> None
18863 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
18865 <dt><pre>
18866 <A NAME="gatherInfoAux"></A>
18867 static NodeData * <I></I>
18868 <B>gatherInfoAux</B>(
18869 DdNode * <b>node</b>, <i>function to analyze</i>
18870 ApproxInfo * <b>info</b>, <i>info on BDD</i>
18871 int <b>parity</b> <i>gather parity information</i>
18873 </pre>
18874 <dd> Recursively counts minterms and computes reference
18875 counts of each node in the BDD. Similar to the cuddCountMintermAux
18876 which recursively counts the number of minterms for the dag rooted
18877 at each node in terms of the total number of variables (max). It assumes
18878 that the node pointer passed to it is regular and it maintains the
18879 invariant.
18882 <dd> <b>Side Effects</b> None
18885 <dd> <b>See Also</b> <code><a href="#gatherInfo">gatherInfo</a>
18886 </code>
18888 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
18890 <dt><pre>
18891 <A NAME="gatherInfo"></A>
18892 static ApproxInfo * <I></I>
18893 <B>gatherInfo</B>(
18894 DdManager * <b>dd</b>, <i>manager</i>
18895 DdNode * <b>node</b>, <i>function to be analyzed</i>
18896 int <b>numVars</b>, <i>number of variables node depends on</i>
18897 int <b>parity</b> <i>gather parity information</i>
18899 </pre>
18900 <dd> Counts minterms and computes reference counts of each
18901 node in the BDD . The minterm count is separately computed for the
18902 node and its complement. This is to avoid cancellation
18903 errors. Returns a pointer to the data structure holding the
18904 information gathered if successful; NULL otherwise.
18907 <dd> <b>Side Effects</b> None
18910 <dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
18911 <a href="#gatherInfoAux">gatherInfoAux</a>
18912 </code>
18914 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
18916 <dt><pre>
18917 <A NAME="gcd"></A>
18918 static int <I></I>
18919 <B>gcd</B>(
18920 int <b>x</b>, <i></i>
18921 int <b>y</b> <i></i>
18923 </pre>
18924 <dd> Returns the gcd of two integers. Uses the binary GCD
18925 algorithm described in Cormen, Leiserson, and Rivest.
18928 <dd> <b>Side Effects</b> None
18931 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
18933 <dt><pre>
18934 <A NAME="getCube"></A>
18935 static DdNode * <I></I>
18936 <B>getCube</B>(
18937 DdManager * <b>manager</b>, <i></i>
18938 st_table * <b>visited</b>, <i></i>
18939 DdNode * <b>f</b>, <i></i>
18940 int <b>cost</b> <i></i>
18942 </pre>
18943 <dd> Build a BDD for a largest cube of f.
18944 Given the minimum length from the root, and the minimum
18945 lengths for each node (in visited), apply triangulation at each node.
18946 Of the two children of each node on a shortest path, at least one is
18947 on a shortest path. In case of ties the procedure chooses the THEN
18948 children.
18949 Returns a pointer to the cube BDD representing the path if
18950 successful; NULL otherwise.
18953 <dd> <b>Side Effects</b> None
18956 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
18958 <dt><pre>
18959 <A NAME="getLargest"></A>
18960 static cuddPathPair <I></I>
18961 <B>getLargest</B>(
18962 DdNode * <b>root</b>, <i></i>
18963 st_table * <b>visited</b> <i></i>
18965 </pre>
18966 <dd> Finds the size of the largest cube(s) in a DD.
18967 This problem is translated into finding the shortest paths from a node
18968 when both THEN and ELSE arcs have unit lengths.
18969 Uses a local symbol table to store the lengths for each
18970 node. Only the lengths for the regular nodes are entered in the table,
18971 because those for the complement nodes are simply obtained by swapping
18972 the two lenghts.
18973 Returns a pair of lengths: the length of the shortest path to 1;
18974 and the length of the shortest path to 0. This is done so as to take
18975 complement arcs into account.
18978 <dd> <b>Side Effects</b> none
18981 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
18983 <dt><pre>
18984 <A NAME="getLevelKeys"></A>
18985 static int <I></I>
18986 <B>getLevelKeys</B>(
18987 DdManager * <b>table</b>, <i></i>
18988 int <b>l</b> <i></i>
18990 </pre>
18991 <dd> Returns the number of nodes at one level of a unique table.
18992 The projection function, if isolated, is not counted.
18995 <dd> <b>Side Effects</b> None
18998 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19000 <dt><pre>
19001 <A NAME="getMatrix"></A>
19002 static DdHalfWord ** <I></I>
19003 <B>getMatrix</B>(
19004 int <b>rows</b>, <i>number of rows</i>
19005 int <b>cols</b> <i>number of columns</i>
19007 </pre>
19008 <dd> Allocates a two-dimensional matrix of ints.
19009 Returns the pointer to the matrix if successful; NULL otherwise.
19012 <dd> <b>Side Effects</b> None
19015 <dd> <b>See Also</b> <code><a href="#freeMatrix">freeMatrix</a>
19016 </code>
19018 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19020 <dt><pre>
19021 <A NAME="getMaxBinomial"></A>
19022 static int <I></I>
19023 <B>getMaxBinomial</B>(
19024 int <b>n</b> <i></i>
19026 </pre>
19027 <dd> Computes the maximum value of (n choose k) for a given
19028 n. The maximum value occurs for k = n/2 when n is even, or k =
19029 (n-1)/2 when n is odd. The algorithm used in this procedure avoids
19030 intermediate overflow problems. It is based on the identity
19031 <pre>
19032 binomial(n,k) = n/k * binomial(n-1,k-1).
19033 </pre>
19034 Returns the computed value if successful; -1 if out of range.
19037 <dd> <b>Side Effects</b> None
19040 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19042 <dt><pre>
19043 <A NAME="getPath"></A>
19044 static DdNode * <I></I>
19045 <B>getPath</B>(
19046 DdManager * <b>manager</b>, <i></i>
19047 st_table * <b>visited</b>, <i></i>
19048 DdNode * <b>f</b>, <i></i>
19049 int * <b>weight</b>, <i></i>
19050 int <b>cost</b> <i></i>
19052 </pre>
19053 <dd> Build a BDD for a shortest path of f.
19054 Given the minimum length from the root, and the minimum
19055 lengths for each node (in visited), apply triangulation at each node.
19056 Of the two children of each node on a shortest path, at least one is
19057 on a shortest path. In case of ties the procedure chooses the THEN
19058 children.
19059 Returns a pointer to the cube BDD representing the path if
19060 successful; NULL otherwise.
19063 <dd> <b>Side Effects</b> None
19066 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
19068 <dt><pre>
19069 <A NAME="getShortest"></A>
19070 static cuddPathPair <I></I>
19071 <B>getShortest</B>(
19072 DdNode * <b>root</b>, <i></i>
19073 int * <b>cost</b>, <i></i>
19074 int * <b>support</b>, <i></i>
19075 st_table * <b>visited</b> <i></i>
19077 </pre>
19078 <dd> Finds the length of the shortest path(s) in a DD.
19079 Uses a local symbol table to store the lengths for each
19080 node. Only the lengths for the regular nodes are entered in the table,
19081 because those for the complement nodes are simply obtained by swapping
19082 the two lenghts.
19083 Returns a pair of lengths: the length of the shortest path to 1;
19084 and the length of the shortest path to 0. This is done so as to take
19085 complement arcs into account.
19088 <dd> <b>Side Effects</b> Accumulates the support of the DD in support.
19091 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>
19093 <dt><pre>
19094 <A NAME="hashDelete"></A>
19095 static void <I></I>
19096 <B>hashDelete</B>(
19097 DdLevelQueue * <b>queue</b>, <i></i>
19098 DdQueueItem * <b>item</b> <i></i>
19100 </pre>
19101 <dd> Removes an item from the hash table of a level queue.
19102 Nothing is done if the item is not in the table.
19105 <dd> <b>Side Effects</b> None
19108 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
19109 <a href="#hashInsert">hashInsert</a>
19110 </code>
19112 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
19114 <dt><pre>
19115 <A NAME="hashInsert"></A>
19116 static int <I></I>
19117 <B>hashInsert</B>(
19118 DdLevelQueue * <b>queue</b>, <i></i>
19119 DdQueueItem * <b>item</b> <i></i>
19121 </pre>
19122 <dd> Inserts an item in the hash table of a level queue. Returns
19123 1 if successful; 0 otherwise. No check is performed to see if an item with
19124 the same key is already in the hash table.
19127 <dd> <b>Side Effects</b> None
19130 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
19131 </code>
19133 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
19135 <dt><pre>
19136 <A NAME="hashLookup"></A>
19137 static DdQueueItem * <I></I>
19138 <B>hashLookup</B>(
19139 DdLevelQueue * <b>queue</b>, <i></i>
19140 void * <b>key</b> <i></i>
19142 </pre>
19143 <dd> Looks up a key in the hash table of a level queue. Returns
19144 a pointer to the item with the given key if the key is found; NULL
19145 otherwise.
19148 <dd> <b>Side Effects</b> None
19151 <dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
19152 <a href="#hashInsert">hashInsert</a>
19153 </code>
19155 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
19157 <dt><pre>
19158 <A NAME="hashResize"></A>
19159 static int <I></I>
19160 <B>hashResize</B>(
19161 DdLevelQueue * <b>queue</b> <i></i>
19163 </pre>
19164 <dd> Resizes the hash table of a level queue. Returns 1 if
19165 successful; 0 otherwise.
19168 <dd> <b>Side Effects</b> None
19171 <dd> <b>See Also</b> <code><a href="#hashInsert">hashInsert</a>
19172 </code>
19174 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
19176 <dt><pre>
19177 <A NAME="impliedp"></A>
19178 static int <I></I>
19179 <B>impliedp</B>(
19180 DdHalfWord <b>var1</b>, <i></i>
19181 short <b>phase1</b>, <i></i>
19182 DdHalfWord <b>var2</b>, <i></i>
19183 short <b>phase2</b>, <i></i>
19184 BitVector * <b>olv</b>, <i></i>
19185 BitVector * <b>olp</b> <i></i>
19187 </pre>
19188 <dd> Returns true iff either literal of a clause is in a set
19189 of literals. The first four arguments specify the clause. The
19190 remaining two arguments specify the literal set.
19193 <dd> <b>Side Effects</b> None
19196 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
19198 <dt><pre>
19199 <A NAME="initSymmInfo"></A>
19200 static DdHalfWord * <I></I>
19201 <B>initSymmInfo</B>(
19202 DdManager * <b>table</b>, <i></i>
19203 int <b>lower</b>, <i></i>
19204 int <b>upper</b> <i></i>
19206 </pre>
19207 <dd> Translates the symmetry information stored in the next
19208 field of each subtable from level to indices. This procedure is called
19209 immediately after symmetric sifting, so that the next fields are correct.
19210 By translating this informaton in terms of indices, we make it independent
19211 of subsequent reorderings. The format used is that of the next fields:
19212 a circular list where each variable points to the next variable in the
19213 same symmetry group. Only the entries between lower and upper are
19214 considered. The procedure returns a pointer to an array
19215 holding the symmetry information if successful; NULL otherwise.
19218 <dd> <b>Side Effects</b> None
19221 <dd> <b>See Also</b> <code><a href="#checkSymmInfo">checkSymmInfo</a>
19222 </code>
19224 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19226 <dt><pre>
19227 <A NAME="largest"></A>
19228 static int <I></I>
19229 <B>largest</B>(
19230 <b></b> <i></i>
19232 </pre>
19233 <dd> Finds the largest DD in the population. If an order is
19234 repeated, it avoids choosing the copy that is in the computed table
19235 (it has repeat[i
19238 <dd> <b>Side Effects</b> None
19241 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
19243 <dt><pre>
19244 <A NAME="make_random"></A>
19245 static int <I></I>
19246 <B>make_random</B>(
19247 DdManager * <b>table</b>, <i></i>
19248 int <b>lower</b> <i></i>
19250 </pre>
19251 <dd> Generates the random sequences for the initial population.
19252 The sequences are permutations of the indices between lower and
19253 upper in the current order.
19256 <dd> <b>Side Effects</b> None
19259 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
19261 <dt><pre>
19262 <A NAME="mintermsFromUniverse"></A>
19263 static DdNode * <I></I>
19264 <B>mintermsFromUniverse</B>(
19265 DdManager * <b>manager</b>, <i></i>
19266 DdNode ** <b>vars</b>, <i></i>
19267 int <b>numVars</b>, <i></i>
19268 double <b>n</b>, <i></i>
19269 int <b>index</b> <i></i>
19271 </pre>
19272 <dd> Recursive procedure to extract n mintems from constant 1.
19275 <dd> <b>Side Effects</b> None
19278 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>
19280 <dt><pre>
19281 <A NAME="oneliteralp"></A>
19282 static int <I></I>
19283 <B>oneliteralp</B>(
19284 DdHalfWord <b>var</b> <i></i>
19286 </pre>
19287 <dd> Returns true iff the argument is a one-literal clause.
19288 A one-litaral clause has the constant FALSE as second literal.
19289 Since the constant TRUE is never used, it is sufficient to test for
19290 a constant.
19293 <dd> <b>Side Effects</b> None
19296 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
19298 <dt><pre>
19299 <A NAME="pushDown"></A>
19300 static void <I></I>
19301 <B>pushDown</B>(
19302 DdHalfWord * <b>order</b>, <i></i>
19303 int <b>j</b>, <i></i>
19304 int <b>level</b> <i></i>
19306 </pre>
19307 <dd> Pushes a variable in the order down to position "level."
19310 <dd> <b>Side Effects</b> None
19313 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19315 <dt><pre>
19316 <A NAME="rand_int"></A>
19317 static int <I></I>
19318 <B>rand_int</B>(
19319 int <b>a</b> <i></i>
19321 </pre>
19322 <dd> Generates a random number between 0 and the integer a.
19325 <dd> <b>Side Effects</b> None
19328 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
19330 <dt><pre>
19331 <A NAME="random_generator"></A>
19332 static double <I></I>
19333 <B>random_generator</B>(
19334 <b></b> <i></i>
19336 </pre>
19337 <dd> Returns a double precision value between 0.0 and 1.0.
19340 <dd> <b>Side Effects</b> None
19343 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
19345 <dt><pre>
19346 <A NAME="restoreOrder"></A>
19347 static int <I></I>
19348 <B>restoreOrder</B>(
19349 DdManager * <b>table</b>, <i></i>
19350 int * <b>array</b>, <i></i>
19351 int <b>lower</b>, <i></i>
19352 int <b>upper</b> <i></i>
19354 </pre>
19355 <dd> Restores the variable order in array by a series of sifts up.
19356 Returns 1 in case of success; 0 otherwise.
19359 <dd> <b>Side Effects</b> None
19362 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
19364 <dt><pre>
19365 <A NAME="roulette"></A>
19366 static int <I></I>
19367 <B>roulette</B>(
19368 int * <b>p1</b>, <i></i>
19369 int * <b>p2</b> <i></i>
19371 </pre>
19372 <dd> Selects two distinct parents with the roulette wheel method.
19375 <dd> <b>Side Effects</b> The indices of the selected parents are returned as side
19376 effects.
19379 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
19381 <dt><pre>
19382 <A NAME="selectMintermsFromUniverse"></A>
19383 static DdNode * <I></I>
19384 <B>selectMintermsFromUniverse</B>(
19385 DdManager * <b>manager</b>, <i></i>
19386 int * <b>varSeen</b>, <i></i>
19387 double <b>n</b> <i></i>
19389 </pre>
19390 <dd> This function prepares an array of variables which have not been
19391 encountered so far when traversing the procedure cuddSplitSetRecur. This
19392 array is then used to extract the required number of minterms from a constant
19393 1. The algorithm guarantees that the size of BDD will be utmost log(n).
19396 <dd> <b>Side Effects</b> None
19399 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>
19401 <dt><pre>
19402 <A NAME="sentinelp"></A>
19403 static int <I></I>
19404 <B>sentinelp</B>(
19405 DdHalfWord <b>var1</b>, <i></i>
19406 DdHalfWord <b>var2</b> <i></i>
19408 </pre>
19409 <dd> Returns true iff the argument is the sentinel clause.
19410 A sentinel clause has both variables equal to 0.
19413 <dd> <b>Side Effects</b> None
19416 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
19418 <dt><pre>
19419 <A NAME="separateCube"></A>
19420 static DdNode * <I></I>
19421 <B>separateCube</B>(
19422 DdManager * <b>dd</b>, <i></i>
19423 DdNode * <b>f</b>, <i></i>
19424 CUDD_VALUE_TYPE * <b>distance</b> <i></i>
19426 </pre>
19427 <dd> Separates cube from distance. Returns the cube if
19428 successful; NULL otherwise.
19431 <dd> <b>Side Effects</b> The distance is returned as a side effect.
19434 <dd> <b>See Also</b> <code><a href="#cuddBddClosestCube">cuddBddClosestCube</a>
19435 <a href="#createResult">createResult</a>
19436 </code>
19438 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>
19440 <dt><pre>
19441 <A NAME="siftBackwardProb"></A>
19442 static int <I></I>
19443 <B>siftBackwardProb</B>(
19444 DdManager * <b>table</b>, <i></i>
19445 Move * <b>moves</b>, <i></i>
19446 int <b>size</b>, <i></i>
19447 double <b>temp</b> <i></i>
19449 </pre>
19450 <dd> Otherwise, "tosses a coin" to decide whether to keep
19451 the current configuration or return the DD to the original
19452 one. Returns 1 in case of success; 0 otherwise.
19455 <dd> <b>Side Effects</b> None
19458 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
19460 <dt><pre>
19461 <A NAME="sift_up"></A>
19462 static int <I></I>
19463 <B>sift_up</B>(
19464 DdManager * <b>table</b>, <i></i>
19465 int <b>x</b>, <i></i>
19466 int <b>x_low</b> <i></i>
19468 </pre>
19469 <dd> Takes a variable from position x and sifts it up to
19470 position x_low; x_low should be less than x. Returns 1 if successful;
19471 0 otherwise
19474 <dd> <b>Side Effects</b> None
19477 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>
19479 <dt><pre>
19480 <A NAME="stPathTableDdFree"></A>
19481 static enum st_retval <I></I>
19482 <B>stPathTableDdFree</B>(
19483 char * <b>key</b>, <i></i>
19484 char * <b>value</b>, <i></i>
19485 char * <b>arg</b> <i></i>
19487 </pre>
19488 <dd> None
19491 <dd> <b>Side Effects</b> None
19494 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>
19496 <dt><pre>
19497 <A NAME="st_zdd_count_dbl_free"></A>
19498 static enum st_retval <I></I>
19499 <B>st_zdd_count_dbl_free</B>(
19500 char * <b>key</b>, <i></i>
19501 char * <b>value</b>, <i></i>
19502 char * <b>arg</b> <i></i>
19504 </pre>
19505 <dd> Frees the memory associated with the computed table of
19506 Cudd_zddCountDouble.
19509 <dd> <b>Side Effects</b> None
19512 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
19514 <dt><pre>
19515 <A NAME="st_zdd_countfree"></A>
19516 static enum st_retval <I></I>
19517 <B>st_zdd_countfree</B>(
19518 char * <b>key</b>, <i></i>
19519 char * <b>value</b>, <i></i>
19520 char * <b>arg</b> <i></i>
19522 </pre>
19523 <dd> Frees the memory associated with the computed table of
19524 Cudd_zddCount.
19527 <dd> <b>Side Effects</b> None
19530 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>
19532 <dt><pre>
19533 <A NAME="stopping_criterion"></A>
19534 static int <I></I>
19535 <B>stopping_criterion</B>(
19536 int <b>c1</b>, <i></i>
19537 int <b>c2</b>, <i></i>
19538 int <b>c3</b>, <i></i>
19539 int <b>c4</b>, <i></i>
19540 double <b>temp</b> <i></i>
19542 </pre>
19543 <dd> If temperature is STOP_TEMP or there is no improvement
19544 then terminates. Returns 1 if the termination criterion is met; 0
19545 otherwise.
19548 <dd> <b>Side Effects</b> None
19551 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>
19553 <dt><pre>
19554 <A NAME="tlcInfoAlloc"></A>
19555 static DdTlcInfo * <I></I>
19556 <B>tlcInfoAlloc</B>(
19557 <b></b> <i></i>
19559 </pre>
19560 <dd> Returns a pointer to a DdTlcInfo Structure if successful;
19561 NULL otherwise.
19564 <dd> <b>Side Effects</b> None
19567 <dd> <b>See Also</b> <code><a href="#Cudd_tlcInfoFree">Cudd_tlcInfoFree</a>
19568 </code>
19570 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>
19572 <dt><pre>
19573 <A NAME="updateEntry"></A>
19574 static int <I></I>
19575 <B>updateEntry</B>(
19576 DdManager * <b>table</b>, <i></i>
19577 DdHalfWord * <b>order</b>, <i></i>
19578 int <b>level</b>, <i></i>
19579 int <b>cost</b>, <i></i>
19580 DdHalfWord ** <b>orders</b>, <i></i>
19581 int * <b>costs</b>, <i></i>
19582 int <b>subsets</b>, <i></i>
19583 char * <b>mask</b>, <i></i>
19584 int <b>lower</b>, <i></i>
19585 int <b>upper</b> <i></i>
19587 </pre>
19588 <dd> Updates entry for a subset. Finds the subset, if it exists.
19589 If the new order for the subset has lower cost, or if the subset did not
19590 exist, it stores the new order and cost. Returns the number of subsets
19591 currently in the table.
19594 <dd> <b>Side Effects</b> None
19597 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19599 <dt><pre>
19600 <A NAME="updateParity"></A>
19601 static void <I></I>
19602 <B>updateParity</B>(
19603 DdNode * <b>node</b>, <i>function to analyze</i>
19604 ApproxInfo * <b>info</b>, <i>info on BDD</i>
19605 int <b>newparity</b> <i>new parity for node</i>
19607 </pre>
19608 <dd> Recursively update the parity of the paths reaching a node.
19609 Assumes that node is regular and propagates the invariant.
19612 <dd> <b>Side Effects</b> None
19615 <dd> <b>See Also</b> <code><a href="#gatherInfoAux">gatherInfoAux</a>
19616 </code>
19618 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
19620 <dt><pre>
19621 <A NAME="updateRefs"></A>
19622 static int <I></I>
19623 <B>updateRefs</B>(
19624 DdManager * <b>dd</b>, <i></i>
19625 DdNode * <b>f</b>, <i></i>
19626 DdNode * <b>skip</b>, <i></i>
19627 ApproxInfo * <b>info</b>, <i></i>
19628 DdLevelQueue * <b>queue</b> <i></i>
19630 </pre>
19631 <dd> Update function reference counts to account for replacement.
19632 Returns the number of nodes saved if successful; 0 otherwise.
19635 <dd> <b>Side Effects</b> None
19638 <dd> <b>See Also</b> <code>UAmarkNodes
19639 RAmarkNodes
19640 </code>
19642 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>
19644 <dt><pre>
19645 <A NAME="updateUB"></A>
19646 static int <I></I>
19647 <B>updateUB</B>(
19648 DdManager * <b>table</b>, <i></i>
19649 int <b>oldBound</b>, <i></i>
19650 DdHalfWord * <b>bestOrder</b>, <i></i>
19651 int <b>lower</b>, <i></i>
19652 int <b>upper</b> <i></i>
19654 </pre>
19655 <dd> Updates the upper bound and saves the best order seen so far.
19656 Returns the current value of the upper bound.
19659 <dd> <b>Side Effects</b> None
19662 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>
19664 <dt><pre>
19665 <A NAME="zddCountInternalMtrNodes"></A>
19666 static int <I></I>
19667 <B>zddCountInternalMtrNodes</B>(
19668 DdManager * <b>table</b>, <i></i>
19669 MtrNode * <b>treenode</b> <i></i>
19671 </pre>
19672 <dd> Counts the number of internal nodes of the group tree.
19673 Returns the count.
19676 <dd> <b>Side Effects</b> None
19679 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19681 <dt><pre>
19682 <A NAME="zddFindNodeHiLo"></A>
19683 static void <I></I>
19684 <B>zddFindNodeHiLo</B>(
19685 DdManager * <b>table</b>, <i></i>
19686 MtrNode * <b>treenode</b>, <i></i>
19687 int * <b>lower</b>, <i></i>
19688 int * <b>upper</b> <i></i>
19690 </pre>
19691 <dd> Finds the lower and upper bounds of the group represented
19692 by treenode. The high and low fields of treenode are indices. From
19693 those we need to derive the current positions, and find maximum and
19694 minimum.
19697 <dd> <b>Side Effects</b> The bounds are returned as side effects.
19700 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19702 <dt><pre>
19703 <A NAME="zddFixTree"></A>
19704 static void <I></I>
19705 <B>zddFixTree</B>(
19706 DdManager * <b>table</b>, <i></i>
19707 MtrNode * <b>treenode</b> <i></i>
19709 </pre>
19710 <dd> Fixes the ZDD variable group tree after a
19711 shuffle. Assumes that the order of the variables in a terminal node
19712 has not been changed.
19715 <dd> <b>Side Effects</b> Changes the ZDD variable group tree.
19718 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
19720 <dt><pre>
19721 <A NAME="zddGroupMoveBackward"></A>
19722 static int <I></I>
19723 <B>zddGroupMoveBackward</B>(
19724 DdManager * <b>table</b>, <i></i>
19725 int <b>x</b>, <i></i>
19726 int <b>y</b> <i></i>
19728 </pre>
19729 <dd> Undoes the swap two groups. Returns 1 in case of
19730 success; 0 otherwise.
19733 <dd> <b>Side Effects</b> None
19736 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19738 <dt><pre>
19739 <A NAME="zddGroupMove"></A>
19740 static int <I></I>
19741 <B>zddGroupMove</B>(
19742 DdManager * <b>table</b>, <i></i>
19743 int <b>x</b>, <i></i>
19744 int <b>y</b>, <i></i>
19745 Move ** <b>moves</b> <i></i>
19747 </pre>
19748 <dd> Swaps two groups and records the move. Returns the
19749 number of keys in the DD table in case of success; 0 otherwise.
19752 <dd> <b>Side Effects</b> None
19755 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19757 <dt><pre>
19758 <A NAME="zddGroupSiftingAux"></A>
19759 static int <I></I>
19760 <B>zddGroupSiftingAux</B>(
19761 DdManager * <b>table</b>, <i></i>
19762 int <b>x</b>, <i></i>
19763 int <b>xLow</b>, <i></i>
19764 int <b>xHigh</b> <i></i>
19766 </pre>
19767 <dd> Sifts one variable up and down until it has taken all
19768 positions. Checks for aggregation. There may be at most two sweeps,
19769 even if the group grows. Assumes that x is either an isolated
19770 variable, or it is the bottom of a group. All groups may not have
19771 been found. The variable being moved is returned to the best position
19772 seen during sifting. Returns 1 in case of success; 0 otherwise.
19775 <dd> <b>Side Effects</b> None
19778 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19780 <dt><pre>
19781 <A NAME="zddGroupSiftingBackward"></A>
19782 static int <I></I>
19783 <B>zddGroupSiftingBackward</B>(
19784 DdManager * <b>table</b>, <i></i>
19785 Move * <b>moves</b>, <i></i>
19786 int <b>size</b> <i></i>
19788 </pre>
19789 <dd> Determines the best position for a variables and returns
19790 it there. Returns 1 in case of success; 0 otherwise.
19793 <dd> <b>Side Effects</b> None
19796 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19798 <dt><pre>
19799 <A NAME="zddGroupSiftingDown"></A>
19800 static int <I></I>
19801 <B>zddGroupSiftingDown</B>(
19802 DdManager * <b>table</b>, <i></i>
19803 int <b>x</b>, <i></i>
19804 int <b>xHigh</b>, <i></i>
19805 Move ** <b>moves</b> <i></i>
19807 </pre>
19808 <dd> Sifts down a variable until it reaches position xHigh.
19809 Assumes that x is the bottom of a group (or a singleton). Records
19810 all the moves. Returns 1 in case of success; 0 otherwise.
19813 <dd> <b>Side Effects</b> None
19816 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19818 <dt><pre>
19819 <A NAME="zddGroupSiftingUp"></A>
19820 static int <I></I>
19821 <B>zddGroupSiftingUp</B>(
19822 DdManager * <b>table</b>, <i></i>
19823 int <b>y</b>, <i></i>
19824 int <b>xLow</b>, <i></i>
19825 Move ** <b>moves</b> <i></i>
19827 </pre>
19828 <dd> Sifts up a variable until either it reaches position
19829 xLow or the size of the DD heap increases too much. Assumes that y is
19830 the top of a group (or a singleton). Checks y for aggregation to the
19831 adjacent variables. Records all the moves that are appended to the
19832 list of moves received as input and returned as a side effect.
19833 Returns 1 in case of success; 0 otherwise.
19836 <dd> <b>Side Effects</b> None
19839 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19841 <dt><pre>
19842 <A NAME="zddGroupSifting"></A>
19843 static int <I></I>
19844 <B>zddGroupSifting</B>(
19845 DdManager * <b>table</b>, <i></i>
19846 int <b>lower</b>, <i></i>
19847 int <b>upper</b> <i></i>
19849 </pre>
19850 <dd> Sifts from treenode->low to treenode->high. If
19851 croupcheck == CUDD_GROUP_CHECK7, it checks for group creation at the
19852 end of the initial sifting. If a group is created, it is then sifted
19853 again. After sifting one variable, the group that contains it is
19854 dissolved. Returns 1 in case of success; 0 otherwise.
19857 <dd> <b>Side Effects</b> None
19860 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19862 <dt><pre>
19863 <A NAME="zddMergeGroups"></A>
19864 static void <I></I>
19865 <B>zddMergeGroups</B>(
19866 DdManager * <b>table</b>, <i></i>
19867 MtrNode * <b>treenode</b>, <i></i>
19868 int <b>low</b>, <i></i>
19869 int <b>high</b> <i></i>
19871 </pre>
19872 <dd> Creates a single group from low to high and adjusts the
19873 idex field of the tree node.
19876 <dd> <b>Side Effects</b> None
19879 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19881 <dt><pre>
19882 <A NAME="zddPortFromBddStep"></A>
19883 static DdNode * <I></I>
19884 <B>zddPortFromBddStep</B>(
19885 DdManager * <b>dd</b>, <i></i>
19886 DdNode * <b>B</b>, <i></i>
19887 int <b>expected</b> <i></i>
19889 </pre>
19890 <dd> Performs the recursive step of Cudd_zddPortFromBdd.
19893 <dd> <b>Side Effects</b> None
19896 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>
19898 <dt><pre>
19899 <A NAME="zddPortToBddStep"></A>
19900 static DdNode * <I></I>
19901 <B>zddPortToBddStep</B>(
19902 DdManager * <b>dd</b>, <i>manager</i>
19903 DdNode * <b>f</b>, <i>ZDD to be converted</i>
19904 int <b>depth</b> <i>recursion depth</i>
19906 </pre>
19907 <dd> Performs the recursive step of Cudd_zddPortToBdd.
19910 <dd> <b>Side Effects</b> None
19913 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>
19915 <dt><pre>
19916 <A NAME="zddPrintCoverAux"></A>
19917 static void <I></I>
19918 <B>zddPrintCoverAux</B>(
19919 DdManager * <b>zdd</b>, <i>manager</i>
19920 DdNode * <b>node</b>, <i>current node</i>
19921 int <b>level</b>, <i>depth in the recursion</i>
19922 int * <b>list</b> <i>current recursion path</i>
19924 </pre>
19925 <dd> Performs the recursive step of Cudd_zddPrintCover.
19928 <dd> <b>Side Effects</b> None
19931 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
19933 <dt><pre>
19934 <A NAME="zddReorderChildren"></A>
19935 static int <I></I>
19936 <B>zddReorderChildren</B>(
19937 DdManager * <b>table</b>, <i></i>
19938 MtrNode * <b>treenode</b>, <i></i>
19939 Cudd_ReorderingType <b>method</b> <i></i>
19941 </pre>
19942 <dd> Reorders the children of a group tree node according to
19943 the options. After reordering puts all the variables in the group
19944 and/or its descendents in a single group. This allows hierarchical
19945 reordering. If the variables in the group do not exist yet, simply
19946 does nothing. Returns 1 if successful; 0 otherwise.
19949 <dd> <b>Side Effects</b> None
19952 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
19954 <dt><pre>
19955 <A NAME="zddReorderPostprocess"></A>
19956 static int <I></I>
19957 <B>zddReorderPostprocess</B>(
19958 DdManager * <b>table</b> <i></i>
19960 </pre>
19961 <dd> Shrinks almost empty subtables at the end of reordering to
19962 guarantee that they have a reasonable load factor. However, if there many
19963 nodes are being reclaimed, then no resizing occurs. Returns 1 in case of
19964 success; 0 otherwise.
19967 <dd> <b>Side Effects</b> None
19970 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
19972 <dt><pre>
19973 <A NAME="zddReorderPreprocess"></A>
19974 static void <I></I>
19975 <B>zddReorderPreprocess</B>(
19976 DdManager * <b>table</b> <i></i>
19978 </pre>
19979 <dd> Prepares the ZDD heap for dynamic reordering. Does
19980 garbage collection, to guarantee that there are no dead nodes;
19981 and clears the cache, which is invalidated by dynamic reordering.
19984 <dd> <b>Side Effects</b> None
19987 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
19989 <dt><pre>
19990 <A NAME="zddShuffle"></A>
19991 static int <I></I>
19992 <B>zddShuffle</B>(
19993 DdManager * <b>table</b>, <i></i>
19994 int * <b>permutation</b> <i></i>
19996 </pre>
19997 <dd> Reorders ZDD variables according to a given permutation.
19998 The i-th permutation array contains the index of the variable that
19999 should be brought to the i-th level. zddShuffle assumes that no
20000 dead nodes are present. The reordering is achieved by a series of
20001 upward sifts. Returns 1 if successful; 0 otherwise.
20004 <dd> <b>Side Effects</b> None
20007 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
20009 <dt><pre>
20010 <A NAME="zddSiftUp"></A>
20011 static int <I></I>
20012 <B>zddSiftUp</B>(
20013 DdManager * <b>table</b>, <i></i>
20014 int <b>x</b>, <i></i>
20015 int <b>xLow</b> <i></i>
20017 </pre>
20018 <dd> Takes a ZDD variable from position x and sifts it up to
20019 position xLow; xLow should be less than or equal to x.
20020 Returns 1 if successful; 0 otherwise
20023 <dd> <b>Side Effects</b> None
20026 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
20028 <dt><pre>
20029 <A NAME="zddSwapAny"></A>
20030 static Move * <I></I>
20031 <B>zddSwapAny</B>(
20032 DdManager * <b>table</b>, <i></i>
20033 int <b>x</b>, <i></i>
20034 int <b>y</b> <i></i>
20036 </pre>
20037 <dd> Swaps any two variables. Returns the set of moves.
20040 <dd> <b>Side Effects</b> None
20043 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>
20045 <dt><pre>
20046 <A NAME="zddTreeSiftingAux"></A>
20047 static int <I></I>
20048 <B>zddTreeSiftingAux</B>(
20049 DdManager * <b>table</b>, <i></i>
20050 MtrNode * <b>treenode</b>, <i></i>
20051 Cudd_ReorderingType <b>method</b> <i></i>
20053 </pre>
20054 <dd> Recursively visits the group tree and reorders each
20055 group in postorder fashion. Returns 1 if successful; 0 otherwise.
20058 <dd> <b>Side Effects</b> None
20061 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
20063 <dt><pre>
20064 <A NAME="zddUniqueCompareGroup"></A>
20065 static int <I></I>
20066 <B>zddUniqueCompareGroup</B>(
20067 int * <b>ptrX</b>, <i></i>
20068 int * <b>ptrY</b> <i></i>
20070 </pre>
20071 <dd> Comparison function used by qsort to order the variables
20072 according to the number of keys in the subtables. Returns the
20073 difference in number of keys between the two variables being
20074 compared.
20077 <dd> <b>Side Effects</b> None
20080 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>
20082 <dt><pre>
20083 <A NAME="zddVarToConst"></A>
20084 static void <I></I>
20085 <B>zddVarToConst</B>(
20086 DdNode * <b>f</b>, <i></i>
20087 DdNode ** <b>gp</b>, <i></i>
20088 DdNode ** <b>hp</b>, <i></i>
20089 DdNode * <b>base</b>, <i></i>
20090 DdNode * <b>empty</b> <i></i>
20092 </pre>
20093 <dd> Replaces variables with constants if possible (part of
20094 canonical form).
20097 <dd> <b>Side Effects</b> None
20100 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
20102 <dt><pre>
20103 <A NAME="zdd_group_move_backward"></A>
20104 static int <I></I>
20105 <B>zdd_group_move_backward</B>(
20106 DdManager * <b>table</b>, <i></i>
20107 int <b>x</b>, <i></i>
20108 int <b>y</b> <i></i>
20110 </pre>
20111 <dd> Undoes the swap of two groups. x is assumed to be the
20112 bottom variable of the first group. y is assumed to be the top
20113 variable of the second group. Returns 1 if successful; 0 otherwise.
20116 <dd> <b>Side Effects</b> None
20119 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
20121 <dt><pre>
20122 <A NAME="zdd_group_move"></A>
20123 static int <I></I>
20124 <B>zdd_group_move</B>(
20125 DdManager * <b>table</b>, <i></i>
20126 int <b>x</b>, <i></i>
20127 int <b>y</b>, <i></i>
20128 Move ** <b>moves</b> <i></i>
20130 </pre>
20131 <dd> Swaps two groups. x is assumed to be the bottom variable
20132 of the first group. y is assumed to be the top variable of the second
20133 group. Updates the list of moves. Returns the number of keys in the
20134 table if successful; 0 otherwise.
20137 <dd> <b>Side Effects</b> None
20140 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>
20142 <dt><pre>
20143 <A NAME="zdd_print_minterm_aux"></A>
20144 static void <I></I>
20145 <B>zdd_print_minterm_aux</B>(
20146 DdManager * <b>zdd</b>, <i>manager</i>
20147 DdNode * <b>node</b>, <i>current node</i>
20148 int <b>level</b>, <i>depth in the recursion</i>
20149 int * <b>list</b> <i>current recursion path</i>
20151 </pre>
20152 <dd> Performs the recursive step of Cudd_zddPrintMinterm.
20155 <dd> <b>Side Effects</b> None
20158 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
20160 <dt><pre>
20161 <A NAME="zdd_subset0_aux"></A>
20162 static DdNode * <I></I>
20163 <B>zdd_subset0_aux</B>(
20164 DdManager * <b>zdd</b>, <i></i>
20165 DdNode * <b>P</b>, <i></i>
20166 DdNode * <b>zvar</b> <i></i>
20168 </pre>
20169 <dd> Performs the recursive step of Cudd_zddSubset0.
20172 <dd> <b>Side Effects</b> None
20175 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
20177 <dt><pre>
20178 <A NAME="zdd_subset1_aux"></A>
20179 static DdNode * <I></I>
20180 <B>zdd_subset1_aux</B>(
20181 DdManager * <b>zdd</b>, <i></i>
20182 DdNode * <b>P</b>, <i></i>
20183 DdNode * <b>zvar</b> <i></i>
20185 </pre>
20186 <dd> Performs the recursive step of Cudd_zddSubset1.
20189 <dd> <b>Side Effects</b> None
20192 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>
20194 <dt><pre>
20195 <A NAME="zp2"></A>
20196 static int <I></I>
20197 <B>zp2</B>(
20198 DdManager * <b>zdd</b>, <i></i>
20199 DdNode * <b>f</b>, <i></i>
20200 st_table * <b>t</b> <i></i>
20202 </pre>
20203 <dd> Performs the recursive step of cuddZddP. Returns 1 in
20204 case of success; 0 otherwise.
20207 <dd> <b>Side Effects</b> None
20210 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>
20212 <dt><pre>
20213 <A NAME=""></A>
20214 <I></I>
20215 <B></B>(
20216 <b></b> <i></i>
20218 </pre>
20219 <dd> Adds node to the head of the free list. Does not
20220 deallocate memory chunks that become free. This function is also
20221 used by the dynamic reordering functions.
20224 <dd> <b>Side Effects</b> None
20227 <dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
20228 <a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
20229 <a href="#cuddDeallocMove">cuddDeallocMove</a>
20230 </code>
20232 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20234 <dt><pre>
20235 <A NAME=""></A>
20236 <I></I>
20237 <B></B>(
20238 <b></b> <i></i>
20240 </pre>
20241 <dd> Adds node to the head of the free list. Does not
20242 deallocate memory chunks that become free. This function is also
20243 used by the dynamic reordering functions.
20246 <dd> <b>Side Effects</b> None
20249 <dd> <b>See Also</b> <code><a href="#cuddDeallocNode">cuddDeallocNode</a>
20250 <a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
20251 </code>
20253 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20255 <dt><pre>
20256 <A NAME=""></A>
20257 <I></I>
20258 <B></B>(
20259 <b></b> <i></i>
20261 </pre>
20262 <dd> Clears the 4 least significant bits of a pointer.
20265 <dd> <b>Side Effects</b> none
20268 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20270 <dt><pre>
20271 <A NAME=""></A>
20272 <I></I>
20273 <B></B>(
20274 <b></b> <i></i>
20276 </pre>
20277 <dd> Complements a DD if condition c is true; c should be
20278 either 0 or 1, because it is used directly (for efficiency). If in
20279 doubt on the values c may take, use "(c) ? Cudd_Not(node) : node".
20282 <dd> <b>Side Effects</b> none
20285 <dd> <b>See Also</b> <code><a href="#Cudd_Not">Cudd_Not</a>
20286 </code>
20288 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20290 <dt><pre>
20291 <A NAME=""></A>
20292 <I></I>
20293 <B></B>(
20294 <b></b> <i></i>
20296 </pre>
20297 <dd> Complements a DD by flipping the complement attribute of
20298 the pointer (the least significant bit).
20301 <dd> <b>Side Effects</b> none
20304 <dd> <b>See Also</b> <code><a href="#Cudd_NotCond">Cudd_NotCond</a>
20305 </code>
20307 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20309 <dt><pre>
20310 <A NAME=""></A>
20311 <I></I>
20312 <B></B>(
20313 <b></b> <i></i>
20315 </pre>
20316 <dd> Computes hash function for keys of three operands.
20319 <dd> <b>Side Effects</b> None
20322 <dd> <b>See Also</b> <code><a href="#ddLCHash2">ddLCHash2</a>
20323 <a href="#ddLCHash">ddLCHash</a>
20324 </code>
20326 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
20328 <dt><pre>
20329 <A NAME=""></A>
20330 <I></I>
20331 <B></B>(
20332 <b></b> <i></i>
20334 </pre>
20335 <dd> Computes hash function for keys of two operands.
20338 <dd> <b>Side Effects</b> None
20341 <dd> <b>See Also</b> <code><a href="#ddLCHash3">ddLCHash3</a>
20342 <a href="#ddLCHash">ddLCHash</a>
20343 </code>
20345 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>
20347 <dt><pre>
20348 <A NAME=""></A>
20349 <I></I>
20350 <B></B>(
20351 <b></b> <i></i>
20353 </pre>
20354 <dd> Computes the absolute value of a number.
20357 <dd> <b>Side Effects</b> none
20360 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20362 <dt><pre>
20363 <A NAME=""></A>
20364 <I></I>
20365 <B></B>(
20366 <b></b> <i></i>
20368 </pre>
20369 <dd> Computes the maximum of two numbers.
20372 <dd> <b>Side Effects</b> none
20375 <dd> <b>See Also</b> <code><a href="#ddMin">ddMin</a>
20376 </code>
20378 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20380 <dt><pre>
20381 <A NAME=""></A>
20382 <I></I>
20383 <B></B>(
20384 <b></b> <i></i>
20386 </pre>
20387 <dd> Computes the minimum of two numbers.
20390 <dd> <b>Side Effects</b> none
20393 <dd> <b>See Also</b> <code><a href="#ddMax">ddMax</a>
20394 </code>
20396 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20398 <dt><pre>
20399 <A NAME=""></A>
20400 <I></I>
20401 <B></B>(
20402 <b></b> <i></i>
20404 </pre>
20405 <dd> Decreases the reference count of node. It is primarily
20406 used in recursive procedures to decrease the ref count of a result
20407 node before returning it. This accomplishes the goal of removing the
20408 protection applied by a previous cuddRef. This being a macro, it is
20409 faster than Cudd_Deref, but it cannot be used in constructs like
20410 cuddDeref(a = b()).
20413 <dd> <b>Side Effects</b> none
20416 <dd> <b>See Also</b> <code><a href="#Cudd_Deref">Cudd_Deref</a>
20417 </code>
20419 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20421 <dt><pre>
20422 <A NAME=""></A>
20423 <I></I>
20424 <B></B>(
20425 <b></b> <i></i>
20427 </pre>
20428 <dd> Enforces DD_MINUS_INF_VAL <= x <= DD_PLUS_INF_VAL.
20429 Furthermore, if x <= DD_MINUS_INF_VAL/2, x is set to
20430 DD_MINUS_INF_VAL. Similarly, if DD_PLUS_INF_VAL/2 <= x, x is set to
20431 DD_PLUS_INF_VAL. Normally this macro is a NOOP. However, if
20432 HAVE_IEEE_754 is not defined, it makes sure that a value does not
20433 get larger than infinity in absolute value, and once it gets to
20434 infinity, stays there. If the value overflows before this macro is
20435 applied, no recovery is possible.
20438 <dd> <b>Side Effects</b> none
20441 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20443 <dt><pre>
20444 <A NAME=""></A>
20445 <I></I>
20446 <B></B>(
20447 <b></b> <i></i>
20449 </pre>
20450 <dd> Extract the least significant digit of a double digit. Used
20451 in the manipulation of arbitrary precision integers.
20454 <dd> <b>Side Effects</b> None
20457 <dd> <b>See Also</b> <code>DD_MSDIGIT
20458 </code>
20460 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20462 <dt><pre>
20463 <A NAME=""></A>
20464 <I></I>
20465 <B></B>(
20466 <b></b> <i></i>
20468 </pre>
20469 <dd> Extract the most significant digit of a double digit. Used
20470 in the manipulation of arbitrary precision integers.
20473 <dd> <b>Side Effects</b> None
20476 <dd> <b>See Also</b> <code>DD_LSDIGIT
20477 </code>
20479 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20481 <dt><pre>
20482 <A NAME=""></A>
20483 <I></I>
20484 <B></B>(
20485 <b></b> <i></i>
20487 </pre>
20488 <dd> Finds the current position of ZDD variable index in the
20489 order. This macro duplicates the functionality of Cudd_ReadPermZdd,
20490 but it does not check for out-of-bounds indices and it is more
20491 efficient.
20494 <dd> <b>Side Effects</b> none
20497 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPermZdd">Cudd_ReadPermZdd</a>
20498 </code>
20500 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20502 <dt><pre>
20503 <A NAME=""></A>
20504 <I></I>
20505 <B></B>(
20506 <b></b> <i></i>
20508 </pre>
20509 <dd> Finds the current position of variable index in the
20510 order. This macro duplicates the functionality of Cudd_ReadPerm,
20511 but it does not check for out-of-bounds indices and it is more
20512 efficient.
20515 <dd> <b>Side Effects</b> none
20518 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
20519 </code>
20521 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20523 <dt><pre>
20524 <A NAME=""></A>
20525 <I></I>
20526 <B></B>(
20527 <b></b> <i></i>
20529 </pre>
20530 <dd> Hash function for the cache for functions with two
20531 operands.
20534 <dd> <b>Side Effects</b> none
20537 <dd> <b>See Also</b> <code><a href="#ddHash">ddHash</a>
20538 <a href="#ddCHash">ddCHash</a>
20539 </code>
20541 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20543 <dt><pre>
20544 <A NAME=""></A>
20545 <I></I>
20546 <B></B>(
20547 <b></b> <i></i>
20549 </pre>
20550 <dd> Hash function for the cache.
20553 <dd> <b>Side Effects</b> none
20556 <dd> <b>See Also</b> <code><a href="#ddHash">ddHash</a>
20557 <a href="#ddCHash2">ddCHash2</a>
20558 </code>
20560 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20562 <dt><pre>
20563 <A NAME=""></A>
20564 <I></I>
20565 <B></B>(
20566 <b></b> <i></i>
20568 </pre>
20569 <dd> Hash function for the table of a level queue.
20572 <dd> <b>Side Effects</b> None
20575 <dd> <b>See Also</b> <code><a href="#hashInsert">hashInsert</a>
20576 <a href="#hashLookup">hashLookup</a>
20577 <a href="#hashDelete">hashDelete</a>
20578 </code>
20580 <DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>
20582 <dt><pre>
20583 <A NAME=""></A>
20584 <I></I>
20585 <B></B>(
20586 <b></b> <i></i>
20588 </pre>
20589 <dd> Hash function for the unique table.
20592 <dd> <b>Side Effects</b> none
20595 <dd> <b>See Also</b> <code><a href="#ddCHash">ddCHash</a>
20596 <a href="#ddCHash2">ddCHash2</a>
20597 </code>
20599 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20601 <dt><pre>
20602 <A NAME=""></A>
20603 <I></I>
20604 <B></B>(
20605 <b></b> <i></i>
20607 </pre>
20608 <dd> Increases the reference count of a node, if it is not
20609 saturated. This being a macro, it is faster than Cudd_Ref, but it
20610 cannot be used in constructs like cuddRef(a = b()).
20613 <dd> <b>Side Effects</b> none
20616 <dd> <b>See Also</b> <code><a href="#Cudd_Ref">Cudd_Ref</a>
20617 </code>
20619 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20621 <dt><pre>
20622 <A NAME=""></A>
20623 <I></I>
20624 <B></B>(
20625 <b></b> <i></i>
20627 </pre>
20628 <dd> Iterates over the cubes of a decision diagram f.
20629 <ul>
20630 <li> DdManager *manager;
20631 <li> DdNode *f;
20632 <li> DdGen *gen;
20633 <li> int *cube;
20634 <li> CUDD_VALUE_TYPE value;
20635 </ul>
20636 Cudd_ForeachCube allocates and frees the generator. Therefore the
20637 application should not try to do that. Also, the cube is freed at the
20638 end of Cudd_ForeachCube and hence is not available outside of the loop.<p>
20639 CAUTION: It is assumed that dynamic reordering will not occur while
20640 there are open generators. It is the user's responsibility to make sure
20641 that dynamic reordering does not occur. As long as new nodes are not created
20642 during generation, and dynamic reordering is not called explicitly,
20643 dynamic reordering will not occur. Alternatively, it is sufficient to
20644 disable dynamic reordering. It is a mistake to dispose of a diagram
20645 on which generation is ongoing.
20648 <dd> <b>Side Effects</b> none
20651 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
20652 <a href="#Cudd_FirstCube">Cudd_FirstCube</a>
20653 <a href="#Cudd_NextCube">Cudd_NextCube</a>
20654 <a href="#Cudd_GenFree">Cudd_GenFree</a>
20655 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
20656 <a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
20657 </code>
20659 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20661 <dt><pre>
20662 <A NAME=""></A>
20663 <I></I>
20664 <B></B>(
20665 <b></b> <i></i>
20667 </pre>
20668 <dd> Iterates over the nodes of a decision diagram f.
20669 <ul>
20670 <li> DdManager *manager;
20671 <li> DdNode *f;
20672 <li> DdGen *gen;
20673 <li> DdNode *node;
20674 </ul>
20675 The nodes are returned in a seemingly random order.
20676 Cudd_ForeachNode allocates and frees the generator. Therefore the
20677 application should not try to do that.<p>
20678 CAUTION: It is assumed that dynamic reordering will not occur while
20679 there are open generators. It is the user's responsibility to make sure
20680 that dynamic reordering does not occur. As long as new nodes are not created
20681 during generation, and dynamic reordering is not called explicitly,
20682 dynamic reordering will not occur. Alternatively, it is sufficient to
20683 disable dynamic reordering. It is a mistake to dispose of a diagram
20684 on which generation is ongoing.
20687 <dd> <b>Side Effects</b> none
20690 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
20691 <a href="#Cudd_FirstNode">Cudd_FirstNode</a>
20692 <a href="#Cudd_NextNode">Cudd_NextNode</a>
20693 <a href="#Cudd_GenFree">Cudd_GenFree</a>
20694 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
20695 <a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
20696 </code>
20698 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20700 <dt><pre>
20701 <A NAME=""></A>
20702 <I></I>
20703 <B></B>(
20704 <b></b> <i></i>
20706 </pre>
20707 <dd> Iterates over the paths of a ZDD f.
20708 <ul>
20709 <li> DdManager *manager;
20710 <li> DdNode *f;
20711 <li> DdGen *gen;
20712 <li> int *path;
20713 </ul>
20714 Cudd_zddForeachPath allocates and frees the generator. Therefore the
20715 application should not try to do that. Also, the path is freed at the
20716 end of Cudd_zddForeachPath and hence is not available outside of the loop.<p>
20717 CAUTION: It is assumed that dynamic reordering will not occur while
20718 there are open generators. It is the user's responsibility to make sure
20719 that dynamic reordering does not occur. As long as new nodes are not created
20720 during generation, and dynamic reordering is not called explicitly,
20721 dynamic reordering will not occur. Alternatively, it is sufficient to
20722 disable dynamic reordering. It is a mistake to dispose of a diagram
20723 on which generation is ongoing.
20726 <dd> <b>Side Effects</b> none
20729 <dd> <b>See Also</b> <code><a href="#Cudd_zddFirstPath">Cudd_zddFirstPath</a>
20730 <a href="#Cudd_zddNextPath">Cudd_zddNextPath</a>
20731 <a href="#Cudd_GenFree">Cudd_GenFree</a>
20732 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
20733 <a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
20734 </code>
20736 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20738 <dt><pre>
20739 <A NAME=""></A>
20740 <I></I>
20741 <B></B>(
20742 <b></b> <i></i>
20744 </pre>
20745 <dd> Iterates over the primes of a Boolean function producing
20746 a prime and irredundant cover.
20747 <ul>
20748 <li> DdManager *manager;
20749 <li> DdNode *l;
20750 <li> DdNode *u;
20751 <li> DdGen *gen;
20752 <li> int *cube;
20753 </ul>
20754 The Boolean function is described by an upper bound and a lower bound. If
20755 the function is completely specified, the two bounds coincide.
20756 Cudd_ForeachPrime allocates and frees the generator. Therefore the
20757 application should not try to do that. Also, the cube is freed at the
20758 end of Cudd_ForeachPrime and hence is not available outside of the loop.<p>
20759 CAUTION: It is a mistake to change a diagram on which generation is ongoing.
20762 <dd> <b>Side Effects</b> none
20765 <dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
20766 <a href="#Cudd_FirstPrime">Cudd_FirstPrime</a>
20767 <a href="#Cudd_NextPrime">Cudd_NextPrime</a>
20768 <a href="#Cudd_GenFree">Cudd_GenFree</a>
20769 <a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
20770 </code>
20772 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20774 <dt><pre>
20775 <A NAME=""></A>
20776 <I></I>
20777 <B></B>(
20778 <b></b> <i></i>
20780 </pre>
20781 <dd> Outputs a line of stats if DD_COUNT and DD_STATS are
20782 defined. Increments the number of recursive calls if DD_COUNT is
20783 defined.
20786 <dd> <b>Side Effects</b> None
20789 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20791 <dt><pre>
20792 <A NAME=""></A>
20793 <I></I>
20794 <B></B>(
20795 <b></b> <i></i>
20797 </pre>
20798 <dd> Returns 1 if a pointer is complemented.
20801 <dd> <b>Side Effects</b> none
20804 <dd> <b>See Also</b> <code><a href="#Cudd_Regular">Cudd_Regular</a>
20805 <a href="#Cudd_Complement">Cudd_Complement</a>
20806 </code>
20808 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20810 <dt><pre>
20811 <A NAME=""></A>
20812 <I></I>
20813 <B></B>(
20814 <b></b> <i></i>
20816 </pre>
20817 <dd> Returns 1 if the absolute value of the difference of the two
20818 arguments x and y is less than e.
20821 <dd> <b>Side Effects</b> none
20824 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20826 <dt><pre>
20827 <A NAME=""></A>
20828 <I></I>
20829 <B></B>(
20830 <b></b> <i></i>
20832 </pre>
20833 <dd> Returns 1 if the node is a constant node (rather than an
20834 internal node). All constant nodes have the same index
20835 (CUDD_CONST_INDEX). The pointer passed to Cudd_IsConstant may be either
20836 regular or complemented.
20839 <dd> <b>Side Effects</b> none
20842 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20844 <dt><pre>
20845 <A NAME=""></A>
20846 <I></I>
20847 <B></B>(
20848 <b></b> <i></i>
20850 </pre>
20851 <dd> Returns 1 if the node is a constant node (rather than an
20852 internal node). All constant nodes have the same index
20853 (CUDD_CONST_INDEX). The pointer passed to cuddIsConstant must be regular.
20856 <dd> <b>Side Effects</b> none
20859 <dd> <b>See Also</b> <code><a href="#Cudd_IsConstant">Cudd_IsConstant</a>
20860 </code>
20862 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20864 <dt><pre>
20865 <A NAME=""></A>
20866 <I></I>
20867 <B></B>(
20868 <b></b> <i></i>
20870 </pre>
20871 <dd> Returns the arithmetic 0 constant node. This is different
20872 from the logical zero. The latter is obtained by
20873 Cudd_Not(DD_ONE(dd)).
20876 <dd> <b>Side Effects</b> none
20879 <dd> <b>See Also</b> <code>DD_ONE
20880 <a href="#Cudd_Not">Cudd_Not</a>
20881 DD_PLUS_INFINITY
20882 DD_MINUS_INFINITY
20883 </code>
20885 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20887 <dt><pre>
20888 <A NAME=""></A>
20889 <I></I>
20890 <B></B>(
20891 <b></b> <i></i>
20893 </pre>
20894 <dd> Returns the complemented version of a pointer.
20897 <dd> <b>Side Effects</b> none
20900 <dd> <b>See Also</b> <code><a href="#Cudd_Regular">Cudd_Regular</a>
20901 <a href="#Cudd_IsComplement">Cudd_IsComplement</a>
20902 </code>
20904 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20906 <dt><pre>
20907 <A NAME=""></A>
20908 <I></I>
20909 <B></B>(
20910 <b></b> <i></i>
20912 </pre>
20913 <dd> Returns the constant 1 node.
20916 <dd> <b>Side Effects</b> none
20919 <dd> <b>See Also</b> <code>DD_ZERO
20920 DD_PLUS_INFINITY
20921 DD_MINUS_INFINITY
20922 </code>
20924 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20926 <dt><pre>
20927 <A NAME=""></A>
20928 <I></I>
20929 <B></B>(
20930 <b></b> <i></i>
20932 </pre>
20933 <dd> Returns the current position in the order of variable
20934 index. This macro is obsolete and is kept for compatibility. New
20935 applications should use Cudd_ReadPerm instead.
20938 <dd> <b>Side Effects</b> none
20941 <dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
20942 </code>
20944 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20946 <dt><pre>
20947 <A NAME=""></A>
20948 <I></I>
20949 <B></B>(
20950 <b></b> <i></i>
20952 </pre>
20953 <dd> Returns the else child of an internal node. If
20954 <code>node</code> is a constant node, the result is unpredictable.
20955 The pointer passed to cuddE must be regular.
20958 <dd> <b>Side Effects</b> none
20961 <dd> <b>See Also</b> <code><a href="#Cudd_E">Cudd_E</a>
20962 </code>
20964 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
20966 <dt><pre>
20967 <A NAME=""></A>
20968 <I></I>
20969 <B></B>(
20970 <b></b> <i></i>
20972 </pre>
20973 <dd> Returns the else child of an internal node. If
20974 <code>node</code> is a constant node, the result is unpredictable.
20977 <dd> <b>Side Effects</b> none
20980 <dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
20981 <a href="#Cudd_V">Cudd_V</a>
20982 </code>
20984 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
20986 <dt><pre>
20987 <A NAME=""></A>
20988 <I></I>
20989 <B></B>(
20990 <b></b> <i></i>
20992 </pre>
20993 <dd> Returns the minus infinity constant node.
20996 <dd> <b>Side Effects</b> none
20999 <dd> <b>See Also</b> <code>DD_ONE
21000 DD_ZERO
21001 DD_PLUS_INFINITY
21002 </code>
21004 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21006 <dt><pre>
21007 <A NAME=""></A>
21008 <I></I>
21009 <B></B>(
21010 <b></b> <i></i>
21012 </pre>
21013 <dd> Returns the plus infinity constant node.
21016 <dd> <b>Side Effects</b> none
21019 <dd> <b>See Also</b> <code>DD_ONE
21020 DD_ZERO
21021 DD_MINUS_INFINITY
21022 </code>
21024 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21026 <dt><pre>
21027 <A NAME=""></A>
21028 <I></I>
21029 <B></B>(
21030 <b></b> <i></i>
21032 </pre>
21033 <dd> Returns the regular version of a pointer.
21036 <dd> <b>Side Effects</b> none
21039 <dd> <b>See Also</b> <code><a href="#Cudd_Complement">Cudd_Complement</a>
21040 <a href="#Cudd_IsComplement">Cudd_IsComplement</a>
21041 </code>
21043 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
21045 <dt><pre>
21046 <A NAME=""></A>
21047 <I></I>
21048 <B></B>(
21049 <b></b> <i></i>
21051 </pre>
21052 <dd> Returns the then child of an internal node. If
21053 <code>node</code> is a constant node, the result is unpredictable.
21054 The pointer passed to cuddT must be regular.
21057 <dd> <b>Side Effects</b> none
21060 <dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
21061 </code>
21063 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21065 <dt><pre>
21066 <A NAME=""></A>
21067 <I></I>
21068 <B></B>(
21069 <b></b> <i></i>
21071 </pre>
21072 <dd> Returns the then child of an internal node. If
21073 <code>node</code> is a constant node, the result is unpredictable.
21076 <dd> <b>Side Effects</b> none
21079 <dd> <b>See Also</b> <code><a href="#Cudd_E">Cudd_E</a>
21080 <a href="#Cudd_V">Cudd_V</a>
21081 </code>
21083 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
21085 <dt><pre>
21086 <A NAME=""></A>
21087 <I></I>
21088 <B></B>(
21089 <b></b> <i></i>
21091 </pre>
21092 <dd> Returns the value of a constant node. If
21093 <code>node</code> is an internal node, the result is unpredictable.
21094 The pointer passed to cuddV must be regular.
21097 <dd> <b>Side Effects</b> none
21100 <dd> <b>See Also</b> <code><a href="#Cudd_V">Cudd_V</a>
21101 </code>
21103 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21105 <dt><pre>
21106 <A NAME=""></A>
21107 <I></I>
21108 <B></B>(
21109 <b></b> <i></i>
21111 </pre>
21112 <dd> Returns the value of a constant node. If
21113 <code>node</code> is an internal node, the result is unpredictable.
21116 <dd> <b>Side Effects</b> none
21119 <dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
21120 <a href="#Cudd_E">Cudd_E</a>
21121 </code>
21123 <DD> <B>Defined in </B> <CODE>cudd.h</CODE>
21125 <dt><pre>
21126 <A NAME=""></A>
21127 <I></I>
21128 <B></B>(
21129 <b></b> <i></i>
21131 </pre>
21132 <dd> Saturating decrement operator.
21135 <dd> <b>Side Effects</b> none
21138 <dd> <b>See Also</b> <code><a href="#cuddSatInc">cuddSatInc</a>
21139 </code>
21141 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21143 <dt><pre>
21144 <A NAME=""></A>
21145 <I></I>
21146 <B></B>(
21147 <b></b> <i></i>
21149 </pre>
21150 <dd> Saturating increment operator.
21153 <dd> <b>Side Effects</b> none
21156 <dd> <b>See Also</b> <code><a href="#cuddSatDec">cuddSatDec</a>
21157 </code>
21159 <DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>
21162 </DL>
21163 <HR>
21164 Last updated on 20090220 23h06
21165 </BODY></HTML>