<html>
<head><title>The cudd package: all functions </title></head>
<body>


<HR>
<DL>
<dt><pre>
<A NAME="AssessPathLength"></A>
static unsigned int <I></I>
<B>AssessPathLength</B>(
  unsigned int * <b>pathLengthArray</b>, <i>array determining number of nodes belonging to the different path lengths</i>
  int  <b>threshold</b>, <i>threshold to determine maximum allowable nodes in the subset</i>
  int  <b>numVars</b>, <i>maximum number of variables</i>
  unsigned int * <b>excess</b>, <i>number of nodes labeled maxpath required in the subset</i>
  FILE * <b>fp</b> <i>where to write messages</i>
)
</pre>
<dd> Chooses the maximum allowable path length under each node.
  The corner cases are when the threshold is larger than the number
  of nodes in the BDD iself, in which case 'numVars + 1' is returned.
  If all nodes of a particular path length are needed, then the
  maxpath returned is the next one with excess nodes = 0;
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="BAapplyBias"></A>
static int <I></I>
<B>BAapplyBias</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>b</b>, <i></i>
  ApproxInfo * <b>info</b>, <i></i>
  DdHashTable * <b>cache</b> <i></i>
)
</pre>
<dd> Finds don't care nodes by traversing f and b in parallel.
  Returns the care status of the visited f node if successful; CARE_ERROR
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddBiasedUnderApprox">cuddBiasedUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="BAmarkNodes"></A>
static int <I></I>
<B>BAmarkNodes</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>function to be analyzed</i>
  ApproxInfo * <b>info</b>, <i>info on BDD</i>
  int  <b>threshold</b>, <i>when to stop approximating</i>
  double  <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
  double  <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
)
</pre>
<dd> Marks nodes for remapping. Returns 1 if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddBiasedUnderApprox">cuddBiasedUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="BuildConjuncts"></A>
static Conjuncts * <I></I>
<B>BuildConjuncts</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  st_table * <b>distanceTable</b>, <i></i>
  st_table * <b>cacheTable</b>, <i></i>
  int  <b>approxDistance</b>, <i></i>
  int  <b>maxLocalRef</b>, <i></i>
  st_table * <b>ghTable</b>, <i></i>
  st_table * <b>mintermTable</b> <i></i>
)
</pre>
<dd> Builds the conjuncts recursively, bottom up. Constants
  are returned as (f, f). The cache is checked for previously computed
  result. The decomposition points are determined by the local
  reference count of this node and the longest distance from the
  constant. At the decomposition point, the factors returned are (f,
  1). Recur on the two children. The order is determined by the
  heavier branch. Combine the factors of the two children and pick the
  one that already occurs in the gh table. Occurence in g is indicated
  by value 1, occurence in h by 2, occurence in both 3.
<p>

<dd> <b>See Also</b> <code><a href="#cuddConjunctsAux">cuddConjunctsAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="BuildSubsetBdd"></A>
static DdNode * <I></I>
<B>BuildSubsetBdd</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  GlobalInfo_t * <b>gInfo</b>, <i>global information</i>
  st_table * <b>pathTable</b>, <i>path table with path lengths and computed results</i>
  DdNode * <b>node</b>, <i>current node</i>
  struct AssortedInfo * <b>info</b>, <i>assorted information structure</i>
  st_table * <b>subsetNodeTable</b> <i>table storing computed results</i>
)
</pre>
<dd> Builds the BDD with nodes labeled with path length
  under maxpath and as many nodes labeled maxpath as determined by the
  threshold. The procedure uses the path table to determine which nodes
  in the original bdd need to be retained. This procedure picks a
  shortest path (tie break decided by taking the child with the shortest
  distance to the constant) and recurs down the path till it reaches the
  constant. the procedure then starts building the subset upward from
  the constant. All nodes labeled by path lengths less than the given
  maxpath are used to build the subset.  However, in the case of nodes
  that have label equal to maxpath, as many are chosen as required by
  the threshold. This number is stored in the info structure in the
  field thresholdReached. This field is decremented whenever a node
  labeled maxpath is encountered and the nodes labeled maxpath are
  aggregated in a maxpath table. As soon as the thresholdReached count
  goes to 0, the shortest path from this node to the constant is found.
  The extraction of nodes with the above labeling is based on the fact
  that each node, labeled with a path length, P, has at least one child
  labeled P or less. So extracting all nodes labeled a given path length
  P ensures complete paths between the root and the constant. Extraction
  of a partial number of nodes with a given path length may result in
  incomplete paths and hence the additional number of nodes are grabbed
  to complete the path. Since the Bdd is built bottom-up, other nodes
  labeled maxpath do lie on complete paths.  The procedure may cause the
  subset to have a larger or smaller number of nodes than the specified
  threshold. The increase in the number of nodes is caused by the
  building of a subset and the reduction by recombination. However in
  most cases, the recombination overshadows the increase and the
  procedure returns a result with lower number of nodes than specified.
  The subsetNodeTable is NIL when there is no hard limit on the number
  of nodes. Further efforts towards keeping the subset closer to the
  threshold number were abandoned in favour of keeping the procedure
  simple and fast.
<p>

<dd> <b>Side Effects</b> SubsetNodeTable is changed if it is not NIL.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="BuildSubsetBdd"></A>
static DdNode * <I></I>
<B>BuildSubsetBdd</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  int * <b>size</b>, <i>current size of the subset</i>
  st_table * <b>visitedTable</b>, <i>visited table storing all node data</i>
  int  <b>threshold</b>, <i></i>
  st_table * <b>storeTable</b>, <i></i>
  st_table * <b>approxTable</b> <i></i>
)
</pre>
<dd> The procedure carries out the building of the subset BDD
  starting at the root. Using the three different counts labelling each node,
  the procedure chooses the heavier branch starting from the root and keeps
  track of the number of nodes it discards at each step, thus keeping count
  of the size of the subset BDD dynamically. Once the threshold is satisfied,
  the procedure then calls ITE to build the BDD.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE *�value�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE *�value�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE *�value�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE *�value�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE �c�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE �c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE �ep�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE �ep�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE �upper�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE �upper�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE �value�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE �value�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CUDD_VALUE_TYPE �value�"></A>
 <I></I>
<B>CUDD_VALUE_TYPE �value�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="CheckInTables"></A>
static Conjuncts * <I></I>
<B>CheckInTables</B>(
  DdNode * <b>node</b>, <i></i>
  DdNode * <b>g1</b>, <i></i>
  DdNode * <b>h1</b>, <i></i>
  DdNode * <b>g2</b>, <i></i>
  DdNode * <b>h2</b>, <i></i>
  st_table * <b>ghTable</b>, <i></i>
  st_table * <b>cacheTable</b>, <i></i>
  int * <b>outOfMem</b> <i></i>
)
</pre>
<dd> Check if the two pairs exist in the table. If any of
  the conjuncts do exist, store in the cache and return the
  corresponding pair.
<p>

<dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
<a href="#BuildConjuncts">BuildConjuncts</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="CheckTablesCacheAndReturn"></A>
static Conjuncts * <I></I>
<B>CheckTablesCacheAndReturn</B>(
  DdNode * <b>node</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b>, <i></i>
  st_table * <b>ghTable</b>, <i></i>
  st_table * <b>cacheTable</b> <i></i>
)
</pre>
<dd> Check the tables for the existence of pair and return
  one combination, cache the result. The assumption is that one of the
  conjuncts is already in the tables.
<p>

<dd> <b>Side Effects</b> g and h referenced for the cache
<p>

<dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="ConjunctsFree"></A>
static void <I></I>
<B>ConjunctsFree</B>(
  DdManager * <b>dd</b>, <i></i>
  Conjuncts * <b>factors</b> <i></i>
)
</pre>
<dd> Free factors structure
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="CorrelCleanUp"></A>
static enum st_retval <I></I>
<B>CorrelCleanUp</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees memory associated with hash table. Returns
  ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>

<dt><pre>
<A NAME="CorrelCompare"></A>
static int <I></I>
<B>CorrelCompare</B>(
  const char * <b>key1</b>, <i></i>
  const char * <b>key2</b> <i></i>
)
</pre>
<dd> Compares two hash table entries. Returns 0 if they are
  identical; 1 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>

<dt><pre>
<A NAME="CorrelHash"></A>
static int <I></I>
<B>CorrelHash</B>(
  char * <b>key</b>, <i></i>
  int  <b>modulus</b> <i></i>
)
</pre>
<dd> Hashes a hash table entry. It is patterned after
  st_strhash. Returns a value between 0 and modulus.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>

<dt><pre>
<A NAME="CountMinterms"></A>
static double <I></I>
<B>CountMinterms</B>(
  DdNode * <b>node</b>, <i></i>
  double  <b>max</b>, <i></i>
  st_table * <b>mintermTable</b>, <i></i>
  FILE * <b>fp</b> <i></i>
)
</pre>
<dd> Count the number of minterms of each node ina a BDD and
  store it in a hash table.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="CreateBotDist"></A>
static NodeStat * <I></I>
<B>CreateBotDist</B>(
  DdNode * <b>node</b>, <i></i>
  st_table * <b>distanceTable</b> <i></i>
)
</pre>
<dd> Get longest distance of node from constant. Returns the
  distance of the root from the constant if successful; CUDD_OUT_OF_MEM
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="CreateBotDist"></A>
static int <I></I>
<B>CreateBotDist</B>(
  DdNode * <b>node</b>, <i>current node</i>
  st_table * <b>pathTable</b>, <i>path table with path lengths</i>
  unsigned int * <b>pathLengthArray</b>, <i>array that stores number of nodes belonging to a particular path length.</i>
  FILE * <b>fp</b> <i>where to write messages</i>
)
</pre>
<dd> Labels each node with the shortest distance from the constant.
  This is done in a DFS search of the BDD. Each node has an odd
  and even parity distance from the sink (since there exists paths to both
  zero and one) which is less than MAXSHORTINT. At each node these distances
  are updated using the minimum distance of its children from the constant.
  SInce now both the length from the root and child is known, the minimum path
  length(length of the shortest path between the root and the constant that
  this node lies on) of this node can be calculated and used to update the
  pathLengthArray
<p>

<dd> <b>Side Effects</b> Updates Path Table and path length array
<p>

<dd> <b>See Also</b> <code><a href="#CreatePathTable">CreatePathTable</a>
<a href="#CreateTopDist">CreateTopDist</a>
<a href="#AssessPathLength">AssessPathLength</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="CreatePathTable"></A>
static st_table * <I></I>
<B>CreatePathTable</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  GlobalInfo_t * <b>gInfo</b>, <i>global information</i>
  DdNode * <b>node</b>, <i>root of function</i>
  unsigned int * <b>pathLengthArray</b>, <i>array of path lengths to store nodes labeled with the various path lengths</i>
  FILE * <b>fp</b> <i>where to write messages</i>
)
</pre>
<dd> The outer procedure to label each node with its shortest
  distance from the root and constant. Calls CreateTopDist and CreateBotDist.
  The basis for computing the distance between root and constant is that
  the distance may be the sum of even distances from the node to the root
  and constant or the sum of odd distances from the node to the root and
  constant.  Both CreateTopDist and CreateBotDist create the odd and
  even parity distances from the root and constant respectively.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#CreateTopDist">CreateTopDist</a>
<a href="#CreateBotDist">CreateBotDist</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="CreateTopDist"></A>
static void <I></I>
<B>CreateTopDist</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  GlobalInfo_t * <b>gInfo</b>, <i>global information</i>
  st_table * <b>pathTable</b>, <i>hast table to store path lengths</i>
  int  <b>parentPage</b>, <i>the pointer to the page on which the first parent in the queue is to be found.</i>
  int  <b>parentQueueIndex</b>, <i>pointer to the first parent on the page</i>
  int  <b>topLen</b>, <i>current distance from the root</i>
  DdNode ** <b>childPage</b>, <i>pointer to the page on which the first child is to be added.</i>
  int  <b>childQueueIndex</b>, <i>pointer to the first child</i>
  int  <b>numParents</b>, <i>number of parents to process in this recursive call</i>
  FILE * <b>fp</b> <i>where to write messages</i>
)
</pre>
<dd> Labels each node with its shortest distance from the root.
  This is done in a BFS search of the BDD. The nodes are processed
  in a queue implemented as pages(array) to reduce memory fragmentation.
  An entry is created for each node visited. The distance from the root
  to the node with the corresponding  parity is updated. The procedure
  is called recursively each recusion level handling nodes at a given
  level from the root.
<p>

<dd> <b>Side Effects</b> Creates entries in the pathTable
<p>

<dd> <b>See Also</b> <code><a href="#CreatePathTable">CreatePathTable</a>
<a href="#CreateBotDist">CreateBotDist</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="Cudd_AggregationType �gc�"></A>
 <I></I>
<B>Cudd_AggregationType �gc�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_HookType �where�"></A>
 <I></I>
<B>Cudd_HookType �where�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_HookType �where�"></A>
 <I></I>
<B>Cudd_HookType �where�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_HookType �where�"></A>
 <I></I>
<B>Cudd_HookType �where�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_ReorderingType *�method�"></A>
 <I></I>
<B>Cudd_ReorderingType *�method�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_ReorderingType *�method�"></A>
 <I></I>
<B>Cudd_ReorderingType *�method�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_ReorderingType �method�"></A>
 <I></I>
<B>Cudd_ReorderingType �method�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="Cudd_ReorderingType �method�"></A>
 <I></I>
<B>Cudd_ReorderingType �method�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DD_PRFP �Pifunc�function used to build Pi if it is NULL"></A>
 <I></I>
<B>DD_PRFP �Pifunc�function used to build Pi if it is NULL</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaDigit �literal�"></A>
 <I></I>
<B>DdApaDigit �literal�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �b�"></A>
 <I></I>
<B>DdApaNumber �b�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �dest�"></A>
 <I></I>
<B>DdApaNumber �dest�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �diff�"></A>
 <I></I>
<B>DdApaNumber �diff�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �number�"></A>
 <I></I>
<B>DdApaNumber �number�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �number�"></A>
 <I></I>
<B>DdApaNumber �number�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �quotient�"></A>
 <I></I>
<B>DdApaNumber �quotient�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �quotient�"></A>
 <I></I>
<B>DdApaNumber �quotient�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �second�"></A>
 <I></I>
<B>DdApaNumber �second�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdApaNumber �sum�"></A>
 <I></I>
<B>DdApaNumber �sum�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdGen *�gen�"></A>
 <I></I>
<B>DdGen *�gen�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdGen *�gen�"></A>
 <I></I>
<B>DdGen *�gen�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�dd�"></A>
 <I></I>
<B>DdManager *�dd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�manager�"></A>
 <I></I>
<B>DdManager *�manager�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�table�"></A>
 <I></I>
<B>DdManager *�table�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�table�"></A>
 <I></I>
<B>DdManager *�table�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�table�"></A>
 <I></I>
<B>DdManager *�table�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�table�"></A>
 <I></I>
<B>DdManager *�table�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdManager *�unique�"></A>
 <I></I>
<B>DdManager *�unique�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�conjuncts�address of the array of conjuncts"></A>
 <I></I>
<B>DdNode ***�conjuncts�address of the array of conjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�conjuncts�address of the array of conjuncts"></A>
 <I></I>
<B>DdNode ***�conjuncts�address of the array of conjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�conjuncts�address of the array of conjuncts"></A>
 <I></I>
<B>DdNode ***�conjuncts�address of the array of conjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�conjuncts�address of the first factor"></A>
 <I></I>
<B>DdNode ***�conjuncts�address of the first factor</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�disjuncts�address of the array of the disjuncts"></A>
 <I></I>
<B>DdNode ***�disjuncts�address of the array of the disjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�disjuncts�address of the array of the disjuncts"></A>
 <I></I>
<B>DdNode ***�disjuncts�address of the array of the disjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�disjuncts�address of the array of the disjuncts"></A>
 <I></I>
<B>DdNode ***�disjuncts�address of the array of the disjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode ***�disjuncts�address of the array of the disjuncts"></A>
 <I></I>
<B>DdNode ***�disjuncts�address of the array of the disjuncts</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�g�"></A>
 <I></I>
<B>DdNode **�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�node�"></A>
 <I></I>
<B>DdNode **�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�node�"></A>
 <I></I>
<B>DdNode **�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�onlyG�cube of variables only in g"></A>
 <I></I>
<B>DdNode **�onlyG�cube of variables only in g</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�vectorOff�"></A>
 <I></I>
<B>DdNode **�vectorOff�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�vector�"></A>
 <I></I>
<B>DdNode **�vector�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�vector�"></A>
 <I></I>
<B>DdNode **�vector�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�vector�"></A>
 <I></I>
<B>DdNode **�vector�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�y�array of y variables"></A>
 <I></I>
<B>DdNode **�y�array of y variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�y�array of y variables"></A>
 <I></I>
<B>DdNode **�y�array of y variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�y�array of y variables"></A>
 <I></I>
<B>DdNode **�y�array of y variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�y�array of y variables"></A>
 <I></I>
<B>DdNode **�y�array of y variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�y�array of y variables"></A>
 <I></I>
<B>DdNode **�y�array of y variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�zdd_I�"></A>
 <I></I>
<B>DdNode **�zdd_I�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�z�array of z variables"></A>
 <I></I>
<B>DdNode **�z�array of z variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode **�z�array of z variables"></A>
 <I></I>
<B>DdNode **�z�array of z variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�B�"></A>
 <I></I>
<B>DdNode *�B�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�B�"></A>
 <I></I>
<B>DdNode *�B�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�D�"></A>
 <I></I>
<B>DdNode *�D�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�D�"></A>
 <I></I>
<B>DdNode *�D�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�P�"></A>
 <I></I>
<B>DdNode *�P�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�P�"></A>
 <I></I>
<B>DdNode *�P�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�Q�"></A>
 <I></I>
<B>DdNode *�Q�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�Q�"></A>
 <I></I>
<B>DdNode *�Q�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�Q�"></A>
 <I></I>
<B>DdNode *�Q�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�Q�"></A>
 <I></I>
<B>DdNode *�Q�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�U�"></A>
 <I></I>
<B>DdNode *�U�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�Y�"></A>
 <I></I>
<B>DdNode *�Y�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�bck�"></A>
 <I></I>
<B>DdNode *�bck�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�cube�"></A>
 <I></I>
<B>DdNode *�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�"></A>
 <I></I>
<B>DdNode *�c�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�c�constraint (care set)"></A>
 <I></I>
<B>DdNode *�c�constraint (care set)</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�epsilon�"></A>
 <I></I>
<B>DdNode *�epsilon�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�"></A>
 <I></I>
<B>DdNode *�f�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�DD whose support is sought"></A>
 <I></I>
<B>DdNode *�f�DD whose support is sought</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�DD whose support is sought"></A>
 <I></I>
<B>DdNode *�f�DD whose support is sought</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�DD whose support size is sought"></A>
 <I></I>
<B>DdNode *�f�DD whose support size is sought</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�ZDD whose support is sought"></A>
 <I></I>
<B>DdNode *�f�ZDD whose support is sought</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�function against which to expand"></A>
 <I></I>
<B>DdNode *�f�function against which to expand</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�function in which to remap variables"></A>
 <I></I>
<B>DdNode *�f�function in which to remap variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�f�function of which the cube is to be made a prime"></A>
 <I></I>
<B>DdNode *�f�function of which the cube is to be made a prime</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�"></A>
 <I></I>
<B>DdNode *�g�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�g�second operand"></A>
 <I></I>
<B>DdNode *�g�second operand</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�h�"></A>
 <I></I>
<B>DdNode *�h�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�h�"></A>
 <I></I>
<B>DdNode *�h�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�h�"></A>
 <I></I>
<B>DdNode *�h�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�h�"></A>
 <I></I>
<B>DdNode *�h�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�h�"></A>
 <I></I>
<B>DdNode *�h�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�node�"></A>
 <I></I>
<B>DdNode *�node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�n�"></A>
 <I></I>
<B>DdNode *�n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�n�"></A>
 <I></I>
<B>DdNode *�n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�n�"></A>
 <I></I>
<B>DdNode *�n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�n�"></A>
 <I></I>
<B>DdNode *�n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�n�"></A>
 <I></I>
<B>DdNode *�n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�p_node�"></A>
 <I></I>
<B>DdNode *�p_node�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�phaseBdd�cube of the phases"></A>
 <I></I>
<B>DdNode *�phaseBdd�cube of the phases</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�u�"></A>
 <I></I>
<B>DdNode *�u�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�u�upper bound"></A>
 <I></I>
<B>DdNode *�u�upper bound</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdNode *�var�variable"></A>
 <I></I>
<B>DdNode *�var�variable</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="DdTlcInfo *�t�"></A>
 <I></I>
<B>DdTlcInfo *�t�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="EpDouble *�epd�"></A>
 <I></I>
<B>EpDouble *�epd�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�"></A>
 <I></I>
<B>FILE *�fp�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�"></A>
 <I></I>
<B>FILE *�fp�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�"></A>
 <I></I>
<B>FILE *�fp�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�"></A>
 <I></I>
<B>FILE *�fp�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�"></A>
 <I></I>
<B>FILE *�fp�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�pointer to the dump file"></A>
 <I></I>
<B>FILE *�fp�pointer to the dump file</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�pointer to the dump file"></A>
 <I></I>
<B>FILE *�fp�pointer to the dump file</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�pointer to the dump file"></A>
 <I></I>
<B>FILE *�fp�pointer to the dump file</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�pointer to the dump file"></A>
 <I></I>
<B>FILE *�fp�pointer to the dump file</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="FILE *�fp�pointer to the dump file"></A>
 <I></I>
<B>FILE *�fp�pointer to the dump file</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="MarkCacheCleanUp"></A>
static enum st_retval <I></I>
<B>MarkCacheCleanUp</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees memory associated with computed table of
  cuddBddLICMarkEdges. Returns ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="MarkCacheCompare"></A>
static int <I></I>
<B>MarkCacheCompare</B>(
  const char * <b>ptr1</b>, <i></i>
  const char * <b>ptr2</b> <i></i>
)
</pre>
<dd> Comparison function for the computed table of
  cuddBddLICMarkEdges. Returns 0 if the two nodes of the key are equal; 1
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="MarkCacheHash"></A>
static int <I></I>
<B>MarkCacheHash</B>(
  char * <b>ptr</b>, <i></i>
  int  <b>modulus</b> <i></i>
)
</pre>
<dd> Hash function for the computed table of
  cuddBddLICMarkEdges.  Returns the bucket number.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="MtrNode *�tree�"></A>
 <I></I>
<B>MtrNode *�tree�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="MtrNode *�tree�"></A>
 <I></I>
<B>MtrNode *�tree�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="PMX"></A>
static int <I></I>
<B>PMX</B>(
  int  <b>maxvar</b> <i></i>
)
</pre>
<dd> Performs the crossover between two randomly chosen
  parents, and creates two children, x1 and x2. Uses the Partially
  Matched Crossover operator.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="PairInTables"></A>
static int <I></I>
<B>PairInTables</B>(
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b>, <i></i>
  st_table * <b>ghTable</b> <i></i>
)
</pre>
<dd> .Check whether the given pair is in the tables.  gTable
  and hTable are combined.
  absence in both is indicated by 0,
  presence in gTable is indicated by 1,
  presence in hTable by 2 and
  presence in both by 3.
  The values returned by this function are PAIR_ST,
  PAIR_CR, G_ST, G_CR, H_ST, H_CR, BOTH_G, BOTH_H, NONE.
  PAIR_ST implies g in gTable and h in hTable
  PAIR_CR implies g in hTable and h in gTable
  G_ST implies g in gTable and h not in any table
  G_CR implies g in hTable and h not in any table
  H_ST implies h in hTable and g not in any table
  H_CR implies h in gTable and g not in any table
  BOTH_G implies both in gTable
  BOTH_H implies both in hTable
  NONE implies none in table;
<p>

<dd> <b>See Also</b> <code><a href="#CheckTablesCacheAndReturn">CheckTablesCacheAndReturn</a>
<a href="#CheckInTables">CheckInTables</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="PickOnePair"></A>
static Conjuncts * <I></I>
<B>PickOnePair</B>(
  DdNode * <b>node</b>, <i></i>
  DdNode * <b>g1</b>, <i></i>
  DdNode * <b>h1</b>, <i></i>
  DdNode * <b>g2</b>, <i></i>
  DdNode * <b>h2</b>, <i></i>
  st_table * <b>ghTable</b>, <i></i>
  st_table * <b>cacheTable</b> <i></i>
)
</pre>
<dd> Check the tables for the existence of pair and return
  one combination, store in cache. The pair that has more pointers to
  it is picked. An approximation of the number of local pointers is
  made by taking the reference count of the pairs sent.
<p>

<dd> <b>See Also</b> <code><a href="#ZeroCase">ZeroCase</a>
<a href="#BuildConjuncts">BuildConjuncts</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="RAbuildSubset"></A>
static DdNode * <I></I>
<B>RAbuildSubset</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  ApproxInfo * <b>info</b> <i>node info</i>
)
</pre>
<dd> Builds the subset BDDfor cuddRemapUnderApprox.  Based
  on the info table, performs remapping or replacement at selected
  nodes. Returns a pointer to the result if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRemapUnderApprox">cuddRemapUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="RAmarkNodes"></A>
static int <I></I>
<B>RAmarkNodes</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>function to be analyzed</i>
  ApproxInfo * <b>info</b>, <i>info on BDD</i>
  int  <b>threshold</b>, <i>when to stop approximating</i>
  double  <b>quality</b> <i>minimum improvement for accepted changes</i>
)
</pre>
<dd> Marks nodes for remapping. Returns 1 if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRemapUnderApprox">cuddRemapUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="ResizeCountMintermPages"></A>
static void <I></I>
<B>ResizeCountMintermPages</B>(
   <b></b> <i></i>
)
</pre>
<dd> Resize the number of pages allocated to store the minterm
  counts.  The procedure  moves the counter to the next page when the
  end of the page is reached and allocates new pages when necessary.
<p>

<dd> <b>Side Effects</b> Changes the size of minterm pages, page, page index, maximum
  number of pages freeing stuff in case of memory out.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="ResizeCountNodePages"></A>
static void <I></I>
<B>ResizeCountNodePages</B>(
   <b></b> <i></i>
)
</pre>
<dd> Resize the number of pages allocated to store the node counts.
  The procedure  moves the counter to the next page when the end of
  the page is reached and allocates new pages when necessary.
<p>

<dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
  number of pages freeing stuff in case of memory out.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="ResizeNodeDataPages"></A>
static void <I></I>
<B>ResizeNodeDataPages</B>(
   <b></b> <i></i>
)
</pre>
<dd> Resize the number of pages allocated to store the node data
  The procedure  moves the counter to the next page when the end of
  the page is reached and allocates new pages when necessary.
<p>

<dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
  number of pages freeing stuff in case of memory out.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="ResizeNodeDistPages"></A>
static void <I></I>
<B>ResizeNodeDistPages</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  GlobalInfo_t * <b>gInfo</b> <i>global information</i>
)
</pre>
<dd> Resize the number of pages allocated to store the distances
  related to each node. The procedure  moves the counter to the
  next page when the end of the page is reached and allocates new
  pages when necessary.
<p>

<dd> <b>Side Effects</b> Changes the size of  pages, page, page index, maximum
  number of pages freeing stuff in case of memory out.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="ResizeQueuePages"></A>
static void <I></I>
<B>ResizeQueuePages</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  GlobalInfo_t * <b>gInfo</b> <i>global information</i>
)
</pre>
<dd> Resize the number of pages allocated to store nodes in the BFS
  traversal of the Bdd. The procedure  moves the counter to the
  next page when the end of the page is reached and allocates new
  pages when necessary.
<p>

<dd> <b>Side Effects</b> Changes the size of pages, page, page index, maximum
  number of pages freeing stuff in case of memory out.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="StoreNodes"></A>
static void <I></I>
<B>StoreNodes</B>(
  st_table * <b>storeTable</b>, <i></i>
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> rocedure to recursively store nodes that are retained in the subset.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#StoreNodes">StoreNodes</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="SubsetCountMintermAux"></A>
static double <I></I>
<B>SubsetCountMintermAux</B>(
  DdNode * <b>node</b>, <i>function to analyze</i>
  double  <b>max</b>, <i>number of minterms of constant 1</i>
  st_table * <b>table</b> <i>visitedTable table</i>
)
</pre>
<dd> Recursively counts minterms of each node in the DAG.
  Similar to the cuddCountMintermAux which recursively counts the
  number of minterms for the dag rooted at each node in terms of the
  total number of variables (max). This procedure creates the node
  data structure and stores the minterm count as part of the node
  data structure.
<p>

<dd> <b>Side Effects</b> Creates structures of type node quality and fills the st_table
<p>

<dd> <b>See Also</b> <code><a href="#SubsetCountMinterm">SubsetCountMinterm</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="SubsetCountMinterm"></A>
static st_table * <I></I>
<B>SubsetCountMinterm</B>(
  DdNode * <b>node</b>, <i>function to be analyzed</i>
  int  <b>nvars</b> <i>number of variables node depends on</i>
)
</pre>
<dd> Counts minterms of each node in the DAG. Similar to the
  Cudd_CountMinterm procedure except this returns the minterm count for
  all the nodes in the bdd in an st_table.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#SubsetCountMintermAux">SubsetCountMintermAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="SubsetCountNodesAux"></A>
static int <I></I>
<B>SubsetCountNodesAux</B>(
  DdNode * <b>node</b>, <i>current node</i>
  st_table * <b>table</b>, <i>table to update node count, also serves as visited table.</i>
  double  <b>max</b> <i>maximum number of variables</i>
)
</pre>
<dd> Recursively counts the number of nodes under the dag.
  Also counts the number of nodes under the lighter child of
  this node. . Note that the same dag may be the lighter child of two
  different nodes and have different counts. As with the minterm counts,
  the node counts are stored in pages to be space efficient and the
  address for these node counts are stored in an st_table associated
  to each node.
<p>

<dd> <b>Side Effects</b> Updates the node data table with node counts
<p>

<dd> <b>See Also</b> <code><a href="#SubsetCountNodes">SubsetCountNodes</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="SubsetCountNodes"></A>
static int <I></I>
<B>SubsetCountNodes</B>(
  DdNode * <b>node</b>, <i>function to be analyzed</i>
  st_table * <b>table</b>, <i>node quality table</i>
  int  <b>nvars</b> <i>number of variables node depends on</i>
)
</pre>
<dd> Counts the nodes under the current node and its lighter
  child. Calls a recursive procedure to count the number of nodes of
  a DAG rooted at a particular node and the number of nodes taken by its
  lighter child.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#SubsetCountNodesAux">SubsetCountNodesAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="UAbuildSubset"></A>
static DdNode * <I></I>
<B>UAbuildSubset</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  ApproxInfo * <b>info</b> <i>node info</i>
)
</pre>
<dd> Builds the subset BDD. Based on the info table,
  replaces selected nodes by zero. Returns a pointer to the result if
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="UAmarkNodes"></A>
static int <I></I>
<B>UAmarkNodes</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>function to be analyzed</i>
  ApproxInfo * <b>info</b>, <i>info on BDD</i>
  int  <b>threshold</b>, <i>when to stop approximating</i>
  int  <b>safe</b>, <i>enforce safe approximation</i>
  double  <b>quality</b> <i>minimum improvement for accepted changes</i>
)
</pre>
<dd> Marks nodes for replacement by zero. Returns 1 if successful;
  0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="ZeroCase"></A>
static Conjuncts * <I></I>
<B>ZeroCase</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  Conjuncts * <b>factorsNv</b>, <i></i>
  st_table * <b>ghTable</b>, <i></i>
  st_table * <b>cacheTable</b>, <i></i>
  int  <b>switched</b> <i></i>
)
</pre>
<dd> If one child is zero, do explicitly what Restrict does or better.
  First separate a variable and its child in the base case. In case of a cube
  times a function, separate the cube and function. As a last resort, look in
  tables.
<p>

<dd> <b>Side Effects</b> Frees the BDDs in factorsNv. factorsNv itself is not freed
  because it is freed above.
<p>

<dd> <b>See Also</b> <code><a href="#BuildConjuncts">BuildConjuncts</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="addBddDoInterval"></A>
static DdNode * <I></I>
<B>addBddDoInterval</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>l</b>, <i></i>
  DdNode * <b>u</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addBddInterval.
  Returns a pointer to the BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#addBddDoThreshold">addBddDoThreshold</a>
<a href="#addBddDoStrictThreshold">addBddDoStrictThreshold</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="addBddDoIthBit"></A>
static DdNode * <I></I>
<B>addBddDoIthBit</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>index</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addBddIthBit.
  Returns a pointer to the BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="addBddDoStrictThreshold"></A>
static DdNode * <I></I>
<B>addBddDoStrictThreshold</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>val</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addBddStrictThreshold.
  Returns a pointer to the BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#addBddDoThreshold">addBddDoThreshold</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="addBddDoThreshold"></A>
static DdNode * <I></I>
<B>addBddDoThreshold</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>val</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addBddThreshold.
  Returns a pointer to the BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#addBddDoStrictThreshold">addBddDoStrictThreshold</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="addCheckPositiveCube"></A>
static int <I></I>
<B>addCheckPositiveCube</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Checks whether cube is an ADD representing the product of
  positive literals. Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>

<dt><pre>
<A NAME="addDoIthBit"></A>
static DdNode * <I></I>
<B>addDoIthBit</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>index</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addIthBit.
  Returns a pointer to the BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddFind.c"TARGET="ABSTRACT"><CODE>cuddAddFind.c</CODE></A>

<dt><pre>
<A NAME="addMMRecur"></A>
static DdNode * <I></I>
<B>addMMRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>A</b>, <i></i>
  DdNode * <b>B</b>, <i></i>
  int  <b>topP</b>, <i></i>
  int * <b>vars</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addMatrixMultiply.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>

<dt><pre>
<A NAME="addMultiplicityGroups"></A>
static int <I></I>
<B>addMultiplicityGroups</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  MtrNode * <b>treenode</b>, <i>current tree node</i>
  int  <b>multiplicity</b>, <i>how many ZDD vars per BDD var</i>
  char * <b>vmask</b>, <i>variable pairs for which a group has been already built</i>
  char * <b>lmask</b> <i>levels for which a group has already been built</i>
)
</pre>
<dd> Adds multiplicity groups to a ZDD variable group tree.
  Returns 1 if successful; 0 otherwise. This function creates the groups
  for set of ZDD variables (whose cardinality is given by parameter
  multiplicity) that are created for each BDD variable in
  Cudd_zddVarsFromBddVars. The crux of the matter is to determine the index
  each new group. (The index of the first variable in the group.)
  We first build all the groups for the children of a node, and then deal
  with the ZDD variables that are directly attached to the node. The problem
  for these is that the tree itself does not provide information on their
  position inside the group. While we deal with the children of the node,
  therefore, we keep track of all the positions they occupy. The remaining
  positions in the tree can be freely used. Also, we keep track of all the
  variables placed in the children. All the remaining variables are directly
  attached to the group. We can then place any pair of variables not yet
  grouped in any pair of available positions in the node.
<p>

<dd> <b>Side Effects</b> Changes the variable group tree.
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddVarsFromBddVars">Cudd_zddVarsFromBddVars</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>

<dt><pre>
<A NAME="addTriangleRecur"></A>
static DdNode * <I></I>
<B>addTriangleRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  int * <b>vars</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addTriangle. Returns
  a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>

<dt><pre>
<A NAME="addVarToConst"></A>
static void <I></I>
<B>addVarToConst</B>(
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>gp</b>, <i></i>
  DdNode ** <b>hp</b>, <i></i>
  DdNode * <b>one</b>, <i></i>
  DdNode * <b>zero</b> <i></i>
)
</pre>
<dd> Replaces variables with constants if possible (part of
  canonical form).
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>

<dt><pre>
<A NAME="addWalshInt"></A>
static DdNode * <I></I>
<B>addWalshInt</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode ** <b>x</b>, <i></i>
  DdNode ** <b>y</b>, <i></i>
  int  <b>n</b> <i></i>
)
</pre>
<dd> Generates a Walsh matrix in ADD form. Returns a pointer
  to the matrixi if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddWalsh.c"TARGET="ABSTRACT"><CODE>cuddAddWalsh.c</CODE></A>

<dt><pre>
<A NAME="array_compare"></A>
static int <I></I>
<B>array_compare</B>(
  const char * <b>array1</b>, <i></i>
  const char * <b>array2</b> <i></i>
)
</pre>
<dd> Comparison function for the computed table. Returns 0 if
  the two arrays are equal; 1 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="array_hash"></A>
static int <I></I>
<B>array_hash</B>(
  char * <b>array</b>, <i></i>
  int  <b>modulus</b> <i></i>
)
</pre>
<dd> Hash function for the computed table. Returns the bucket
  number.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="bddAnnotateMintermCount"></A>
static double <I></I>
<B>bddAnnotateMintermCount</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  double  <b>max</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Annotates every node in the BDD node with its minterm count.
  In this function, every node and the minterm count represented by it are
  stored in a hash table.
<p>

<dd> <b>Side Effects</b> Fills up 'table' with the pair <node,minterm_count>.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>

<dt><pre>
<A NAME="bddCheckPositiveCube"></A>
static int <I></I>
<B>bddCheckPositiveCube</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>

<dt><pre>
<A NAME="bddCorrelationAux"></A>
static double <I></I>
<B>bddCorrelationAux</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddCorrelation.
  Returns the fraction of minterms in the ON-set of the EXNOR of f and
  g.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bddCorrelationWeightsAux">bddCorrelationWeightsAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>

<dt><pre>
<A NAME="bddCorrelationWeightsAux"></A>
static double <I></I>
<B>bddCorrelationWeightsAux</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  double * <b>prob</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddCorrelationWeigths.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bddCorrelationAux">bddCorrelationAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddCorr.c"TARGET="ABSTRACT"><CODE>cuddBddCorr.c</CODE></A>

<dt><pre>
<A NAME="bddFixTree"></A>
static void <I></I>
<B>bddFixTree</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b> <i></i>
)
</pre>
<dd> Fixes the BDD variable group tree after a
  shuffle. Assumes that the order of the variables in a terminal node
  has not been changed.
<p>

<dd> <b>Side Effects</b> Changes the BDD variable group tree.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="bddVarToCanonicalSimple"></A>
static int <I></I>
<B>bddVarToCanonicalSimple</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode ** <b>fp</b>, <i></i>
  DdNode ** <b>gp</b>, <i></i>
  DdNode ** <b>hp</b>, <i></i>
  unsigned int * <b>topfp</b>, <i></i>
  unsigned int * <b>topgp</b>, <i></i>
  unsigned int * <b>tophp</b> <i></i>
)
</pre>
<dd> Makes sure the first two pointers are regular.  This
  mat require the complementation of the result, which is signaled by
  returning 1 instead of 0.  This function is simpler than the general
  case because it assumes that no two arguments are the same or
  complementary, and no argument is constant.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bddVarToConst">bddVarToConst</a>
<a href="#bddVarToCanonical">bddVarToCanonical</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="bddVarToCanonical"></A>
static int <I></I>
<B>bddVarToCanonical</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode ** <b>fp</b>, <i></i>
  DdNode ** <b>gp</b>, <i></i>
  DdNode ** <b>hp</b>, <i></i>
  unsigned int * <b>topfp</b>, <i></i>
  unsigned int * <b>topgp</b>, <i></i>
  unsigned int * <b>tophp</b> <i></i>
)
</pre>
<dd> Reduces 2 variable expressions to canonical form.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bddVarToConst">bddVarToConst</a>
<a href="#bddVarToCanonicalSimple">bddVarToCanonicalSimple</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="bddVarToConst"></A>
static void <I></I>
<B>bddVarToConst</B>(
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>gp</b>, <i></i>
  DdNode ** <b>hp</b>, <i></i>
  DdNode * <b>one</b> <i></i>
)
</pre>
<dd> This function performs part of the transformation to
  standard form by replacing variables with constants if possible.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bddVarToCanonical">bddVarToCanonical</a>
<a href="#bddVarToCanonicalSimple">bddVarToCanonicalSimple</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="beforep"></A>
static int <I></I>
<B>beforep</B>(
  DdHalfWord  <b>var1a</b>, <i></i>
  short  <b>phase1a</b>, <i></i>
  DdHalfWord  <b>var1b</b>, <i></i>
  short  <b>phase1b</b>, <i></i>
  DdHalfWord  <b>var2a</b>, <i></i>
  short  <b>phase2a</b>, <i></i>
  DdHalfWord  <b>var2b</b>, <i></i>
  short  <b>phase2b</b> <i></i>
)
</pre>
<dd> Returns true iff the first argument precedes the second
  in the clause order.  A clause precedes another if its first lieral
  precedes the first literal of the other, or if the first literals
  are the same, and its second literal precedes the second literal of
  the other clause.  A literal precedes another if it has a higher
  index, of if it has the same index, but it has lower phase.  Phase 0
  is the positive phase, and it is lower than Phase 1 (negative
  phase).
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#equalp">equalp</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="bitVectorAlloc"></A>
static BitVector * <I></I>
<B>bitVectorAlloc</B>(
  int  <b>size</b> <i></i>
)
</pre>
<dd> Allocates a bit vector.  The parameter size gives the
  number of bits.  This procedure allocates enough long's to hold the
  specified number of bits.  Returns a pointer to the allocated vector
  if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bitVectorClear">bitVectorClear</a>
<a href="#bitVectorFree">bitVectorFree</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="bitVectorFree"></A>
static void <I></I>
<B>bitVectorFree</B>(
  BitVector * <b>vector</b> <i></i>
)
</pre>
<dd> Frees a bit vector.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bitVectorAlloc">bitVectorAlloc</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="build_dd"></A>
static int <I></I>
<B>build_dd</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>num</b>, <i>the index of the individual to be built</i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Builds a DD from a given order.  This procedure also
  sifts the final order and inserts into the array the size in nodes
  of the result. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="char *�string�"></A>
 <I></I>
<B>char *�string�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="char *�str�pointer to string to use if != NULL"></A>
 <I></I>
<B>char *�str�pointer to string to use if != NULL</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="checkSymmInfo"></A>
static int <I></I>
<B>checkSymmInfo</B>(
  DdManager * <b>table</b>, <i></i>
  DdHalfWord * <b>symmInfo</b>, <i></i>
  int  <b>index</b>, <i></i>
  int  <b>level</b> <i></i>
)
</pre>
<dd> Returns 1 if a variable is the one with the highest index
  among those belonging to a symmetry group that are in the top part of
  the BDD.  The top part is given by level.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#initSymmInfo">initSymmInfo</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="computeClausesWithUniverse"></A>
static DdTlcInfo * <I></I>
<B>computeClausesWithUniverse</B>(
  DdTlcInfo * <b>Cres</b>, <i>list of clauses for child</i>
  DdHalfWord  <b>label</b>, <i>variable labeling the current node</i>
  short  <b>phase</b> <i>0 if E child is zero; 1 if T child is zero</i>
)
</pre>
<dd> Computes the two-literal clauses for a node with a zero
  child, given the clauses for its other child and the label of the
  node.  Returns a pointer to a TclInfo structure if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#computeClauses">computeClauses</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="computeClauses"></A>
static DdTlcInfo * <I></I>
<B>computeClauses</B>(
  DdTlcInfo * <b>Tres</b>, <i>list of clauses for T child</i>
  DdTlcInfo * <b>Eres</b>, <i>list of clauses for E child</i>
  DdHalfWord  <b>label</b>, <i>variable labeling the current node</i>
  int  <b>size</b> <i>number of variables in the manager</i>
)
</pre>
<dd> Computes the two-literal clauses for a node given the
  clauses for its children and the label of the node.  Returns a
  pointer to a TclInfo structure if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#computeClausesWithUniverse">computeClausesWithUniverse</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="computeLB"></A>
static int <I></I>
<B>computeLB</B>(
  DdManager * <b>table</b>, <i>manager</i>
  DdHalfWord * <b>order</b>, <i>optimal order for the subset</i>
  int  <b>roots</b>, <i>roots between lower and upper</i>
  int  <b>cost</b>, <i>minimum cost for the subset</i>
  int  <b>lower</b>, <i>lower level to be reordered</i>
  int  <b>upper</b>, <i>upper level to be reordered</i>
  int  <b>level</b> <i>offset for the current top bottom var</i>
)
</pre>
<dd> Computes a lower bound on the size of a BDD from the
  following factors:
  <ul>
  <li> size of the lower part of it;
  <li> size of the part of the upper part not subjected to reordering;
  <li> number of roots in the part of the BDD subjected to reordering;
  <li> variable in the support of the roots in the upper part of the
       BDD subjected to reordering.
  <ul/>
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="computeSavings"></A>
static int <I></I>
<B>computeSavings</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>skip</b>, <i></i>
  ApproxInfo * <b>info</b>, <i></i>
  DdLevelQueue * <b>queue</b> <i></i>
)
</pre>
<dd> Counts the nodes that would be eliminated if a given
  node were replaced by zero. This procedure uses a queue passed by
  the caller for efficiency: since the queue is left empty at the
  endof the search, it can be reused as is by the next search. Returns
  the count (always striclty positive) if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code>UAmarkNodes
RAmarkNodes
BAmarkNodes
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="copyOrder"></A>
static void <I></I>
<B>copyOrder</B>(
  DdManager * <b>table</b>, <i></i>
  int * <b>array</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Copies the current variable order to array.
  At the same time inverts the permutation.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="createResult"></A>
static DdNode * <I></I>
<B>createResult</B>(
  DdManager * <b>dd</b>, <i></i>
  unsigned int  <b>index</b>, <i></i>
  unsigned int  <b>phase</b>, <i></i>
  DdNode * <b>cube</b>, <i></i>
  CUDD_VALUE_TYPE  <b>distance</b> <i></i>
)
</pre>
<dd> Builds a result for cache storage.  Returns a pointer
  to the resulting ADD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddBddClosestCube">cuddBddClosestCube</a>
separateCube
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>

<dt><pre>
<A NAME="cuddAddApplyRecur"></A>
DdNode * <I></I>
<B>cuddAddApplyRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DD_AOP  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addApply. Returns a
  pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddAddMonadicApplyRecur">cuddAddMonadicApplyRecur</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>

<dt><pre>
<A NAME="cuddAddBddDoPattern"></A>
DdNode * <I></I>
<B>cuddAddBddDoPattern</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_addBddPattern. Returns a
  pointer to the resulting BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="cuddAddCmplRecur"></A>
DdNode * <I></I>
<B>cuddAddCmplRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addCmpl. Returns a
  pointer to the resulting ADD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addCmpl">Cudd_addCmpl</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddAddComposeRecur"></A>
DdNode * <I></I>
<B>cuddAddComposeRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>proj</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addCompose.
  Returns the composed BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addCompose">Cudd_addCompose</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddAddConstrainRecur"></A>
DdNode * <I></I>
<B>cuddAddConstrainRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>c</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addConstrain.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addConstrain">Cudd_addConstrain</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddAddExistAbstractRecur"></A>
DdNode * <I></I>
<B>cuddAddExistAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addExistAbstract.
  Returns the ADD obtained by abstracting the variables of cube from f,
  if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddAddGeneralVectorComposeRecur"></A>
static DdNode * <I></I>
<B>cuddAddGeneralVectorComposeRecur</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdHashTable * <b>table</b>, <i>computed table</i>
  DdNode * <b>f</b>, <i>ADD in which to compose</i>
  DdNode ** <b>vectorOn</b>, <i>functions to substitute for x_i</i>
  DdNode ** <b>vectorOff</b>, <i>functions to substitute for x_i'</i>
  int  <b>deepest</b> <i>depth of deepest substitution</i>
)
</pre>
<dd> Performs the recursive step of Cudd_addGeneralVectorCompose.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddAddIteRecur"></A>
DdNode * <I></I>
<B>cuddAddIteRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_addIte(f,g,h).
  Returns a pointer to the resulting ADD if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addIte">Cudd_addIte</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddIte.c"TARGET="ABSTRACT"><CODE>cuddAddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddAddMonadicApplyRecur"></A>
DdNode * <I></I>
<B>cuddAddMonadicApplyRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DD_MAOP  <b>op</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addMonadicApply. Returns a
  pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddAddApplyRecur">cuddAddApplyRecur</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddApply.c"TARGET="ABSTRACT"><CODE>cuddAddApply.c</CODE></A>

<dt><pre>
<A NAME="cuddAddNegateRecur"></A>
DdNode * <I></I>
<B>cuddAddNegateRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_addNegate.
  Returns a pointer to the result.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>

<dt><pre>
<A NAME="cuddAddNonSimComposeRecur"></A>
static DdNode * <I></I>
<B>cuddAddNonSimComposeRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>vector</b>, <i></i>
  DdNode * <b>key</b>, <i></i>
  DdNode * <b>cube</b>, <i></i>
  int  <b>lastsub</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addNonSimCompose.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddAddOrAbstractRecur"></A>
DdNode * <I></I>
<B>cuddAddOrAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addOrAbstract.
  Returns the ADD obtained by abstracting the variables of cube from f,
  if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddAddOuterSumRecur"></A>
static DdNode * <I></I>
<B>cuddAddOuterSumRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>M</b>, <i></i>
  DdNode * <b>r</b>, <i></i>
  DdNode * <b>c</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addOuterSum.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddMatMult.c"TARGET="ABSTRACT"><CODE>cuddMatMult.c</CODE></A>

<dt><pre>
<A NAME="cuddAddPermuteRecur"></A>
static DdNode * <I></I>
<B>cuddAddPermuteRecur</B>(
  DdManager * <b>manager</b>, <i>DD manager</i>
  DdHashTable * <b>table</b>, <i>computed table</i>
  DdNode * <b>node</b>, <i>ADD to be reordered</i>
  int * <b>permut</b> <i>permutation array</i>
)
</pre>
<dd> Recursively puts the ADD in the order given in the
  array permut. Checks for trivial cases to terminate recursion, then
  splits on the children of this node.  Once the solutions for the
  children are obtained, it puts into the current position the node
  from the rest of the ADD that should be here. Then returns this ADD.
  The key here is that the node being visited is NOT put in its proper
  place by this instance, but rather is switched when its proper
  position is reached in the recursion tree.<p>
  The DdNode * that is returned is the same ADD as passed in as node,
  but in the new order.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addPermute">Cudd_addPermute</a>
<a href="#cuddBddPermuteRecur">cuddBddPermuteRecur</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddAddRestrictRecur"></A>
DdNode * <I></I>
<B>cuddAddRestrictRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>c</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addRestrict.
  Returns the restricted ADD if successful; otherwise NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_addRestrict">Cudd_addRestrict</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddAddRoundOffRecur"></A>
DdNode * <I></I>
<B>cuddAddRoundOffRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  double  <b>trunc</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_addRoundOff.
  Returns a pointer to the result.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddNeg.c"TARGET="ABSTRACT"><CODE>cuddAddNeg.c</CODE></A>

<dt><pre>
<A NAME="cuddAddScalarInverseRecur"></A>
DdNode * <I></I>
<B>cuddAddScalarInverseRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>epsilon</b> <i></i>
)
</pre>
<dd> Returns a pointer to the resulting ADD in case of
  success. Returns NULL if any discriminants smaller than epsilon is
  encountered.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddInv.c"TARGET="ABSTRACT"><CODE>cuddAddInv.c</CODE></A>

<dt><pre>
<A NAME="cuddAddUnivAbstractRecur"></A>
DdNode * <I></I>
<B>cuddAddUnivAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_addUnivAbstract.
  Returns the ADD obtained by abstracting the variables of cube from f,
  if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAddAbs.c"TARGET="ABSTRACT"><CODE>cuddAddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddAddVectorComposeRecur"></A>
static DdNode * <I></I>
<B>cuddAddVectorComposeRecur</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdHashTable * <b>table</b>, <i>computed table</i>
  DdNode * <b>f</b>, <i>ADD in which to compose</i>
  DdNode ** <b>vector</b>, <i>functions to substitute</i>
  int  <b>deepest</b> <i>depth of deepest substitution</i>
)
</pre>
<dd> Performs the recursive step of Cudd_addVectorCompose.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddAllocNode"></A>
DdNode * <I></I>
<B>cuddAllocNode</B>(
  DdManager * <b>unique</b> <i></i>
)
</pre>
<dd> Fast storage allocation for DdNodes in the table. The
  first 4 bytes of a chunk contain a pointer to the next block; the
  rest contains DD_MEM_CHUNK spaces for DdNodes.  Returns a pointer to
  a new node if successful; NULL is memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddAnnealing"></A>
int <I></I>
<B>cuddAnnealing</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Get x, y by random selection. Choose either
  exchange or jump randomly. In case of jump, choose between jump_up
  and jump_down randomly. Do exchange or jump and get optimal case.
  Loop until there is no improvement or temperature reaches
  minimum. Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="cuddApaCountMintermAux"></A>
static DdApaNumber <I></I>
<B>cuddApaCountMintermAux</B>(
  DdNode * <b>node</b>, <i></i>
  int  <b>digits</b>, <i></i>
  DdApaNumber  <b>max</b>, <i></i>
  DdApaNumber  <b>min</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_ApaCountMinterm.
  It is based on the following identity. Let |f| be the
  number of minterms of f. Then:
  <xmp>
    |f| = (|f0|+|f1|)/2
  </xmp>
  where f0 and f1 are the two cofactors of f.
  Uses the identity <code>|f'| = max - |f|</code>.
  The procedure expects the argument "node" to be a regular pointer, and
  guarantees this condition is met in the recursive calls.
  For efficiency, the result of a call is cached only if the node has
  a reference count greater than 1.
  Returns the number of minterms of the function rooted at node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>

<dt><pre>
<A NAME="cuddApaStCountfree"></A>
static enum st_retval <I></I>
<B>cuddApaStCountfree</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the memory used to store the minterm counts
  recorded in the visited table. Returns ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApa.c"TARGET="ABSTRACT"><CODE>cuddApa.c</CODE></A>

<dt><pre>
<A NAME="cuddBddAlignToZdd"></A>
int <I></I>
<B>cuddBddAlignToZdd</B>(
  DdManager * <b>table</b> <i>DD manager</i>
)
</pre>
<dd> Reorders BDD variables according to the order of the
  ZDD variables. This function can be called at the end of ZDD
  reordering to insure that the order of the BDD variables is
  consistent with the order of the ZDD variables. The number of ZDD
  variables must be a multiple of the number of BDD variables. Let
  <code>M</code> be the ratio of the two numbers. cuddBddAlignToZdd
  then considers the ZDD variables from <code>M*i</code> to
  <code>(M+1)*i-1</code> as corresponding to BDD variable
  <code>i</code>.  This function should be normally called from
  Cudd_zddReduceHeap, which clears the cache.  Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> Changes the BDD variable order for all diagrams and performs
  garbage collection of the BDD unique table.
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ShuffleHeap">Cudd_ShuffleHeap</a>
<a href="#Cudd_zddReduceHeap">Cudd_zddReduceHeap</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddBddAndAbstractRecur"></A>
DdNode * <I></I>
<B>cuddBddAndAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Takes the AND of two BDDs and simultaneously abstracts
  the variables in cube. The variables are existentially abstracted.
  Returns a pointer to the result is successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAndAbs.c"TARGET="ABSTRACT"><CODE>cuddAndAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddBddAndRecur"></A>
DdNode * <I></I>
<B>cuddBddAndRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddAnd by taking
  the conjunction of two BDDs.  Returns a pointer to the result is
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddAnd">Cudd_bddAnd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddBddBooleanDiffRecur"></A>
DdNode * <I></I>
<B>cuddBddBooleanDiffRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>var</b> <i></i>
)
</pre>
<dd> Performs the recursive steps of Cudd_bddBoleanDiff.
  Returns the BDD obtained by XORing the cofactors of f with respect to
  var if successful; NULL otherwise. Exploits the fact that dF/dx =
  dF'/dx.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddBddCharToVect"></A>
static DdNode * <I></I>
<B>cuddBddCharToVect</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>x</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddCharToVect.
  This function maintains the invariant that f is non-zero.
  Returns the i-th component of the vector if successful; otherwise NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddCharToVect">Cudd_bddCharToVect</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddClipAndAbsRecur"></A>
static DdNode * <I></I>
<B>cuddBddClipAndAbsRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>cube</b>, <i></i>
  int  <b>distance</b>, <i></i>
  int  <b>direction</b> <i></i>
)
</pre>
<dd> Approximates the AND of two BDDs and simultaneously
  abstracts the variables in cube. The variables are existentially
  abstracted.  Returns a pointer to the result is successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAndAbstract">Cudd_bddClippingAndAbstract</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>

<dt><pre>
<A NAME="cuddBddClippingAndAbstract"></A>
DdNode * <I></I>
<B>cuddBddClippingAndAbstract</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>first conjunct</i>
  DdNode * <b>g</b>, <i>second conjunct</i>
  DdNode * <b>cube</b>, <i>cube of variables to be abstracted</i>
  int  <b>maxDepth</b>, <i>maximum recursion depth</i>
  int  <b>direction</b> <i>under (0) or over (1) approximation</i>
)
</pre>
<dd> Approximates the conjunction of two BDDs f and g and
  simultaneously abstracts the variables in cube. Returns a
  pointer to the resulting BDD if successful; NULL if the intermediate
  result blows up.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAndAbstract">Cudd_bddClippingAndAbstract</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>

<dt><pre>
<A NAME="cuddBddClippingAndRecur"></A>
static DdNode * <I></I>
<B>cuddBddClippingAndRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  int  <b>distance</b>, <i></i>
  int  <b>direction</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddClippingAnd by taking
  the conjunction of two BDDs.  Returns a pointer to the result is
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddBddClippingAnd">cuddBddClippingAnd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>

<dt><pre>
<A NAME="cuddBddClippingAnd"></A>
DdNode * <I></I>
<B>cuddBddClippingAnd</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>first conjunct</i>
  DdNode * <b>g</b>, <i>second conjunct</i>
  int  <b>maxDepth</b>, <i>maximum recursion depth</i>
  int  <b>direction</b> <i>under (0) or over (1) approximation</i>
)
</pre>
<dd> Approximates the conjunction of two BDDs f and g. Returns a
  pointer to the resulting BDD if successful; NULL if the intermediate
  result blows up.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddClippingAnd">Cudd_bddClippingAnd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddClip.c"TARGET="ABSTRACT"><CODE>cuddClip.c</CODE></A>

<dt><pre>
<A NAME="cuddBddClosestCube"></A>
DdNode * <I></I>
<B>cuddBddClosestCube</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  CUDD_VALUE_TYPE  <b>bound</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddClosestCube.
  Returns the cube if succesful; NULL otherwise.  The procedure uses a
  four-way recursion to examine all four combinations of cofactors of
  <code>f</code> and <code>g</code> according to the following formula.
  <pre>
    H(f,g) = min(H(ft,gt), H(fe,ge), H(ft,ge)+1, H(fe,gt)+1)
  </pre>
  Bounding is based on the following observations.
  <ul>
  <li> If we already found two points at distance 0, there is no point in
       continuing.  Furthermore,
  <li> If F == not(G) then the best we can hope for is a minimum distance
       of 1.  If we have already found two points at distance 1, there is
       no point in continuing.  (Indeed, H(F,G) == 1 in this case.  We
       have to continue, though, to find the cube.)
  </ul>
  The variable <code>bound</code> is set at the largest value of the distance
  that we are still interested in.  Therefore, we desist when
  <pre>
    (bound == -1) and (F != not(G)) or (bound == 0) and (F == not(G)).
  </pre>
  If we were maximally aggressive in using the bound, we would always
  set the bound to the minimum distance seen thus far minus one.  That
  is, we would maintain the invariant
  <pre>
    bound < minD,
  </pre>
  except at the very beginning, when we have no value for
  <code>minD</code>.<p>

  However, we do not use <code>bound < minD</code> when examining the
  two negative cofactors, because we try to find a large cube at
  minimum distance.  To do so, we try to find a cube in the negative
  cofactors at the same or smaller distance from the cube found in the
  positive cofactors.<p>

  When we compute <code>H(ft,ge)</code> and <code>H(fe,gt)</code> we
  know that we are going to add 1 to the result of the recursive call
  to account for the difference in the splitting variable.  Therefore,
  we decrease the bound correspondingly.<p>

  Another important observation concerns the need of examining all
  four pairs of cofators only when both <code>f</code> and
  <code>g</code> depend on the top variable.<p>

  Suppose <code>gt == ge == g</code>.  (That is, <code>g</code> does
  not depend on the top variable.)  Then
  <pre>
    H(f,g) = min(H(ft,g), H(fe,g), H(ft,g)+1, H(fe,g)+1)
	   = min(H(ft,g), H(fe,g)) .
  </pre>
  Therefore, under these circumstances, we skip the two "cross" cases.<p>

  An interesting feature of this function is the scheme used for
  caching the results in the global computed table.  Since we have a
  cube and a distance, we combine them to form an ADD.  The
  combination replaces the zero child of the top node of the cube with
  the negative of the distance.  (The use of the negative is to avoid
  ambiguity with 1.)  The degenerate cases (zero and one) are treated
  specially because the distance is known (0 for one, and infinity for
  zero).
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddClosestCube">Cudd_bddClosestCube</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>

<dt><pre>
<A NAME="cuddBddComposeRecur"></A>
DdNode * <I></I>
<B>cuddBddComposeRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>proj</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddCompose.
  Exploits the fact that the composition of f' with g
  produces the complement of the composition of f with g to better
  utilize the cache.  Returns the composed BDD if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddCompose">Cudd_bddCompose</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddBddConstrainDecomp"></A>
static int <I></I>
<B>cuddBddConstrainDecomp</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>decomp</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddConstrainDecomp.
  Returns f super (i) if successful; otherwise NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddConstrainDecomp">Cudd_bddConstrainDecomp</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddConstrainRecur"></A>
DdNode * <I></I>
<B>cuddBddConstrainRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>c</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddConstrain.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddConstrain">Cudd_bddConstrain</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddExistAbstractRecur"></A>
DdNode * <I></I>
<B>cuddBddExistAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Performs the recursive steps of Cudd_bddExistAbstract.
  Returns the BDD obtained by abstracting the variables
  of cube from f if successful; NULL otherwise. It is also used by
  Cudd_bddUnivAbstract.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddExistAbstract">Cudd_bddExistAbstract</a>
<a href="#Cudd_bddUnivAbstract">Cudd_bddUnivAbstract</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddBddIntersectRecur"></A>
DdNode * <I></I>
<B>cuddBddIntersectRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddIntersect.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddIntersect">Cudd_bddIntersect</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddBddIsop"></A>
DdNode	* <I></I>
<B>cuddBddIsop</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>L</b>, <i></i>
  DdNode * <b>U</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddIsop.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddIsop">Cudd_bddIsop</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>

<dt><pre>
<A NAME="cuddBddIteRecur"></A>
DdNode * <I></I>
<B>cuddBddIteRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddIte. Returns a
  pointer to the resulting BDD. NULL if the intermediate result blows
  up or if reordering occurs.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddBddLICBuildResult"></A>
static DdNode * <I></I>
<B>cuddBddLICBuildResult</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  st_table * <b>cache</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Builds the results of Cudd_bddLICompaction.
  Returns a pointer to the minimized BDD if successful; otherwise NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
<a href="#cuddBddLICMarkEdges">cuddBddLICMarkEdges</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddLICMarkEdges"></A>
static int <I></I>
<B>cuddBddLICMarkEdges</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>c</b>, <i></i>
  st_table * <b>table</b>, <i></i>
  st_table * <b>cache</b> <i></i>
)
</pre>
<dd> Performs the edge marking step of Cudd_bddLICompaction.
  Returns the LUB of the markings of the two outgoing edges of <code>f</code>
  if successful; otherwise CUDD_OUT_OF_MEM.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
<a href="#cuddBddLICBuildResult">cuddBddLICBuildResult</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddLICompaction"></A>
DdNode * <I></I>
<B>cuddBddLICompaction</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>function to be minimized</i>
  DdNode * <b>c</b> <i>constraint (care set)</i>
)
</pre>
<dd> Performs safe minimization of a BDD. Given the BDD
  <code>f</code> of a function to be minimized and a BDD
  <code>c</code> representing the care set, Cudd_bddLICompaction
  produces the BDD of a function that agrees with <code>f</code>
  wherever <code>c</code> is 1.  Safe minimization means that the size
  of the result is guaranteed not to exceed the size of
  <code>f</code>. This function is based on the DAC97 paper by Hong et
  al..  Returns a pointer to the result if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddLICompaction">Cudd_bddLICompaction</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddLiteralSetIntersectionRecur"></A>
DdNode * <I></I>
<B>cuddBddLiteralSetIntersectionRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of
  Cudd_bddLiteralSetIntersection. Scans the cubes for common variables,
  and checks whether they agree in phase.  Returns a pointer to the
  resulting cube if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLiteral.c"TARGET="ABSTRACT"><CODE>cuddLiteral.c</CODE></A>

<dt><pre>
<A NAME="cuddBddMakePrime"></A>
DdNode * <I></I>
<B>cuddBddMakePrime</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>cube</b>, <i>cube to be expanded</i>
  DdNode * <b>f</b> <i>function of which the cube is to be made a prime</i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddMakePrime.
  Returns the prime if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="cuddBddNPAndRecur"></A>
DdNode * <I></I>
<B>cuddBddNPAndRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddNPAnd.
  Returns a pointer to the result is successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddNPAnd">Cudd_bddNPAnd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddPermuteRecur"></A>
static DdNode * <I></I>
<B>cuddBddPermuteRecur</B>(
  DdManager * <b>manager</b>, <i>DD manager</i>
  DdHashTable * <b>table</b>, <i>computed table</i>
  DdNode * <b>node</b>, <i>BDD to be reordered</i>
  int * <b>permut</b> <i>permutation array</i>
)
</pre>
<dd> Recursively puts the BDD in the order given in the array permut.
  Checks for trivial cases to terminate recursion, then splits on the
  children of this node.  Once the solutions for the children are
  obtained, it puts into the current position the node from the rest of
  the BDD that should be here. Then returns this BDD.
  The key here is that the node being visited is NOT put in its proper
  place by this instance, but rather is switched when its proper position
  is reached in the recursion tree.<p>
  The DdNode * that is returned is the same BDD as passed in as node,
  but in the new order.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddPermute">Cudd_bddPermute</a>
<a href="#cuddAddPermuteRecur">cuddAddPermuteRecur</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddBddRestrictRecur"></A>
DdNode * <I></I>
<B>cuddBddRestrictRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>c</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddRestrict.
  Returns the restricted BDD if successful; otherwise NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddRestrict">Cudd_bddRestrict</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddSqueeze"></A>
static DdNode * <I></I>
<B>cuddBddSqueeze</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>l</b>, <i></i>
  DdNode * <b>u</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddSqueeze.  This
  procedure exploits the fact that if we complement and swap the
  bounds of the interval we obtain a valid solution by taking the
  complement of the solution to the original problem. Therefore, we
  can enforce the condition that the upper bound is always regular.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddSqueeze">Cudd_bddSqueeze</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenCof.c"TARGET="ABSTRACT"><CODE>cuddGenCof.c</CODE></A>

<dt><pre>
<A NAME="cuddBddTransferRecur"></A>
static DdNode * <I></I>
<B>cuddBddTransferRecur</B>(
  DdManager * <b>ddS</b>, <i></i>
  DdManager * <b>ddD</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddTransfer.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddBddTransfer">cuddBddTransfer</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="cuddBddTransfer"></A>
DdNode * <I></I>
<B>cuddBddTransfer</B>(
  DdManager * <b>ddS</b>, <i></i>
  DdManager * <b>ddD</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Convert a BDD from a manager to another one. Returns a
  pointer to the BDD in the destination manager if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddTransfer">Cudd_bddTransfer</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="cuddBddVarMapRecur"></A>
static DdNode * <I></I>
<B>cuddBddVarMapRecur</B>(
  DdManager * <b>manager</b>, <i>DD manager</i>
  DdNode * <b>f</b> <i>BDD to be remapped</i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddVarMap.
  Returns a pointer to the result if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddVarMap">Cudd_bddVarMap</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddBddVectorComposeRecur"></A>
static DdNode * <I></I>
<B>cuddBddVectorComposeRecur</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdHashTable * <b>table</b>, <i>computed table</i>
  DdNode * <b>f</b>, <i>BDD in which to compose</i>
  DdNode ** <b>vector</b>, <i>functions to be composed</i>
  int  <b>deepest</b> <i>depth of the deepest substitution</i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddVectorCompose.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME="cuddBddXorExistAbstractRecur"></A>
DdNode * <I></I>
<B>cuddBddXorExistAbstractRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>cube</b> <i></i>
)
</pre>
<dd> Takes the exclusive OR of two BDDs and simultaneously abstracts
  the variables in cube. The variables are existentially abstracted.  Returns a
  pointer to the result is successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddAndAbstract">Cudd_bddAndAbstract</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddAbs.c"TARGET="ABSTRACT"><CODE>cuddBddAbs.c</CODE></A>

<dt><pre>
<A NAME="cuddBddXorRecur"></A>
DdNode * <I></I>
<B>cuddBddXorRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_bddXor by taking
  the exclusive OR of two BDDs.  Returns a pointer to the result is
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddXor">Cudd_bddXor</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBddIte.c"TARGET="ABSTRACT"><CODE>cuddBddIte.c</CODE></A>

<dt><pre>
<A NAME="cuddBiasedUnderApprox"></A>
DdNode * <I></I>
<B>cuddBiasedUnderApprox</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>f</b>, <i>current DD</i>
  DdNode * <b>b</b>, <i>bias function</i>
  int  <b>numVars</b>, <i>maximum number of variables</i>
  int  <b>threshold</b>, <i>threshold under which approximation stops</i>
  double  <b>quality1</b>, <i>minimum improvement for accepted changes when b=1</i>
  double  <b>quality0</b> <i>minimum improvement for accepted changes when b=0</i>
)
</pre>
<dd> Applies the biased remapping underappoximation algorithm.
  Proceeds in three phases:
  <ul>
  <li> collect information on each node in the BDD; this is done via DFS.
  <li> traverse the BDD in top-down fashion and compute for each node
  whether remapping increases density.
  <li> traverse the BDD via DFS and actually perform the elimination.
  </ul>
  Returns the approximated BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_BiasedUnderApprox">Cudd_BiasedUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="cuddCProjectionRecur"></A>
DdNode * <I></I>
<B>cuddCProjectionRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>R</b>, <i></i>
  DdNode * <b>Y</b>, <i></i>
  DdNode * <b>Ysupp</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CProjection. Returns
  the projection if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_CProjection">Cudd_CProjection</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheFlush"></A>
void <I></I>
<B>cuddCacheFlush</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Flushes the cache.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheInsert1"></A>
void <I></I>
<B>cuddCacheInsert1</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP1  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>data</b> <i></i>
)
</pre>
<dd> Inserts a result in the cache for a function with two
  operands.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheInsert">cuddCacheInsert</a>
<a href="#cuddCacheInsert2">cuddCacheInsert2</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheInsert2"></A>
void <I></I>
<B>cuddCacheInsert2</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>data</b> <i></i>
)
</pre>
<dd> Inserts a result in the cache for a function with two
  operands.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheInsert">cuddCacheInsert</a>
<a href="#cuddCacheInsert1">cuddCacheInsert1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheInsert"></A>
void <I></I>
<B>cuddCacheInsert</B>(
  DdManager * <b>table</b>, <i></i>
  ptruint  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b>, <i></i>
  DdNode * <b>data</b> <i></i>
)
</pre>
<dd> Inserts a result in the cache for a function with three
  operands.  The operator tag (see cuddInt.h for details) is split and stored
  into unused bits of the first two pointers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheInsert2">cuddCacheInsert2</a>
<a href="#cuddCacheInsert1">cuddCacheInsert1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookup1Zdd"></A>
DdNode * <I></I>
<B>cuddCacheLookup1Zdd</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP1  <b>op</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookupZdd">cuddCacheLookupZdd</a>
<a href="#cuddCacheLookup2Zdd">cuddCacheLookup2Zdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookup1"></A>
DdNode * <I></I>
<B>cuddCacheLookup1</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP1  <b>op</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
<a href="#cuddCacheLookup2">cuddCacheLookup2</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookup2Zdd"></A>
DdNode * <I></I>
<B>cuddCacheLookup2Zdd</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookupZdd">cuddCacheLookupZdd</a>
<a href="#cuddCacheLookup1Zdd">cuddCacheLookup1Zdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookup2"></A>
DdNode * <I></I>
<B>cuddCacheLookup2</B>(
  DdManager * <b>table</b>, <i></i>
  DD_CTFP  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
<a href="#cuddCacheLookup1">cuddCacheLookup1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookupZdd"></A>
DdNode * <I></I>
<B>cuddCacheLookupZdd</B>(
  DdManager * <b>table</b>, <i></i>
  ptruint  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookup2Zdd">cuddCacheLookup2Zdd</a>
<a href="#cuddCacheLookup1Zdd">cuddCacheLookup1Zdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheLookup"></A>
DdNode * <I></I>
<B>cuddCacheLookup</B>(
  DdManager * <b>table</b>, <i></i>
  ptruint  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Returns the result if found; it returns NULL if no
  result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookup2">cuddCacheLookup2</a>
<a href="#cuddCacheLookup1">cuddCacheLookup1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheProfile"></A>
int <I></I>
<B>cuddCacheProfile</B>(
  DdManager * <b>table</b>, <i></i>
  FILE * <b>fp</b> <i></i>
)
</pre>
<dd> Computes and prints a profile of the cache usage.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCacheResize"></A>
void <I></I>
<B>cuddCacheResize</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Resizes the cache.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddCheckCollisionOrdering"></A>
static int <I></I>
<B>cuddCheckCollisionOrdering</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>i</b>, <i></i>
  int  <b>j</b> <i></i>
)
</pre>
<dd> Checks whether a collision list is ordered.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddClearDeathRow"></A>
void <I></I>
<B>cuddClearDeathRow</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Clears the death row.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
<a href="#Cudd_IterDerefBdd">Cudd_IterDerefBdd</a>
<a href="#Cudd_CheckZeroRef">Cudd_CheckZeroRef</a>
<a href="#cuddGarbageCollect">cuddGarbageCollect</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddCofactorRecur"></A>
DdNode * <I></I>
<B>cuddCofactorRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_Cofactor. Returns a
  pointer to the cofactor if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Cofactor">Cudd_Cofactor</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>

<dt><pre>
<A NAME="cuddCollectNodes"></A>
int <I></I>
<B>cuddCollectNodes</B>(
  DdNode * <b>f</b>, <i></i>
  st_table * <b>visited</b> <i></i>
)
</pre>
<dd> Traverses the DD f and collects all its nodes in a
  symbol table.  f is assumed to be a regular pointer and
  cuddCollectNodes guarantees this assumption in the recursive calls.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddComputeFloorLog2"></A>
int <I></I>
<B>cuddComputeFloorLog2</B>(
  unsigned int  <b>value</b> <i></i>
)
</pre>
<dd> Returns the floor of the logarithm to the base 2.
  The input value is assumed to be greater than 0.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddConjunctsAux"></A>
static int <I></I>
<B>cuddConjunctsAux</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>c1</b>, <i></i>
  DdNode ** <b>c2</b> <i></i>
)
</pre>
<dd> Procedure to compute two conjunctive factors of f and
  place in *c1 and *c2. Sets up the required data - table of distances
  from the constant and local reference count. Also minterm table.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddDecomp.c"TARGET="ABSTRACT"><CODE>cuddDecomp.c</CODE></A>

<dt><pre>
<A NAME="cuddConstantLookup"></A>
DdNode * <I></I>
<B>cuddConstantLookup</B>(
  DdManager * <b>table</b>, <i></i>
  ptruint  <b>op</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Looks up in the cache for the result of op applied to f,
  g, and h. Assumes that the calling procedure (e.g.,
  Cudd_bddIteConstant) is only interested in whether the result is
  constant or not. Returns the result if found (possibly
  DD_NON_CONSTANT); otherwise it returns NULL.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddCacheLookup">cuddCacheLookup</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddDestroySubtables"></A>
int <I></I>
<B>cuddDestroySubtables</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>n</b> <i></i>
)
</pre>
<dd> Destroys the n most recently created subtables in a unique
  table.  n should be positive. The subtables should not contain any live
  nodes, except the (isolated) projection function. The projection
  functions are freed.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> The variable map used for fast variable substitution is
  destroyed if it exists. In this case the cache is also cleared.
<p>

<dd> <b>See Also</b> <code><a href="#cuddInsertSubtables">cuddInsertSubtables</a>
<a href="#Cudd_SetVarMap">Cudd_SetVarMap</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddDoRebalance"></A>
static void <I></I>
<B>cuddDoRebalance</B>(
  DdNodePtr ** <b>stack</b>, <i></i>
  int  <b>stackN</b> <i></i>
)
</pre>
<dd> Rebalances a red/black tree.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddDynamicAllocNode"></A>
DdNode * <I></I>
<B>cuddDynamicAllocNode</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Dynamically allocates a Node. This procedure is similar
  to cuddAllocNode in Cudd_Table.c, but it does not attempt garbage
  collection, because during reordering there are no dead nodes.
  Returns a pointer to a new node if successful; NULL is memory is
  full.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddEstimateCofactorSimple"></A>
static int <I></I>
<B>cuddEstimateCofactorSimple</B>(
  DdNode * <b>node</b>, <i></i>
  int  <b>i</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CofactorEstimateSimple.
  Returns an estimate of the number of nodes in the DD of the positive
  cofactor of node. Uses the least significant bit of the next field as
  visited flag. node is supposed to be regular; the invariant is maintained
  by this procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddEstimateCofactor"></A>
static int <I></I>
<B>cuddEstimateCofactor</B>(
  DdManager * <b>dd</b>, <i></i>
  st_table * <b>table</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  int  <b>i</b>, <i></i>
  int  <b>phase</b>, <i></i>
  DdNode ** <b>ptr</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CofactorEstimate.
  Returns an estimate of the number of nodes in the DD of a
  cofactor of node. Uses the least significant bit of the next field as
  visited flag. node is supposed to be regular; the invariant is maintained
  by this procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddExact"></A>
int <I></I>
<B>cuddExact</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Exact variable ordering algorithm. Finds an optimum
  order for the variables between lower and upper.  Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="cuddFindParent"></A>
static int <I></I>
<B>cuddFindParent</B>(
  DdManager * <b>table</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> Searches the subtables above node for a parent. Returns 1
  as soon as one parent is found. Returns 0 is the search is fruitless.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddFreeTable"></A>
void <I></I>
<B>cuddFreeTable</B>(
  DdManager * <b>unique</b> <i></i>
)
</pre>
<dd> Frees the resources associated to a unique table.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddInitTable">cuddInitTable</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddGarbageCollect"></A>
int <I></I>
<B>cuddGarbageCollect</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>clearCache</b> <i></i>
)
</pre>
<dd> Performs garbage collection on the BDD and ZDD unique tables.
  If clearCache is 0, the cache is not cleared. This should only be
  specified if the cache has been cleared right before calling
  cuddGarbageCollect. (As in the case of dynamic reordering.)
  Returns the total number of deleted nodes.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddGa"></A>
int <I></I>
<B>cuddGa</B>(
  DdManager * <b>table</b>, <i>manager</i>
  int  <b>lower</b>, <i>lowest level to be reordered</i>
  int  <b>upper</b> <i>highest level to be reorderded</i>
)
</pre>
<dd> Genetic algorithm for DD reordering.
  The two children of a crossover will be stored in
  storedd[popsize
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="cuddGetBranches"></A>
void <I></I>
<B>cuddGetBranches</B>(
  DdNode * <b>g</b>, <i></i>
  DdNode ** <b>g1</b>, <i></i>
  DdNode ** <b>g0</b> <i></i>
)
</pre>
<dd> Computes the children of g.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCof.c"TARGET="ABSTRACT"><CODE>cuddCof.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableGenericInsert"></A>
int <I></I>
<B>cuddHashTableGenericInsert</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  void * <b>value</b> <i></i>
)
</pre>
<dd> Inserts an item in a hash table when the key is one
  pointer and the value is not a DdNode pointer.  Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
<a href="#cuddHashTableGenericLookup">cuddHashTableGenericLookup</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableGenericLookup"></A>
void * <I></I>
<B>cuddHashTableGenericLookup</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Looks up a key consisting of one pointer in a hash
  table when the value is not a DdNode pointer.  Returns the value
  associated to the key if there is an entry for the given key in the
  table; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
<a href="#cuddHashTableGenericInsert">cuddHashTableGenericInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableGenericQuit"></A>
void <I></I>
<B>cuddHashTableGenericQuit</B>(
  DdHashTable * <b>hash</b> <i></i>
)
</pre>
<dd> Shuts down a hash table, when the values are not DdNode
  pointers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInit">cuddHashTableInit</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableInit"></A>
DdHashTable * <I></I>
<B>cuddHashTableInit</B>(
  DdManager * <b>manager</b>, <i></i>
  unsigned int  <b>keySize</b>, <i></i>
  unsigned int  <b>initSize</b> <i></i>
)
</pre>
<dd> Initializes a hash table. Returns a pointer to the new
  table if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableQuit">cuddHashTableQuit</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableInsert1"></A>
int <I></I>
<B>cuddHashTableInsert1</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>value</b>, <i></i>
  ptrint  <b>count</b> <i></i>
)
</pre>
<dd> Inserts an item in a hash table when the key is one pointer.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
<a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
<a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
<a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableInsert2"></A>
int <I></I>
<B>cuddHashTableInsert2</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>value</b>, <i></i>
  ptrint  <b>count</b> <i></i>
)
</pre>
<dd> Inserts an item in a hash table when the key is
  composed of two pointers. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
<a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
<a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
<a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableInsert3"></A>
int <I></I>
<B>cuddHashTableInsert3</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b>, <i></i>
  DdNode * <b>value</b>, <i></i>
  ptrint  <b>count</b> <i></i>
)
</pre>
<dd> Inserts an item in a hash table when the key is
  composed of three pointers. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
<a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
<a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
<a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableInsert"></A>
int <I></I>
<B>cuddHashTableInsert</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNodePtr * <b>key</b>, <i></i>
  DdNode * <b>value</b>, <i></i>
  ptrint  <b>count</b> <i></i>
)
</pre>
<dd> Inserts an item in a hash table when the key has more than
  three pointers.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code>[cuddHashTableInsert1
<a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
<a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
<a href="#cuddHashTableLookup">cuddHashTableLookup</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableLookup1"></A>
DdNode * <I></I>
<B>cuddHashTableLookup1</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Looks up a key consisting of one pointer in a hash table.
  Returns the value associated to the key if there is an entry for the given
  key in the table; NULL otherwise. If the entry is present, its reference
  counter is decremented if not saturated. If the counter reaches 0, the
  value of the entry is dereferenced, and the entry is returned to the free
  list.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
<a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
<a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
<a href="#cuddHashTableInsert1">cuddHashTableInsert1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableLookup2"></A>
DdNode * <I></I>
<B>cuddHashTableLookup2</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Looks up a key consisting of two pointer in a hash table.
  Returns the value associated to the key if there is an entry for the given
  key in the table; NULL otherwise. If the entry is present, its reference
  counter is decremented if not saturated. If the counter reaches 0, the
  value of the entry is dereferenced, and the entry is returned to the free
  list.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
<a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
<a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
<a href="#cuddHashTableInsert2">cuddHashTableInsert2</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableLookup3"></A>
DdNode * <I></I>
<B>cuddHashTableLookup3</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Looks up a key consisting of three pointers in a hash table.
  Returns the value associated to the key if there is an entry for the given
  key in the table; NULL otherwise. If the entry is present, its reference
  counter is decremented if not saturated. If the counter reaches 0, the
  value of the entry is dereferenced, and the entry is returned to the free
  list.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableLookup">cuddHashTableLookup</a>
<a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
<a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
<a href="#cuddHashTableInsert3">cuddHashTableInsert3</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableLookup"></A>
DdNode * <I></I>
<B>cuddHashTableLookup</B>(
  DdHashTable * <b>hash</b>, <i></i>
  DdNodePtr * <b>key</b> <i></i>
)
</pre>
<dd> Looks up a key consisting of more than three pointers
  in a hash table.  Returns the value associated to the key if there
  is an entry for the given key in the table; NULL otherwise. If the
  entry is present, its reference counter is decremented if not
  saturated. If the counter reaches 0, the value of the entry is
  dereferenced, and the entry is returned to the free list.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableLookup1">cuddHashTableLookup1</a>
<a href="#cuddHashTableLookup2">cuddHashTableLookup2</a>
<a href="#cuddHashTableLookup3">cuddHashTableLookup3</a>
<a href="#cuddHashTableInsert">cuddHashTableInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableQuit"></A>
void <I></I>
<B>cuddHashTableQuit</B>(
  DdHashTable * <b>hash</b> <i></i>
)
</pre>
<dd> Shuts down a hash table, dereferencing all the values.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInit">cuddHashTableInit</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHashTableResize"></A>
static int <I></I>
<B>cuddHashTableResize</B>(
  DdHashTable * <b>hash</b> <i></i>
)
</pre>
<dd> Resizes a hash table. Returns 1 if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddHashTableInsert">cuddHashTableInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddHeapProfile"></A>
int <I></I>
<B>cuddHeapProfile</B>(
  DdManager * <b>dd</b> <i></i>
)
</pre>
<dd> Prints to the manager's stdout the number of live nodes for each
  level of the DD heap that contains at least one live node.  It also
  prints a summary containing:
  <ul>
  <li> total number of tables;
  <li> number of tables with live nodes;
  <li> table with the largest number of live nodes;
  <li> number of nodes in that table.
  </ul>
  If more than one table contains the maximum number of live nodes,
  only the one of lowest index is reported. Returns 1 in case of success
  and 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>

<dt><pre>
<A NAME="cuddInitCache"></A>
int <I></I>
<B>cuddInitCache</B>(
  DdManager * <b>unique</b>, <i>unique table</i>
  unsigned int  <b>cacheSize</b>, <i>initial size of the cache</i>
  unsigned int  <b>maxCacheSize</b> <i>cache size beyond which no resizing occurs</i>
)
</pre>
<dd> Initializes the computed table. It is called by
  Cudd_Init. Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Init">Cudd_Init</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCache.c"TARGET="ABSTRACT"><CODE>cuddCache.c</CODE></A>

<dt><pre>
<A NAME="cuddInitInteract"></A>
int <I></I>
<B>cuddInitInteract</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Initializes the interaction matrix. The interaction
  matrix is implemented as a bit vector storing the upper triangle of
  the symmetric interaction matrix. The bit vector is kept in an array
  of long integers. The computation is based on a series of depth-first
  searches, one for each root of the DAG. Two flags are needed: The
  local visited flag uses the LSB of the then pointer. The global
  visited flag uses the LSB of the next pointer.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="cuddInitLinear"></A>
int <I></I>
<B>cuddInitLinear</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Initializes the linear transform matrix.  Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddInitTable"></A>
DdManager * <I></I>
<B>cuddInitTable</B>(
  unsigned int  <b>numVars</b>, <i>Initial number of BDD variables (and subtables)</i>
  unsigned int  <b>numVarsZ</b>, <i>Initial number of ZDD variables (and subtables)</i>
  unsigned int  <b>numSlots</b>, <i>Initial size of the BDD subtables</i>
  unsigned int  <b>looseUpTo</b> <i>Limit for fast table growth</i>
)
</pre>
<dd> Creates and initializes the unique table. Returns a pointer
  to the table if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Init">Cudd_Init</a>
<a href="#cuddFreeTable">cuddFreeTable</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddInsertSubtables"></A>
int <I></I>
<B>cuddInsertSubtables</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>n</b>, <i></i>
  int  <b>level</b> <i></i>
)
</pre>
<dd> Inserts n new subtables in a unique table at level.
  The number n should be positive, and level should be an existing level.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddDestroySubtables">cuddDestroySubtables</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddIsInDeathRow"></A>
int <I></I>
<B>cuddIsInDeathRow</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Checks whether a node is in the death row. Returns the
  position of the first occurrence if the node is present; -1
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
<a href="#cuddClearDeathRow">cuddClearDeathRow</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddLevelQueueDequeue"></A>
void <I></I>
<B>cuddLevelQueueDequeue</B>(
  DdLevelQueue * <b>queue</b>, <i></i>
  int  <b>level</b> <i></i>
)
</pre>
<dd> Remove an item from the front of a level queue.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="cuddLevelQueueEnqueue"></A>
void * <I></I>
<B>cuddLevelQueueEnqueue</B>(
  DdLevelQueue * <b>queue</b>, <i>level queue</i>
  void * <b>key</b>, <i>key to be enqueued</i>
  int  <b>level</b> <i>level at which to insert</i>
)
</pre>
<dd> Inserts a new key in a level queue. A new entry is
  created in the queue only if the node is not already
  enqueued. Returns a pointer to the queue item if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueInit">cuddLevelQueueInit</a>
<a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="cuddLevelQueueFirst"></A>
void * <I></I>
<B>cuddLevelQueueFirst</B>(
  DdLevelQueue * <b>queue</b>, <i>level queue</i>
  void * <b>key</b>, <i>key to be enqueued</i>
  int  <b>level</b> <i>level at which to insert</i>
)
</pre>
<dd> Inserts the first key in a level queue. Returns a
  pointer to the queue item if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="cuddLevelQueueInit"></A>
DdLevelQueue * <I></I>
<B>cuddLevelQueueInit</B>(
  int  <b>levels</b>, <i>number of levels</i>
  int  <b>itemSize</b>, <i>size of the item</i>
  int  <b>numBuckets</b> <i>initial number of hash buckets</i>
)
</pre>
<dd> Initializes a level queue. A level queue is a queue
  where inserts are based on the levels of the nodes. Within each
  level the policy is FIFO. Level queues are useful in traversing a
  BDD top-down. Queue items are kept in a free list when dequeued for
  efficiency. Returns a pointer to the new queue if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueQuit">cuddLevelQueueQuit</a>
<a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
<a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="cuddLevelQueueQuit"></A>
void <I></I>
<B>cuddLevelQueueQuit</B>(
  DdLevelQueue * <b>queue</b> <i></i>
)
</pre>
<dd> Shuts down a level queue and releases all the
  associated memory.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueInit">cuddLevelQueueInit</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="cuddLinearAndSifting"></A>
int <I></I>
<B>cuddLinearAndSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> BDD reduction based on combination of sifting and linear
  transformations.  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries
    in each unique table.
    <li> Sift the variable up and down, remembering each time the
    total size of the DD heap. At each position, linear transformation
    of the two adjacent variables is tried and is accepted if it reduces
    the size of the DD.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddLinearInPlace"></A>
int <I></I>
<B>cuddLinearInPlace</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Linearly combines two adjacent variables. Specifically,
  replaces the top variable with the exclusive nor of the two variables.
  It assumes that no dead nodes are present on entry to this
  procedure.  The procedure then guarantees that no dead nodes will be
  present when it terminates.  cuddLinearInPlace assumes that x &lt;
  y.  Returns the number of keys in the table if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> The two subtables corrresponding to variables x and y are
  modified. The global counters of the unique table are also affected.
<p>

<dd> <b>See Also</b> <code><a href="#cuddSwapInPlace">cuddSwapInPlace</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheAddToList"></A>
static void <I></I>
<B>cuddLocalCacheAddToList</B>(
  DdLocalCache * <b>cache</b> <i></i>
)
</pre>
<dd> Inserts a local cache in the manager list.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheClearAll"></A>
void <I></I>
<B>cuddLocalCacheClearAll</B>(
  DdManager * <b>manager</b> <i></i>
)
</pre>
<dd> Clears the local caches of a manager.
  Used before reordering.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheClearDead"></A>
void <I></I>
<B>cuddLocalCacheClearDead</B>(
  DdManager * <b>manager</b> <i></i>
)
</pre>
<dd> Clears the dead entries of the local caches of a manager.
  Used during garbage collection.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheInit"></A>
DdLocalCache * <I></I>
<B>cuddLocalCacheInit</B>(
  DdManager * <b>manager</b>, <i>manager</i>
  unsigned int  <b>keySize</b>, <i>size of the key (number of operands)</i>
  unsigned int  <b>cacheSize</b>, <i>Initial size of the cache</i>
  unsigned int  <b>maxCacheSize</b> <i>Size of the cache beyond which no resizing occurs</i>
)
</pre>
<dd> Initializes a computed table.  Returns a pointer the
  the new local cache in case of success; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddInitCache">cuddInitCache</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheInsert"></A>
void <I></I>
<B>cuddLocalCacheInsert</B>(
  DdLocalCache * <b>cache</b>, <i></i>
  DdNodePtr * <b>key</b>, <i></i>
  DdNode * <b>value</b> <i></i>
)
</pre>
<dd> Inserts a result in a local cache.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheLookup"></A>
DdNode * <I></I>
<B>cuddLocalCacheLookup</B>(
  DdLocalCache * <b>cache</b>, <i></i>
  DdNodePtr * <b>key</b> <i></i>
)
</pre>
<dd> Looks up in a local cache. Returns the result if found;
  it returns NULL if no result is found.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheProfile"></A>
int <I></I>
<B>cuddLocalCacheProfile</B>(
  DdLocalCache * <b>cache</b> <i></i>
)
</pre>
<dd> Computes and prints a profile of a local cache usage.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheQuit"></A>
void <I></I>
<B>cuddLocalCacheQuit</B>(
  DdLocalCache * <b>cache</b> <i>cache to be shut down</i>
)
</pre>
<dd> Initializes the computed table. It is called by
  Cudd_Init. Returns a pointer the the new local cache in case of
  success; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLocalCacheInit">cuddLocalCacheInit</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheRemoveFromList"></A>
static void <I></I>
<B>cuddLocalCacheRemoveFromList</B>(
  DdLocalCache * <b>cache</b> <i></i>
)
</pre>
<dd> Removes a local cache from the manager list.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddLocalCacheResize"></A>
static void <I></I>
<B>cuddLocalCacheResize</B>(
  DdLocalCache * <b>cache</b> <i></i>
)
</pre>
<dd> Resizes a local cache.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME="cuddMakeBddFromZddCover"></A>
DdNode	* <I></I>
<B>cuddMakeBddFromZddCover</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> Converts a ZDD cover to a BDD. If successful, it returns
  a BDD node, otherwise it returns NULL. It is a recursive algorithm
  that works as follows. First it computes 3 cofactors of a ZDD cover:
  f1, f0 and fd. Second, it compute BDDs (b1, b0 and bd) of f1, f0 and fd.
  Third, it computes T=b1+bd and E=b0+bd. Fourth, it computes ITE(v,T,E) where
  v is the variable which has the index of the top node of the ZDD cover.
  In this case, since the index of v can be larger than either the one of T
  or the one of E, cuddUniqueInterIVO is called, where IVO stands for
  independent from variable ordering.
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_MakeBddFromZddCover">Cudd_MakeBddFromZddCover</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>

<dt><pre>
<A NAME="cuddMinHammingDistRecur"></A>
static int <I></I>
<B>cuddMinHammingDistRecur</B>(
  DdNode * <b>f</b>, <i></i>
  int * <b>minterm</b>, <i></i>
  DdHashTable * <b>table</b>, <i></i>
  int  <b>upperBound</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_MinHammingDist.
  It is based on the following identity. Let H(f) be the
  minimum Hamming distance of the minterms of f from the reference
  minterm. Then:
  <xmp>
    H(f) = min(H(f0)+h0,H(f1)+h1)
  </xmp>
  where f0 and f1 are the two cofactors of f with respect to its top
  variable; h0 is 1 if the minterm assigns 1 to the top variable of f;
  h1 is 1 if the minterm assigns 0 to the top variable of f.
  The upper bound on the distance is used to bound the depth of the
  recursion.
  Returns the minimum distance unless it exceeds the upper bound or
  computation fails.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_MinHammingDist">Cudd_MinHammingDist</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>

<dt><pre>
<A NAME="cuddNextHigh"></A>
int <I></I>
<B>cuddNextHigh</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b> <i></i>
)
</pre>
<dd> Finds the next subtable with a larger index. Returns the
  index.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddNextLow">cuddNextLow</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddNextLow"></A>
int <I></I>
<B>cuddNextLow</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b> <i></i>
)
</pre>
<dd> Finds the next subtable with a smaller index. Returns the
  index.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddNextHigh">cuddNextHigh</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddNodeArrayRecur"></A>
static int <I></I>
<B>cuddNodeArrayRecur</B>(
  DdNode * <b>f</b>, <i></i>
  DdNodePtr * <b>table</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Performs the recursive step of cuddNodeArray.  Returns
  an the number of nodes in the DD.  Clear the least significant bit
  of the next field that was used as visited flag by
  cuddNodeArrayRecur when counting the nodes.  node is supposed to be
  regular; the invariant is maintained by this procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddNodeArray"></A>
DdNodePtr * <I></I>
<B>cuddNodeArray</B>(
  DdNode * <b>f</b>, <i></i>
  int * <b>n</b> <i></i>
)
</pre>
<dd> Traverses the DD f and collects all its nodes in an array.
  The caller should free the array returned by cuddNodeArray.
  Returns a pointer to the array of nodes in case of success; NULL
  otherwise.  The nodes are collected in reverse topological order, so
  that a node is always preceded in the array by all its descendants.
<p>

<dd> <b>Side Effects</b> The number of nodes is returned as a side effect.
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_FirstNode">Cudd_FirstNode</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddOrderedInsert"></A>
static void <I></I>
<B>cuddOrderedInsert</B>(
  DdNodePtr * <b>root</b>, <i></i>
  DdNodePtr  <b>node</b> <i></i>
)
</pre>
<dd> Inserts a DdNode in a red/black search tree. Nodes from
  the same "page" (defined by DD_PAGE_MASK) are linked in a LIFO list.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddOrderedThread">cuddOrderedThread</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddOrderedThread"></A>
static DdNode * <I></I>
<B>cuddOrderedThread</B>(
  DdNode * <b>root</b>, <i></i>
  DdNode * <b>list</b> <i></i>
)
</pre>
<dd> Threads all the nodes of a search tree into a linear
  list. For each node of the search tree, the "left" child, if non-null, has
  a lower address than its parent, and the "right" child, if non-null, has a
  higher address than its parent.
  The list is sorted in order of increasing addresses. The search
  tree is destroyed as a result of this operation. The last element of
  the linear list is made to point to the address passed in list. Each
  node if the search tree is a linearly-linked list of nodes from the
  same memory page (as defined in DD_PAGE_MASK). When a node is added to
  the linear list, all the elements of the linked list are added.
<p>

<dd> <b>Side Effects</b> The search tree is destroyed as a result of this operation.
<p>

<dd> <b>See Also</b> <code><a href="#cuddOrderedInsert">cuddOrderedInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddPrintNode"></A>
void <I></I>
<B>cuddPrintNode</B>(
  DdNode * <b>f</b>, <i></i>
  FILE * <b>fp</b> <i></i>
)
</pre>
<dd> Prints out information on a node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>

<dt><pre>
<A NAME="cuddPrintVarGroups"></A>
void <I></I>
<B>cuddPrintVarGroups</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  MtrNode * <b>root</b>, <i>root of the group tree</i>
  int  <b>zdd</b>, <i>0: BDD; 1: ZDD</i>
  int  <b>silent</b> <i>flag to check tree syntax only</i>
)
</pre>
<dd> Prints the variable groups as a parenthesized list.
  For each group the level range that it represents is printed. After
  each group, the group's flags are printed, preceded by a `|'.  For
  each flag (except MTR_TERMINAL) a character is printed.
  <ul>
  <li>F: MTR_FIXED
  <li>N: MTR_NEWNODE
  <li>S: MTR_SOFT
  </ul>
  The second argument, silent, if different from 0, causes
  Cudd_PrintVarGroups to only check the syntax of the group tree.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>

<dt><pre>
<A NAME="cuddP"></A>
int <I></I>
<B>cuddP</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Prints a DD to the standard output. One line per node is
  printed. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_PrintDebug">Cudd_PrintDebug</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddReclaimZdd"></A>
void <I></I>
<B>cuddReclaimZdd</B>(
  DdManager * <b>table</b>, <i></i>
  DdNode * <b>n</b> <i></i>
)
</pre>
<dd> Brings children of a dead ZDD node back.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddReclaim">cuddReclaim</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddReclaim"></A>
void <I></I>
<B>cuddReclaim</B>(
  DdManager * <b>table</b>, <i></i>
  DdNode * <b>n</b> <i></i>
)
</pre>
<dd> Brings children of a dead node back.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddReclaimZdd">cuddReclaimZdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddRehash"></A>
void <I></I>
<B>cuddRehash</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>i</b> <i></i>
)
</pre>
<dd> Doubles the size of a unique subtable and rehashes its
  contents.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddRemapUnderApprox"></A>
DdNode * <I></I>
<B>cuddRemapUnderApprox</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>f</b>, <i>current DD</i>
  int  <b>numVars</b>, <i>maximum number of variables</i>
  int  <b>threshold</b>, <i>threshold under which approximation stops</i>
  double  <b>quality</b> <i>minimum improvement for accepted changes</i>
)
</pre>
<dd> Applies the remapping underappoximation algorithm.
  Proceeds in three phases:
  <ul>
  <li> collect information on each node in the BDD; this is done via DFS.
  <li> traverse the BDD in top-down fashion and compute for each node
  whether remapping increases density.
  <li> traverse the BDD via DFS and actually perform the elimination.
  </ul>
  Returns the approximated BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_RemapUnderApprox">Cudd_RemapUnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="cuddResizeLinear"></A>
int <I></I>
<B>cuddResizeLinear</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Resizes the linear transform matrix.  Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddResizeTableZdd"></A>
int <I></I>
<B>cuddResizeTableZdd</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Increases the number of ZDD subtables in a unique table so
  that it meets or exceeds index.  When new ZDD variables are created, it
  is possible to preserve the functions unchanged, or it is possible to
  preserve the covers unchanged, but not both. cuddResizeTableZdd preserves
  the covers.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddResizeTable">ddResizeTable</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddSetInteract"></A>
void <I></I>
<B>cuddSetInteract</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Given a pair of variables 0 <= x < y < table->size,
  sets the corresponding bit of the interaction matrix to 1.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="cuddShrinkDeathRow"></A>
void <I></I>
<B>cuddShrinkDeathRow</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Shrinks the death row by a factor of four.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddClearDeathRow">cuddClearDeathRow</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddShrinkSubtable"></A>
void <I></I>
<B>cuddShrinkSubtable</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>i</b> <i></i>
)
</pre>
<dd> Shrinks a subtable.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRehash">cuddRehash</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddSifting"></A>
int <I></I>
<B>cuddSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Implementation of Rudell's sifting algorithm.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries
    in each unique table.
    <li> Sift the variable up and down, remembering each time the
    total size of the DD heap.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddSlowTableGrowth"></A>
void <I></I>
<B>cuddSlowTableGrowth</B>(
  DdManager * <b>unique</b> <i></i>
)
</pre>
<dd> Adjusts parameters of a table to slow down its growth.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddSolveEqnRecur"></A>
DdNode * <I></I>
<B>cuddSolveEqnRecur</B>(
  DdManager * <b>bdd</b>, <i></i>
  DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
  DdNode * <b>Y</b>, <i>the cube of remaining y variables</i>
  DdNode ** <b>G</b>, <i>the array of solutions</i>
  int  <b>n</b>, <i>number of unknowns</i>
  int * <b>yIndex</b>, <i>array holding the y variable indices</i>
  int  <b>i</b> <i>level of recursion</i>
)
</pre>
<dd> Implements the recursive step of Cudd_SolveEqn. 
  Returns NULL if the intermediate solution blows up
  or reordering occurs. The parametric solutions are
  stored in the array G.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_SolveEqn">Cudd_SolveEqn</a>
<a href="#Cudd_VerifySol">Cudd_VerifySol</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>

<dt><pre>
<A NAME="cuddSplitSetRecur"></A>
DdNode* <I></I>
<B>cuddSplitSetRecur</B>(
  DdManager * <b>manager</b>, <i></i>
  st_table * <b>mtable</b>, <i></i>
  int * <b>varSeen</b>, <i></i>
  DdNode * <b>p</b>, <i></i>
  double  <b>n</b>, <i></i>
  double  <b>max</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_SplitSet. The
  procedure recursively traverses the BDD and checks to see if any
  node satisfies the minterm requirements as specified by 'n'. At any
  node X, n is compared to the number of minterms in the onset of X's
  children. If either of the child nodes have exactly n minterms, then
  that node is returned; else, if n is greater than the onset of one
  of the child nodes, that node is retained and the difference in the
  number of minterms is extracted from the other child. In case n
  minterms can be extracted from constant 1, the algorithm returns the
  result with at most log(n) nodes.
<p>

<dd> <b>Side Effects</b> The array 'varSeen' is updated at every recursive call
  to set the variables traversed by the procedure.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>

<dt><pre>
<A NAME="cuddStCountfree"></A>
enum st_retval <I></I>
<B>cuddStCountfree</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the memory used to store the minterm counts
  recorded in the visited table. Returns ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddSubsetHeavyBranch"></A>
DdNode * <I></I>
<B>cuddSubsetHeavyBranch</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>f</b>, <i>current DD</i>
  int  <b>numVars</b>, <i>maximum number of variables</i>
  int  <b>threshold</b> <i>threshold size for the subset</i>
)
</pre>
<dd> Here a subset BDD is built by throwing away one of the
  children. Starting at root, annotate each node with the number of
  minterms (in terms of the total number of variables specified -
  numVars), number of nodes taken by the DAG rooted at this node and
  number of additional nodes taken by the child that has the lesser
  minterms. The child with the lower number of minterms is thrown away
  and a dyanmic count of the nodes of the subset is kept. Once the
  threshold is reached the subset is returned to the calling
  procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_SubsetHeavyBranch">Cudd_SubsetHeavyBranch</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetHB.c"TARGET="ABSTRACT"><CODE>cuddSubsetHB.c</CODE></A>

<dt><pre>
<A NAME="cuddSubsetShortPaths"></A>
DdNode * <I></I>
<B>cuddSubsetShortPaths</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>f</b>, <i>function to be subset</i>
  int  <b>numVars</b>, <i>total number of variables in consideration</i>
  int  <b>threshold</b>, <i>maximum number of nodes allowed in the subset</i>
  int  <b>hardlimit</b> <i>flag determining whether threshold should be respected strictly</i>
)
</pre>
<dd> The outermost procedure to return a subset of the given
  BDD with the largest cubes. The path lengths are calculated, the maximum
  allowable path length is determined and the number of nodes of this
  path length that can be used to build a subset. If the threshold is
  larger than the size of the original BDD, the original BDD is
  returned.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_SubsetShortPaths">Cudd_SubsetShortPaths</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="cuddSwapInPlace"></A>
int <I></I>
<B>cuddSwapInPlace</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Swaps two adjacent variables. It assumes that no dead
  nodes are present on entry to this procedure.  The procedure then
  guarantees that no dead nodes will be present when it terminates.
  cuddSwapInPlace assumes that x &lt; y.  Returns the number of keys in
  the table if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddSwapping"></A>
int <I></I>
<B>cuddSwapping</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b>, <i></i>
  Cudd_ReorderingType  <b>heuristic</b> <i></i>
)
</pre>
<dd> Implementation of Plessier's algorithm that reorders
  variables by a sequence of (non-adjacent) swaps.
    <ol>
    <li> Select two variables (RANDOM or HEURISTIC).
    <li> Permute these variables.
    <li> If the nodes have decreased accept the permutation.
    <li> Otherwise reconstruct the original heap.
    <li> Loop.
    </ol>
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="cuddSymmCheck"></A>
int <I></I>
<B>cuddSymmCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Checks for symmetry of x and y. Ignores projection
  functions, unless they are isolated. Returns 1 in case of symmetry; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="cuddSymmSiftingConv"></A>
int <I></I>
<B>cuddSymmSiftingConv</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Symmetric sifting to convergence algorithm.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries in
    each unique subtable.
    <li> Sift the variable up and down, remembering each time the total
    size of the DD heap and grouping variables that are symmetric.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    <li> Repeat 1-4 until no further improvement.
    </ol>
  Returns 1 plus the number of symmetric variables if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddSymmSifting">cuddSymmSifting</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="cuddSymmSifting"></A>
int <I></I>
<B>cuddSymmSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Symmetric sifting algorithm.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries in
    each unique subtable.
    <li> Sift the variable up and down, remembering each time the total
    size of the DD heap and grouping variables that are symmetric.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 plus the number of symmetric variables if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddSymmSiftingConv">cuddSymmSiftingConv</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="cuddTestInteract"></A>
int <I></I>
<B>cuddTestInteract</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Given a pair of variables 0 <= x < y < table->size,
  tests whether the corresponding bit of the interaction matrix is 1.
  Returns the value of the bit.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="cuddTimesInDeathRow"></A>
int <I></I>
<B>cuddTimesInDeathRow</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Counts how many times a node is in the death row.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_DelayedDerefBdd">Cudd_DelayedDerefBdd</a>
<a href="#cuddClearDeathRow">cuddClearDeathRow</a>
<a href="#cuddIsInDeathRow">cuddIsInDeathRow</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddRef.c"TARGET="ABSTRACT"><CODE>cuddRef.c</CODE></A>

<dt><pre>
<A NAME="cuddTreeSifting"></A>
int <I></I>
<B>cuddTreeSifting</B>(
  DdManager * <b>table</b>, <i>DD table</i>
  Cudd_ReorderingType  <b>method</b> <i>reordering method for the groups of leaves</i>
)
</pre>
<dd> Tree sifting algorithm. Assumes that a tree representing
  a group hierarchy is passed as a parameter. It then reorders each
  group in postorder fashion by calling ddTreeSiftingAux.  Assumes that
  no dead nodes are present.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="cuddUnderApprox"></A>
DdNode * <I></I>
<B>cuddUnderApprox</B>(
  DdManager * <b>dd</b>, <i>DD manager</i>
  DdNode * <b>f</b>, <i>current DD</i>
  int  <b>numVars</b>, <i>maximum number of variables</i>
  int  <b>threshold</b>, <i>threshold under which approximation stops</i>
  int  <b>safe</b>, <i>enforce safe approximation</i>
  double  <b>quality</b> <i>minimum improvement for accepted changes</i>
)
</pre>
<dd> Applies Tom Shiple's underappoximation algorithm. Proceeds
  in three phases:
  <ul>
  <li> collect information on each node in the BDD; this is done via DFS.
  <li> traverse the BDD in top-down fashion and compute for each node
  whether its elimination increases density.
  <li> traverse the BDD via DFS and actually perform the elimination.
  </ul>
  Returns the approximated BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_UnderApprox">Cudd_UnderApprox</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="cuddUniqueConst"></A>
DdNode * <I></I>
<B>cuddUniqueConst</B>(
  DdManager * <b>unique</b>, <i></i>
  CUDD_VALUE_TYPE  <b>value</b> <i></i>
)
</pre>
<dd> Checks the unique table for the existence of a constant node.
  If it does not exist, it creates a new one.  Does not
  modify the reference count of whatever is returned.  A newly created
  internal node comes back with a reference count 0.  Returns a
  pointer to the new node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddUniqueInterIVO"></A>
DdNode * <I></I>
<B>cuddUniqueInterIVO</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b>, <i></i>
  DdNode * <b>T</b>, <i></i>
  DdNode * <b>E</b> <i></i>
)
</pre>
<dd> Wrapper for cuddUniqueInter that is independent of
  variable ordering (IVO). This function does not require parameter
  index to precede the indices of the top nodes of T and E in the
  variable order.  Returns a pointer to the result node under normal
  conditions; NULL if reordering occurred or memory was exhausted.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
<a href="#Cudd_MakeBddFromZddCover">Cudd_MakeBddFromZddCover</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddUniqueInterZdd"></A>
DdNode * <I></I>
<B>cuddUniqueInterZdd</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b>, <i></i>
  DdNode * <b>T</b>, <i></i>
  DdNode * <b>E</b> <i></i>
)
</pre>
<dd> Checks the unique table for the existence of an internal
  ZDD node. If it does not exist, it creates a new one.  Does not
  modify the reference count of whatever is returned.  A newly created
  internal node comes back with a reference count 0.  For a newly
  created node, increments the reference counts of what T and E point
  to.  Returns a pointer to the new node if successful; NULL if memory
  is exhausted or if reordering took place.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddUniqueInter"></A>
DdNode * <I></I>
<B>cuddUniqueInter</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b>, <i></i>
  DdNode * <b>T</b>, <i></i>
  DdNode * <b>E</b> <i></i>
)
</pre>
<dd> Checks the unique table for the existence of an internal
  node. If it does not exist, it creates a new one.  Does not
  modify the reference count of whatever is returned.  A newly created
  internal node comes back with a reference count 0.  For a newly
  created node, increments the reference counts of what T and E point
  to.  Returns a pointer to the new node if successful; NULL if memory
  is exhausted or if reordering took place.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUniqueInterZdd">cuddUniqueInterZdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddUniqueLookup"></A>
static DdNode * <I></I>
<B>cuddUniqueLookup</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b>, <i></i>
  DdNode * <b>T</b>, <i></i>
  DdNode * <b>E</b> <i></i>
)
</pre>
<dd> Checks the unique table for the existence of an internal
  node. Returns a pointer to the node if it is in the table; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUniqueInter">cuddUniqueInter</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddUpdateInteractionMatrix"></A>
void <I></I>
<B>cuddUpdateInteractionMatrix</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>xindex</b>, <i></i>
  int  <b>yindex</b> <i></i>
)
</pre>
<dd> Updates the interaction matrix.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddVerifySol"></A>
DdNode * <I></I>
<B>cuddVerifySol</B>(
  DdManager * <b>bdd</b>, <i></i>
  DdNode * <b>F</b>, <i>the left-hand side of the equation</i>
  DdNode ** <b>G</b>, <i>the array of solutions</i>
  int * <b>yIndex</b>, <i>array holding the y variable indices</i>
  int  <b>n</b> <i>number of unknowns</i>
)
</pre>
<dd> Implements the recursive step of Cudd_VerifySol.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_VerifySol">Cudd_VerifySol</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSolve.c"TARGET="ABSTRACT"><CODE>cuddSolve.c</CODE></A>

<dt><pre>
<A NAME="cuddWindowReorder"></A>
int <I></I>
<B>cuddWindowReorder</B>(
  DdManager * <b>table</b>, <i>DD table</i>
  int  <b>low</b>, <i>lowest index to reorder</i>
  int  <b>high</b>, <i>highest index to reorder</i>
  Cudd_ReorderingType  <b>submethod</b> <i>window reordering option</i>
)
</pre>
<dd> Reorders by applying the method of the sliding window.
  Tries all possible permutations to the variables in a window that
  slides from low to high. The size of the window is determined by
  submethod.  Assumes that no dead nodes are present.  Returns 1 in
  case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="cuddXorLinear"></A>
static void <I></I>
<B>cuddXorLinear</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> XORs two rows of the linear transform matrix and replaces
  the first row with the result.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="cuddZddAlignToBdd"></A>
int <I></I>
<B>cuddZddAlignToBdd</B>(
  DdManager * <b>table</b> <i>DD manager</i>
)
</pre>
<dd> Reorders ZDD variables according to the order of the
  BDD variables. This function can be called at the end of BDD
  reordering to insure that the order of the ZDD variables is
  consistent with the order of the BDD variables. The number of ZDD
  variables must be a multiple of the number of BDD variables. Let
  <code>M</code> be the ratio of the two numbers. cuddZddAlignToBdd
  then considers the ZDD variables from <code>M*i</code> to
  <code>(M+1)*i-1</code> as corresponding to BDD variable
  <code>i</code>.  This function should be normally called from
  Cudd_ReduceHeap, which clears the cache.  Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> Changes the ZDD variable order for all diagrams and performs
  garbage collection of the ZDD unique table.
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddShuffleHeap">Cudd_zddShuffleHeap</a>
<a href="#Cudd_ReduceHeap">Cudd_ReduceHeap</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddChangeAux"></A>
DdNode * <I></I>
<B>cuddZddChangeAux</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>zvar</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddChange.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddChange"></A>
DdNode * <I></I>
<B>cuddZddChange</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  int  <b>var</b> <i></i>
)
</pre>
<dd> Substitutes a variable with its complement in a ZDD.
  returns a pointer to the result if successful; NULL
  otherwise. cuddZddChange performs the same function as
  Cudd_zddChange, but does not restart if reordering has taken
  place. Therefore it can be called from within a recursive
  procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddChange">Cudd_zddChange</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddComplement"></A>
DdNode	* <I></I>
<B>cuddZddComplement</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> Computes the complement of a ZDD node. So far, since we
  couldn't find a direct way to get the complement of a ZDD cover, we first
  convert a ZDD cover to a BDD, then make the complement of the ZDD cover
  from the complement of the BDD node by using ISOP.
<p>

<dd> <b>Side Effects</b> The result depends on current variable order.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddCountDoubleStep"></A>
static double <I></I>
<B>cuddZddCountDoubleStep</B>(
  DdNode * <b>P</b>, <i></i>
  st_table * <b>table</b>, <i></i>
  DdNode * <b>base</b>, <i></i>
  DdNode * <b>empty</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddCountDouble.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>

<dt><pre>
<A NAME="cuddZddCountStep"></A>
static int <I></I>
<B>cuddZddCountStep</B>(
  DdNode * <b>P</b>, <i></i>
  st_table * <b>table</b>, <i></i>
  DdNode * <b>base</b>, <i></i>
  DdNode * <b>empty</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddCount.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>

<dt><pre>
<A NAME="cuddZddDagInt"></A>
static int <I></I>
<B>cuddZddDagInt</B>(
  DdNode * <b>n</b>, <i></i>
  st_table * <b>tab</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddDagSize. Does
  not check for out-of-memory conditions.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddMisc.c"TARGET="ABSTRACT"><CODE>cuddZddMisc.c</CODE></A>

<dt><pre>
<A NAME="cuddZddDiff"></A>
DdNode * <I></I>
<B>cuddZddDiff</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>Q</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddDiff.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddDivideF"></A>
DdNode	* <I></I>
<B>cuddZddDivideF</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddDivideF.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddDivideF">Cudd_zddDivideF</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddDivide"></A>
DdNode	* <I></I>
<B>cuddZddDivide</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddDivide.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddDivide">Cudd_zddDivide</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddFreeUniv"></A>
void <I></I>
<B>cuddZddFreeUniv</B>(
  DdManager * <b>zdd</b> <i></i>
)
</pre>
<dd> Frees the ZDD universe.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddInitUniv">cuddZddInitUniv</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetCofactors2"></A>
int <I></I>
<B>cuddZddGetCofactors2</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int  <b>v</b>, <i></i>
  DdNode ** <b>f1</b>, <i></i>
  DdNode ** <b>f0</b> <i></i>
)
</pre>
<dd> Computes the two-way decomposition of f w.r.t. v.
<p>

<dd> <b>Side Effects</b> The results are returned in f1 and f0.
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddGetCofactors3">cuddZddGetCofactors3</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetCofactors3"></A>
int <I></I>
<B>cuddZddGetCofactors3</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int  <b>v</b>, <i></i>
  DdNode ** <b>f1</b>, <i></i>
  DdNode ** <b>f0</b>, <i></i>
  DdNode ** <b>fd</b> <i></i>
)
</pre>
<dd> Computes the three-way decomposition of function f (represented
  by a ZDD) wit respect to variable v.  Returns 0 if successful; 1 otherwise.
<p>

<dd> <b>Side Effects</b> The results are returned in f1, f0, and fd.
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddGetCofactors2">cuddZddGetCofactors2</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetNegVarIndex"></A>
int <I></I>
<B>cuddZddGetNegVarIndex</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Returns the index of negative ZDD variable.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetNegVarLevel"></A>
int <I></I>
<B>cuddZddGetNegVarLevel</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Returns the level of negative ZDD variable.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetNodeIVO"></A>
DdNode * <I></I>
<B>cuddZddGetNodeIVO</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Wrapper for cuddUniqueInterZdd that is independent of
  variable ordering (IVO). This function does not require parameter
  index to precede the indices of the top nodes of g and h in the
  variable order.  Returns a pointer to the result node under normal
  conditions; NULL if reordering occurred or memory was exhausted.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddGetNode">cuddZddGetNode</a>
<a href="#cuddZddIsop">cuddZddIsop</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetNode"></A>
DdNode * <I></I>
<B>cuddZddGetNode</B>(
  DdManager * <b>zdd</b>, <i></i>
  int  <b>id</b>, <i></i>
  DdNode * <b>T</b>, <i></i>
  DdNode * <b>E</b> <i></i>
)
</pre>
<dd> Wrapper for cuddUniqueInterZdd, which applies the ZDD
  reduction rule. Returns a pointer to the result node under normal
  conditions; NULL if reordering occurred or memory was exhausted.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUniqueInterZdd">cuddUniqueInterZdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetPosVarIndex"></A>
int <I></I>
<B>cuddZddGetPosVarIndex</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Returns the index of positive ZDD variable.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddGetPosVarLevel"></A>
int <I></I>
<B>cuddZddGetPosVarLevel</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Returns the level of positive ZDD variable.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddInitUniv"></A>
int <I></I>
<B>cuddZddInitUniv</B>(
  DdManager * <b>zdd</b> <i></i>
)
</pre>
<dd> Initializes the ZDD universe. Returns 1 if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddFreeUniv">cuddZddFreeUniv</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInit.c"TARGET="ABSTRACT"><CODE>cuddInit.c</CODE></A>

<dt><pre>
<A NAME="cuddZddIntersect"></A>
DdNode * <I></I>
<B>cuddZddIntersect</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>Q</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddIntersect.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddIsop"></A>
DdNode	* <I></I>
<B>cuddZddIsop</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>L</b>, <i></i>
  DdNode * <b>U</b>, <i></i>
  DdNode ** <b>zdd_I</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddIsop.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddIsop">Cudd_zddIsop</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddIsop.c"TARGET="ABSTRACT"><CODE>cuddZddIsop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddIte"></A>
DdNode * <I></I>
<B>cuddZddIte</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b>, <i></i>
  DdNode * <b>h</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddIte.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearAux"></A>
static int <I></I>
<B>cuddZddLinearAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearBackward"></A>
static int <I></I>
<B>cuddZddLinearBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>size</b>, <i></i>
  Move * <b>moves</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the ZDD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearDown"></A>
static Move * <I></I>
<B>cuddZddLinearDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b>, <i></i>
  Move * <b>prevMoves</b> <i></i>
)
</pre>
<dd> Sifts a variable down. Moves x down until either it
  reaches the bound (xHigh) or the size of the ZDD heap increases too
  much. Returns the set of moves in case of success; NULL if memory is
  full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearInPlace"></A>
static int <I></I>
<B>cuddZddLinearInPlace</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Linearly combines two adjacent variables. It assumes
  that no dead nodes are present on entry to this procedure.  The
  procedure then guarantees that no dead nodes will be present when it
  terminates.  cuddZddLinearInPlace assumes that x &lt; y.  Returns the
  number of keys in the table if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddSwapInPlace">cuddZddSwapInPlace</a>
<a href="#cuddLinearInPlace">cuddLinearInPlace</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearSifting"></A>
int <I></I>
<B>cuddZddLinearSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Implementation of the linear sifting algorithm for ZDDs.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries
    in each unique table.
    <li> Sift the variable up and down and applies the XOR transformation,
    remembering each time the total size of the DD heap.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddLinearUp"></A>
static Move * <I></I>
<B>cuddZddLinearUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  Move * <b>prevMoves</b> <i></i>
)
</pre>
<dd> Sifts a variable up applying the XOR
  transformation. Moves y up until either it reaches the bound (xLow)
  or the size of the ZDD heap increases too much.  Returns the set of
  moves in case of success; NULL if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddNextHigh"></A>
int <I></I>
<B>cuddZddNextHigh</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b> <i></i>
)
</pre>
<dd> Finds the next subtable with a larger index. Returns the
  index.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddNextLow"></A>
int <I></I>
<B>cuddZddNextLow</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b> <i></i>
)
</pre>
<dd> Finds the next subtable with a smaller index. Returns the
  index.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddProduct"></A>
DdNode	* <I></I>
<B>cuddZddProduct</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddProduct.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddProduct">Cudd_zddProduct</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddP"></A>
int <I></I>
<B>cuddZddP</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Prints a ZDD to the standard output. One line per node is
  printed. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddPrintDebug">Cudd_zddPrintDebug</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSiftingAux"></A>
static int <I></I>
<B>cuddZddSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>x_high</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSiftingBackward"></A>
static int <I></I>
<B>cuddZddSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the ZDD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSiftingDown"></A>
static Move * <I></I>
<B>cuddZddSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_high</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> Sifts a variable down. Moves x down until either it
  reaches the bound (x_high) or the size of the ZDD heap increases too
  much. Returns the set of moves in case of success; NULL if memory is
  full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSiftingUp"></A>
static Move * <I></I>
<B>cuddZddSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> Sifts a variable up. Moves y up until either it reaches
  the bound (x_low) or the size of the ZDD heap increases too much.
  Returns the set of moves in case of success; NULL if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSifting"></A>
int <I></I>
<B>cuddZddSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Implementation of Rudell's sifting algorithm.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries
    in each unique table.
    <li> Sift the variable up and down, remembering each time the
    total size of the DD heap.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSubset0"></A>
DdNode * <I></I>
<B>cuddZddSubset0</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  int  <b>var</b> <i></i>
)
</pre>
<dd> Computes the negative cofactor of a ZDD w.r.t. a
  variable. In terms of combinations, the result is the set of all
  combinations in which the variable is negated. Returns a pointer to
  the result if successful; NULL otherwise. cuddZddSubset0 performs
  the same function as Cudd_zddSubset0, but does not restart if
  reordering has taken place. Therefore it can be called from within a
  recursive procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddSubset1">cuddZddSubset1</a>
<a href="#Cudd_zddSubset0">Cudd_zddSubset0</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSubset1"></A>
DdNode * <I></I>
<B>cuddZddSubset1</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  int  <b>var</b> <i></i>
)
</pre>
<dd> Computes the positive cofactor of a ZDD w.r.t. a
  variable. In terms of combinations, the result is the set of all
  combinations in which the variable is asserted. Returns a pointer to
  the result if successful; NULL otherwise. cuddZddSubset1 performs
  the same function as Cudd_zddSubset1, but does not restart if
  reordering has taken place. Therefore it can be called from within a
  recursive procedure.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddSubset0">cuddZddSubset0</a>
<a href="#Cudd_zddSubset1">Cudd_zddSubset1</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSwapInPlace"></A>
int <I></I>
<B>cuddZddSwapInPlace</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Swaps two adjacent variables. It assumes that no dead
  nodes are present on entry to this procedure.  The procedure then
  guarantees that no dead nodes will be present when it terminates.
  cuddZddSwapInPlace assumes that x &lt; y.  Returns the number of keys in
  the table if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSwapping"></A>
int <I></I>
<B>cuddZddSwapping</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b>, <i></i>
  Cudd_ReorderingType  <b>heuristic</b> <i></i>
)
</pre>
<dd> Implementation of Plessier's algorithm that reorders
  variables by a sequence of (non-adjacent) swaps.
    <ol>
    <li> Select two variables (RANDOM or HEURISTIC).
    <li> Permute these variables.
    <li> If the nodes have decreased accept the permutation.
    <li> Otherwise reconstruct the original heap.
    <li> Loop.
    </ol>
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmCheck"></A>
int <I></I>
<B>cuddZddSymmCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Checks for symmetry of x and y. Ignores projection
  functions, unless they are isolated. Returns 1 in case of
  symmetry; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSiftingAux"></A>
static int <I></I>
<B>cuddZddSymmSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>x_high</b> <i></i>
)
</pre>
<dd> Given x_low <= x <= x_high moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Assumes that x is not part of a symmetry group. Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSiftingBackward"></A>
static int <I></I>
<B>cuddZddSymmSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the ZDD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSiftingConvAux"></A>
static int <I></I>
<B>cuddZddSymmSiftingConvAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>x_high</b> <i></i>
)
</pre>
<dd> Given x_low <= x <= x_high moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Assumes that x is either an isolated variable, or it is the bottom of
  a symmetry group. All symmetries may not have been found, because of
  exceeded growth limit. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSiftingConv"></A>
int <I></I>
<B>cuddZddSymmSiftingConv</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Symmetric sifting to convergence algorithm for ZDDs.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries in
    each unique subtable.
    <li> Sift the variable up and down, remembering each time the total
    size of the ZDD heap and grouping variables that are symmetric.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    <li> Repeat 1-4 until no further improvement.
    </ol>
  Returns 1 plus the number of symmetric variables if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddSymmSifting">cuddZddSymmSifting</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSifting_down"></A>
static Move * <I></I>
<B>cuddZddSymmSifting_down</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_high</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> Moves x down until either it reaches the bound (x_high)
  or the size of the ZDD heap increases too much. Assumes that x is the
  bottom of a symmetry group. Checks x for symmetry to the adjacent
  variables. If symmetry is found, the symmetry group of x is merged
  with the symmetry group of the other variable. Returns the set of
  moves in case of success; ZDD_MV_OOM if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSifting_up"></A>
static Move * <I></I>
<B>cuddZddSymmSifting_up</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> Moves x up until either it reaches the bound (x_low) or
  the size of the ZDD heap increases too much. Assumes that x is the top
  of a symmetry group.  Checks x for symmetry to the adjacent
  variables. If symmetry is found, the symmetry group of x is merged
  with the symmetry group of the other variable. Returns the set of
  moves in case of success; ZDD_MV_OOM if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSifting"></A>
int <I></I>
<B>cuddZddSymmSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Symmetric sifting algorithm.
  Assumes that no dead nodes are present.
    <ol>
    <li> Order all the variables according to the number of entries in
    each unique subtable.
    <li> Sift the variable up and down, remembering each time the total
    size of the ZDD heap and grouping variables that are symmetric.
    <li> Select the best permutation.
    <li> Repeat 3 and 4 for all variables.
    </ol>
  Returns 1 plus the number of symmetric variables if successful; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddZddSymmSiftingConv">cuddZddSymmSiftingConv</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddSymmSummary"></A>
static void <I></I>
<B>cuddZddSymmSummary</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b>, <i></i>
  int * <b>symvars</b>, <i></i>
  int * <b>symgroups</b> <i></i>
)
</pre>
<dd> Counts numbers of symmetric variables and symmetry
  groups.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="cuddZddTreeSifting"></A>
int <I></I>
<B>cuddZddTreeSifting</B>(
  DdManager * <b>table</b>, <i>DD table</i>
  Cudd_ReorderingType  <b>method</b> <i>reordering method for the groups of leaves</i>
)
</pre>
<dd> Tree sifting algorithm for ZDDs. Assumes that a tree
  representing a group hierarchy is passed as a parameter. It then
  reorders each group in postorder fashion by calling
  zddTreeSiftingAux.  Assumes that no dead nodes are present.  Returns
  1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="cuddZddUnateProduct"></A>
DdNode	* <I></I>
<B>cuddZddUnateProduct</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddUnateProduct.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddUnateProduct">Cudd_zddUnateProduct</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddUndoMoves"></A>
static Move* <I></I>
<B>cuddZddUndoMoves</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the ZDD heap to the
  order in effect before the moves.  Returns 1 in case of success;
  0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddLin.c"TARGET="ABSTRACT"><CODE>cuddZddLin.c</CODE></A>

<dt><pre>
<A NAME="cuddZddUnion"></A>
DdNode * <I></I>
<B>cuddZddUnion</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>Q</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddUnion.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="cuddZddUniqueCompare"></A>
int <I></I>
<B>cuddZddUniqueCompare</B>(
  int * <b>ptr_x</b>, <i></i>
  int * <b>ptr_y</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the
  variables according to the number of keys in the subtables.
  Returns the difference in number of keys between the two
  variables being compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="cuddZddWeakDivF"></A>
DdNode	* <I></I>
<B>cuddZddWeakDivF</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddWeakDivF.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDivF">Cudd_zddWeakDivF</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="cuddZddWeakDiv"></A>
DdNode	* <I></I>
<B>cuddZddWeakDiv</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>g</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddWeakDiv.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddWeakDiv">Cudd_zddWeakDiv</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddFuncs.c"TARGET="ABSTRACT"><CODE>cuddZddFuncs.c</CODE></A>

<dt><pre>
<A NAME="ddBddMaximallyExpand"></A>
static DdNode * <I></I>
<B>ddBddMaximallyExpand</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>lb</b>, <i>cube to be expanded</i>
  DdNode * <b>ub</b>, <i>upper bound cube</i>
  DdNode * <b>f</b> <i>function against which to expand</i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddMaximallyExpand.
  Returns set of primes or zero BDD if successful; NULL otherwise.  On entry
  to this function, ub and lb should be different from the zero BDD.  The
  function then maintains this invariant.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="ddBddShortestPathUnate"></A>
static int <I></I>
<B>ddBddShortestPathUnate</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int * <b>phases</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs shortest path computation on a unate function.
  Returns the length of the shortest path to one if successful;
  CUDD_OUT_OF_MEM otherwise.  This function is based on the observation
  that in the BDD of a unate function no node except the constant is
  reachable from the root via paths of different parity.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#getShortest">getShortest</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="ddBddToAddRecur"></A>
static DdNode * <I></I>
<B>ddBddToAddRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>B</b> <i></i>
)
</pre>
<dd> Performs the recursive step for Cudd_BddToAdd. Returns a
  pointer to the resulting ADD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddBridge.c"TARGET="ABSTRACT"><CODE>cuddBridge.c</CODE></A>

<dt><pre>
<A NAME="ddCheckPermuation"></A>
static int <I></I>
<B>ddCheckPermuation</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int * <b>perm</b>, <i></i>
  int * <b>invperm</b> <i></i>
)
</pre>
<dd> Checks the BDD variable group tree before a shuffle.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> Changes the BDD variable group tree.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddClearFlag"></A>
static void <I></I>
<B>ddClearFlag</B>(
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs a DFS from f, clearing the LSB of the next
  pointers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddSupportStep">ddSupportStep</a>
<a href="#ddFindSupport">ddFindSupport</a>
<a href="#ddLeavesInt">ddLeavesInt</a>
<a href="#ddDagInt">ddDagInt</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddClearGlobal"></A>
static void <I></I>
<B>ddClearGlobal</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>maxlevel</b> <i></i>
)
</pre>
<dd> Scans the DD and clears the LSB of the next pointers.
  The LSB of the next pointers are used as markers to tell whether a
  node was reached. Once the roots are counted, these flags are
  reset.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddCountRoots">ddCountRoots</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="ddClearGlobal"></A>
static void <I></I>
<B>ddClearGlobal</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> The LSB of the next pointers are used as markers to tell
  whether a node was reached by at least one DFS. Once the interaction
  matrix is built, these flags are reset.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="ddClearLocal"></A>
static void <I></I>
<B>ddClearLocal</B>(
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs a DFS from f, clearing the LSB of the then pointers.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="ddClearVars"></A>
static void <I></I>
<B>ddClearVars</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>SP</b> <i></i>
)
</pre>
<dd> Clears visited flags for variables.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddCofMintermAux"></A>
static double * <I></I>
<B>ddCofMintermAux</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Traverses the DD node and computes the fraction of
  minterms in the on-set of all positive cofactors simultaneously.
  It allocates an array with two more entries than there are
  variables below the one labeling the node.  One extra entry (the
  first in the array) is for the variable labeling the node. The other
  entry (the last one in the array) holds the fraction of minterms of
  the function rooted at node.  Each other entry holds the value for
  one cofactor. The array is put in a symbol table, to avoid repeated
  computation, and its address is returned by the procedure, for use
  by the caller.  Returns a pointer to the array of cofactor measures.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSign.c"TARGET="ABSTRACT"><CODE>cuddSign.c</CODE></A>

<dt><pre>
<A NAME="ddCountInternalMtrNodes"></A>
static int <I></I>
<B>ddCountInternalMtrNodes</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b> <i></i>
)
</pre>
<dd> Counts the number of internal nodes of the group tree.
  Returns the count.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddCountMintermAux"></A>
static double <I></I>
<B>ddCountMintermAux</B>(
  DdNode * <b>node</b>, <i></i>
  double  <b>max</b>, <i></i>
  DdHashTable * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CountMinterm.
  It is based on the following identity. Let |f| be the
  number of minterms of f. Then:
  <xmp>
    |f| = (|f0|+|f1|)/2
  </xmp>
  where f0 and f1 are the two cofactors of f.  Does not use the
  identity |f'| = max - |f|, to minimize loss of accuracy due to
  roundoff.  Returns the number of minterms of the function rooted at
  node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddCountPathAux"></A>
static double <I></I>
<B>ddCountPathAux</B>(
  DdNode * <b>node</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CountPath.
  It is based on the following identity. Let |f| be the
  number of paths of f. Then:
  <xmp>
    |f| = |f0|+|f1|
  </xmp>
  where f0 and f1 are the two cofactors of f.  Uses the
  identity |f'| = |f|, to improve the utilization of the (local) cache.
  Returns the number of paths of the function rooted at node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddCountPathsToNonZero"></A>
static double <I></I>
<B>ddCountPathsToNonZero</B>(
  DdNode * <b>N</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CountPathsToNonZero.
  It is based on the following identity. Let |f| be the
  number of paths of f. Then:
  <xmp>
    |f| = |f0|+|f1|
  </xmp>
  where f0 and f1 are the two cofactors of f.  Returns the number of
  paths of the function rooted at node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddCountRoots"></A>
static int <I></I>
<B>ddCountRoots</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Counts the number of roots at the levels between lower and
  upper.  The computation is based on breadth-first search.
  A node is a root if it is not reachable from any previously visited node.
  (All the nodes at level lower are therefore considered roots.)
  The visited flag uses the LSB of the next pointer.  Returns the root
  count. The roots that are constant nodes are always ignored.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddClearGlobal">ddClearGlobal</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="ddCreateGroup"></A>
static void <I></I>
<B>ddCreateGroup</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Creates a group encompassing variables from x to y in the
  DD table. In the current implementation it must be y == x+1.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddDagInt"></A>
static int <I></I>
<B>ddDagInt</B>(
  DdNode * <b>n</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_DagSize. Returns the
  number of nodes in the graph rooted at n.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddDissolveGroup"></A>
static void <I></I>
<B>ddDissolveGroup</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> x and y are variables in a group to be cut in two. The cut
  is to pass between x and y.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddDoDumpBlif"></A>
static int <I></I>
<B>ddDoDumpBlif</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  FILE * <b>fp</b>, <i></i>
  st_table * <b>visited</b>, <i></i>
  char ** <b>names</b>, <i></i>
  int  <b>mv</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_DumpBlif. Traverses
  the BDD f and writes a multiplexer-network description to the file
  pointed by fp in blif format. f is assumed to be a regular pointer
  and ddDoDumpBlif guarantees this assumption in the recursive calls.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>

<dt><pre>
<A NAME="ddDoDumpDDcal"></A>
static int <I></I>
<B>ddDoDumpDDcal</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  FILE * <b>fp</b>, <i></i>
  st_table * <b>visited</b>, <i></i>
  char ** <b>names</b>, <i></i>
  ptruint  <b>mask</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_DumpDDcal. Traverses
  the BDD f and writes a line for each node to the file
  pointed by fp in DDcal format. f is assumed to be a regular pointer
  and ddDoDumpDDcal guarantees this assumption in the recursive calls.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>

<dt><pre>
<A NAME="ddDoDumpDaVinci"></A>
static int <I></I>
<B>ddDoDumpDaVinci</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  FILE * <b>fp</b>, <i></i>
  st_table * <b>visited</b>, <i></i>
  char ** <b>names</b>, <i></i>
  ptruint  <b>mask</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_DumpDaVinci. Traverses
  the BDD f and writes a term expression to the file
  pointed by fp in daVinci format. f is assumed to be a regular pointer
  and ddDoDumpDaVinci guarantees this assumption in the recursive calls.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>

<dt><pre>
<A NAME="ddDoDumpFactoredForm"></A>
static int <I></I>
<B>ddDoDumpFactoredForm</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  FILE * <b>fp</b>, <i></i>
  char ** <b>names</b> <i></i>
)
</pre>
<dd> Performs the recursive step of
  Cudd_DumpFactoredForm. Traverses the BDD f and writes a factored
  form for each node to the file pointed by fp in terms of the
  factored forms of the children. Constants are propagated, and
  absorption is applied.  f is assumed to be a regular pointer and
  ddDoDumpFActoredForm guarantees this assumption in the recursive
  calls.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_DumpFactoredForm">Cudd_DumpFactoredForm</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExport.c"TARGET="ABSTRACT"><CODE>cuddExport.c</CODE></A>

<dt><pre>
<A NAME="ddEpdCountMintermAux"></A>
static int <I></I>
<B>ddEpdCountMintermAux</B>(
  DdNode * <b>node</b>, <i></i>
  EpDouble * <b>max</b>, <i></i>
  EpDouble * <b>epd</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_EpdCountMinterm.
  It is based on the following identity. Let |f| be the
  number of minterms of f. Then:
  <xmp>
    |f| = (|f0|+|f1|)/2
  </xmp>
  where f0 and f1 are the two cofactors of f.  Does not use the
  identity |f'| = max - |f|, to minimize loss of accuracy due to
  roundoff.  Returns the number of minterms of the function rooted at
  node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddEpdFree"></A>
static enum st_retval <I></I>
<B>ddEpdFree</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the memory used to store the minterm counts
  recorded in the visited table. Returns ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddExchange"></A>
static int <I></I>
<B>ddExchange</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b>, <i></i>
  double  <b>temp</b> <i></i>
)
</pre>
<dd> This is the same funcion as ddSwapping except for
  comparison expression.  Use probability function, exp(-size_change/temp).
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="ddExtSymmCheck"></A>
static int <I></I>
<B>ddExtSymmCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Checks for extended symmetry of x and y. Returns 1 in
  case of extended symmetry; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddFindEssentialRecur"></A>
static DdNode * <I></I>
<B>ddFindEssentialRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Implements the recursive step of Cudd_FindEssential.
  Returns a pointer to the cube BDD if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="ddFindNodeHiLo"></A>
static void <I></I>
<B>ddFindNodeHiLo</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int * <b>lower</b>, <i></i>
  int * <b>upper</b> <i></i>
)
</pre>
<dd> Finds the lower and upper bounds of the group
  represented by treenode.  From the index and size fields we need to
  derive the current positions, and find maximum and minimum.
<p>

<dd> <b>Side Effects</b> The bounds are returned as side effects.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddFindSupport"></A>
static void <I></I>
<B>ddFindSupport</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int * <b>SP</b> <i></i>
)
</pre>
<dd> Recursively find the support of f.  This function uses the
  LSB of the next field of the nodes of f as visited flag.  It also uses the
  LSB of the next field of the variables as flag to remember whether a
  certain index has already been seen.  Finally, it uses the manager stack
  to record all seen indices.
<p>

<dd> <b>Side Effects</b> The stack pointer SP is modified by side-effect.  The next
  fields are changed and need to be reset.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddFindTwoLiteralClausesRecur"></A>
static DdTlcInfo * <I></I>
<B>ddFindTwoLiteralClausesRecur</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Implements the recursive step of
  Cudd_FindTwoLiteralClauses.  The DD node is assumed to be not
  constant.  Returns a pointer to a set of clauses if successful; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_FindTwoLiteralClauses">Cudd_FindTwoLiteralClauses</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="ddGetLargestCubeUnate"></A>
static DdNode * <I></I>
<B>ddGetLargestCubeUnate</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int * <b>phases</b>, <i></i>
  st_table * <b>table</b> <i></i>
)
</pre>
<dd> Extracts largest prime of a unate function.  Returns the BDD of
  the prime if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#getPath">getPath</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="ddGroupMoveBackward"></A>
static int <I></I>
<B>ddGroupMoveBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Undoes the swap two groups.  Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupMove"></A>
static int <I></I>
<B>ddGroupMove</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Swaps two groups and records the move. Returns the
  number of keys in the DD table in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupSiftingAux"></A>
static int <I></I>
<B>ddGroupSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b>, <i></i>
  DD_CHKFP  <b>checkFunction</b>, <i></i>
  int  <b>lazyFlag</b> <i></i>
)
</pre>
<dd> Sifts one variable up and down until it has taken all
  positions. Checks for aggregation. There may be at most two sweeps,
  even if the group grows.  Assumes that x is either an isolated
  variable, or it is the bottom of a group. All groups may not have
  been found. The variable being moved is returned to the best position
  seen during sifting.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupSiftingBackward"></A>
static int <I></I>
<B>ddGroupSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b>, <i></i>
  int  <b>upFlag</b>, <i></i>
  int  <b>lazyFlag</b> <i></i>
)
</pre>
<dd> Determines the best position for a variables and returns
  it there.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupSiftingDown"></A>
static int <I></I>
<B>ddGroupSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b>, <i></i>
  DD_CHKFP  <b>checkFunction</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Sifts down a variable until it reaches position xHigh.
  Assumes that x is the bottom of a group (or a singleton).  Records
  all the moves.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupSiftingUp"></A>
static int <I></I>
<B>ddGroupSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  DD_CHKFP  <b>checkFunction</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Sifts up a variable until either it reaches position
  xLow or the size of the DD heap increases too much. Assumes that y is
  the top of a group (or a singleton).  Checks y for aggregation to the
  adjacent variables. Records all the moves that are appended to the
  list of moves received as input and returned as a side effect.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddGroupSifting"></A>
static int <I></I>
<B>ddGroupSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b>, <i></i>
  DD_CHKFP  <b>checkFunction</b>, <i></i>
  int  <b>lazyFlag</b> <i></i>
)
</pre>
<dd> Sifts from treenode->low to treenode->high. If
  croupcheck == CUDD_GROUP_CHECK7, it checks for group creation at the
  end of the initial sifting. If a group is created, it is then sifted
  again. After sifting one variable, the group that contains it is
  dissolved.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddIsVarHandled"></A>
static int <I></I>
<B>ddIsVarHandled</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Checks whether a variables is already handled. This
  function is used for lazy sifting.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddJumpingAux"></A>
static int <I></I>
<B>ddJumpingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>x_high</b>, <i></i>
  double  <b>temp</b> <i></i>
)
</pre>
<dd> If x==x_low, it executes jumping_down. If x==x_high, it
  executes jumping_up. This funcion is similar to ddSiftingAux. Returns
  1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="ddJumpingDown"></A>
static Move * <I></I>
<B>ddJumpingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_high</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> This is a simplified version of ddSiftingDown. It does not
  use lower bounding. Returns the set of moves in case of success; NULL
  if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="ddJumpingUp"></A>
static Move * <I></I>
<B>ddJumpingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b>, <i></i>
  int  <b>initial_size</b> <i></i>
)
</pre>
<dd> This is a simplified version of ddSiftingUp. It does not
  use lower bounding. Returns the set of moves in case of success; NULL
  if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="ddLeavesInt"></A>
static int <I></I>
<B>ddLeavesInt</B>(
  DdNode * <b>n</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_CountLeaves. Returns
  the number of leaves in the DD rooted at n.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_CountLeaves">Cudd_CountLeaves</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddLinearAndSiftingAux"></A>
static int <I></I>
<B>ddLinearAndSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. At each step a linear transformation is tried, and, if it
  decreases the size of the DD, it is accepted. Finds the best position
  and does the required changes.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddLinearAndSiftingBackward"></A>
static int <I></I>
<B>ddLinearAndSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>size</b>, <i></i>
  Move * <b>moves</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the DD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddLinearAndSiftingDown"></A>
static Move * <I></I>
<B>ddLinearAndSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b>, <i></i>
  Move * <b>prevMoves</b> <i></i>
)
</pre>
<dd> Sifts a variable down and applies linear
  transformations. Moves x down until either it reaches the bound
  (xHigh) or the size of the DD heap increases too much. Returns the
  set of moves in case of success; NULL if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddLinearAndSiftingUp"></A>
static Move * <I></I>
<B>ddLinearAndSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  Move * <b>prevMoves</b> <i></i>
)
</pre>
<dd> Sifts a variable up and applies linear transformations.
  Moves y up until either it reaches the bound (xLow) or the size of
  the DD heap increases too much.  Returns the set of moves in case of
  success; NULL if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddLinearUniqueCompare"></A>
static int <I></I>
<B>ddLinearUniqueCompare</B>(
  int * <b>ptrX</b>, <i></i>
  int * <b>ptrY</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the
  variables according to the number of keys in the subtables.
  Returns the difference in number of keys between the two
  variables being compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddMergeGroups"></A>
static void <I></I>
<B>ddMergeGroups</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Creates a single group from low to high and adjusts the
  index field of the tree node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddNoCheck"></A>
static int <I></I>
<B>ddNoCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Pretends to check two variables for aggregation. Always
  returns 0.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddPatchTree"></A>
static void <I></I>
<B>ddPatchTree</B>(
  DdManager * <b>dd</b>, <i></i>
  MtrNode * <b>treenode</b> <i></i>
)
</pre>
<dd> Fixes a variable tree after the insertion of new subtables.
  After such an insertion, the low fields of the tree below the insertion
  point are inconsistent.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="ddPermuteWindow3"></A>
static int <I></I>
<B>ddPermuteWindow3</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b> <i></i>
)
</pre>
<dd> Tries all the permutations of the three variables between
  x and x+2 and retains the best. Assumes that no dead nodes are
  present.  Returns the index of the best permutation (1-6) in case of
  success; 0 otherwise.Assumes that no dead nodes are present.  Returns
  the index of the best permutation (1-6) in case of success; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddPermuteWindow4"></A>
static int <I></I>
<B>ddPermuteWindow4</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>w</b> <i></i>
)
</pre>
<dd> Tries all the permutations of the four variables between
  w and w+3 and retains the best. Assumes that no dead nodes are
  present.  Returns the index of the best permutation (1-24) in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddPickArbitraryMinterms"></A>
static int <I></I>
<B>ddPickArbitraryMinterms</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  int  <b>nvars</b>, <i></i>
  int  <b>nminterms</b>, <i></i>
  char ** <b>string</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_bddPickArbitraryMinterms.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_bddPickArbitraryMinterms">Cudd_bddPickArbitraryMinterms</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddPickRepresentativeCube"></A>
static int <I></I>
<B>ddPickRepresentativeCube</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>node</b>, <i></i>
  double * <b>weight</b>, <i></i>
  char * <b>string</b> <i></i>
)
</pre>
<dd> Finds a representative cube of a BDD with the weight of
  each variable. From the top variable, if the weight is greater than or
  equal to 0.0, choose THEN branch unless the child is the constant 0.
  Otherwise, choose ELSE branch unless the child is the constant 0.
<p>

<dd> <b>Side Effects</b> Cudd_SubsetWithMaskVars Cudd_bddPickOneCube
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddPrintMintermAux"></A>
static void <I></I>
<B>ddPrintMintermAux</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  int * <b>list</b> <i>current recursion path</i>
)
</pre>
<dd> Performs the recursive step of Cudd_PrintMinterm.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddRehashZdd"></A>
static void <I></I>
<B>ddRehashZdd</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>i</b> <i></i>
)
</pre>
<dd> Rehashes a ZDD unique subtable.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRehash">cuddRehash</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="ddReorderChildren"></A>
static int <I></I>
<B>ddReorderChildren</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  Cudd_ReorderingType  <b>method</b> <i></i>
)
</pre>
<dd> Reorders the children of a group tree node according to
  the options. After reordering puts all the variables in the group
  and/or its descendents in a single group. This allows hierarchical
  reordering.  If the variables in the group do not exist yet, simply
  does nothing. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddReorderPostprocess"></A>
static int <I></I>
<B>ddReorderPostprocess</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Cleans up at the end of reordering.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddReorderPreprocess"></A>
static int <I></I>
<B>ddReorderPreprocess</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Prepares the DD heap for dynamic reordering. Does
  garbage collection, to guarantee that there are no dead nodes;
  clears the cache, which is invalidated by dynamic reordering; initializes
  the number of isolated projection functions; and initializes the
  interaction matrix.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddReportRefMess"></A>
static void <I></I>
<B>ddReportRefMess</B>(
  DdManager * <b>unique</b>, <i>manager</i>
  int  <b>i</b>, <i>table in which the problem occurred</i>
  const char * <b>caller</b> <i>procedure that detected the problem</i>
)
</pre>
<dd> Reports problem in garbage collection.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddGarbageCollect">cuddGarbageCollect</a>
<a href="#cuddGarbageCollectZdd">cuddGarbageCollectZdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="ddResetVarHandled"></A>
static int <I></I>
<B>ddResetVarHandled</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Resets a variable to be processed. This function is used
  for lazy sifting.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddResizeTable"></A>
static int <I></I>
<B>ddResizeTable</B>(
  DdManager * <b>unique</b>, <i></i>
  int  <b>index</b>, <i></i>
  int  <b>amount</b> <i></i>
)
</pre>
<dd> Increases the number of subtables in a unique table so
  that it meets or exceeds index.  The parameter amount determines how
  much spare space is allocated to prevent too frequent resizing.  If
  index is negative, the table is resized, but no new variables are
  created.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Reserve">Cudd_Reserve</a>
<a href="#cuddResizeTableZdd">cuddResizeTableZdd</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME="ddSecDiffCheck"></A>
static int <I></I>
<B>ddSecDiffCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Checks two variables for aggregation. The check is based
  on the second difference of the number of nodes as a function of the
  layer. If the second difference is lower than a given threshold
  (typically negative) then the two variables should be aggregated.
  Returns 1 if the two variables pass the test; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddSetVarHandled"></A>
static int <I></I>
<B>ddSetVarHandled</B>(
  DdManager * <b>dd</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Sets a variable to already handled. This function is used
  for lazy sifting.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddShuffle"></A>
static int <I></I>
<B>ddShuffle</B>(
  DdManager * <b>table</b>, <i></i>
  DdHalfWord * <b>permutation</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Reorders variables according to a given permutation.
  The i-th permutation array contains the index of the variable that
  should be brought to the i-th level. ddShuffle assumes that no
  dead nodes are present and that the interaction matrix is properly
  initialized.  The reordering is achieved by a series of upward sifts.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="ddShuffle"></A>
static int <I></I>
<B>ddShuffle</B>(
  DdManager * <b>table</b>, <i></i>
  int * <b>permutation</b> <i></i>
)
</pre>
<dd> Reorders variables according to a given permutation.
  The i-th permutation array contains the index of the variable that
  should be brought to the i-th level. ddShuffle assumes that no
  dead nodes are present and that the interaction matrix is properly
  initialized.  The reordering is achieved by a series of upward sifts.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSiftUp"></A>
static int <I></I>
<B>ddSiftUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b> <i></i>
)
</pre>
<dd> Takes a variable from position x and sifts it up to
  position xLow;  xLow should be less than or equal to x.
  Returns 1 if successful; 0 otherwise
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="ddSiftUp"></A>
static int <I></I>
<B>ddSiftUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b> <i></i>
)
</pre>
<dd> Takes a variable from position x and sifts it up to
  position xLow;  xLow should be less than or equal to x.
  Returns 1 if successful; 0 otherwise
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSiftingAux"></A>
static int <I></I>
<B>ddSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSiftingBackward"></A>
static int <I></I>
<B>ddSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>size</b>, <i></i>
  Move * <b>moves</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the DD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSiftingDown"></A>
static Move * <I></I>
<B>ddSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Sifts a variable down. Moves x down until either it
  reaches the bound (xHigh) or the size of the DD heap increases too
  much. Returns the set of moves in case of success; NULL if memory is
  full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSiftingUp"></A>
static Move * <I></I>
<B>ddSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b> <i></i>
)
</pre>
<dd> Sifts a variable up. Moves y up until either it reaches
  the bound (xLow) or the size of the DD heap increases too much.
  Returns the set of moves in case of success; NULL if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSuppInteract"></A>
static void <I></I>
<B>ddSuppInteract</B>(
  DdNode * <b>f</b>, <i></i>
  char * <b>support</b> <i></i>
)
</pre>
<dd> Performs a DFS from f. Uses the LSB of the then pointer
  as visited flag.
<p>

<dd> <b>Side Effects</b> Accumulates in support the variables on which f depends.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="ddSupportStep"></A>
static void <I></I>
<B>ddSupportStep</B>(
  DdNode * <b>f</b>, <i></i>
  int * <b>support</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_Support. Performs a
  DFS from f. The support is accumulated in supp as a side effect. Uses
  the LSB of the then pointer as visited flag.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddClearFlag">ddClearFlag</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="ddSwapAny"></A>
static Move * <I></I>
<B>ddSwapAny</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Swaps any two variables. Returns the set of moves.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddSymmGroupMoveBackward"></A>
static int <I></I>
<B>ddSymmGroupMoveBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Undoes the swap of two groups. x is assumed to be the
  bottom variable of the first group. y is assumed to be the top
  variable of the second group.  Returns the number of keys in the table
  if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmGroupMove"></A>
static int <I></I>
<B>ddSymmGroupMove</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Swaps two groups. x is assumed to be the bottom variable
  of the first group. y is assumed to be the top variable of the second
  group.  Updates the list of moves. Returns the number of keys in the
  table if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSiftingAux"></A>
static int <I></I>
<B>ddSymmSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Assumes that x is not part of a symmetry group. Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSiftingBackward"></A>
static int <I></I>
<B>ddSymmSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the DD heap to the
  position giving the minimum size. In case of ties, returns to the
  closest position giving the minimum size. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSiftingConvAux"></A>
static int <I></I>
<B>ddSymmSiftingConvAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Given xLow <= x <= xHigh moves x up and down between the
  boundaries. Finds the best position and does the required changes.
  Assumes that x is either an isolated variable, or it is the bottom of
  a symmetry group. All symmetries may not have been found, because of
  exceeded growth limit. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSiftingDown"></A>
static Move * <I></I>
<B>ddSymmSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Moves x down until either it reaches the bound (xHigh)
  or the size of the DD heap increases too much. Assumes that x is the
  bottom of a symmetry group. Checks x for symmetry to the adjacent
  variables. If symmetry is found, the symmetry group of x is merged
  with the symmetry group of the other variable. Returns the set of
  moves in case of success; MV_OOM if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSiftingUp"></A>
static Move * <I></I>
<B>ddSymmSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b> <i></i>
)
</pre>
<dd> Moves x up until either it reaches the bound (xLow) or
  the size of the DD heap increases too much. Assumes that x is the top
  of a symmetry group.  Checks x for symmetry to the adjacent
  variables. If symmetry is found, the symmetry group of x is merged
  with the symmetry group of the other variable. Returns the set of
  moves in case of success; MV_OOM if memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmSummary"></A>
static void <I></I>
<B>ddSymmSummary</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b>, <i></i>
  int * <b>symvars</b>, <i></i>
  int * <b>symgroups</b> <i></i>
)
</pre>
<dd> Counts numbers of symmetric variables and symmetry
  groups.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddSymmUniqueCompare"></A>
static int <I></I>
<B>ddSymmUniqueCompare</B>(
  int * <b>ptrX</b>, <i></i>
  int * <b>ptrY</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the variables
  according to the number of keys in the subtables.
  Returns the difference in number of keys between the two
  variables being compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSymmetry.c"TARGET="ABSTRACT"><CODE>cuddSymmetry.c</CODE></A>

<dt><pre>
<A NAME="ddTreeSiftingAux"></A>
static int <I></I>
<B>ddTreeSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  Cudd_ReorderingType  <b>method</b> <i></i>
)
</pre>
<dd> Recursively visits the group tree and reorders each
  group in postorder fashion.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddUndoMoves"></A>
static Move* <I></I>
<B>ddUndoMoves</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b> <i></i>
)
</pre>
<dd> Given a set of moves, returns the DD heap to the
  order in effect before the moves.  Returns 1 in case of success;
  0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLinear.c"TARGET="ABSTRACT"><CODE>cuddLinear.c</CODE></A>

<dt><pre>
<A NAME="ddUniqueCompareGroup"></A>
static int <I></I>
<B>ddUniqueCompareGroup</B>(
  int * <b>ptrX</b>, <i></i>
  int * <b>ptrY</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the variables
  according to the number of keys in the subtables.  Returns the
  difference in number of keys between the two variables being
  compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddUniqueCompare"></A>
static int <I></I>
<B>ddUniqueCompare</B>(
  int * <b>ptrX</b>, <i></i>
  int * <b>ptrY</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the
  variables according to the number of keys in the subtables.
  Returns the difference in number of keys between the two
  variables being compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddUpdateInteract"></A>
static void <I></I>
<B>ddUpdateInteract</B>(
  DdManager * <b>table</b>, <i></i>
  char * <b>support</b> <i></i>
)
</pre>
<dd> If support[i
<p>

<dd> <b>Side Effects</b> Clears support.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddInteract.c"TARGET="ABSTRACT"><CODE>cuddInteract.c</CODE></A>

<dt><pre>
<A NAME="ddUpdateMtrTree"></A>
static int <I></I>
<B>ddUpdateMtrTree</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int * <b>perm</b>, <i></i>
  int * <b>invperm</b> <i></i>
)
</pre>
<dd> Updates the BDD variable group tree before a shuffle.
  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> Changes the BDD variable group tree.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddReorder.c"TARGET="ABSTRACT"><CODE>cuddReorder.c</CODE></A>

<dt><pre>
<A NAME="ddVarGroupCheck"></A>
static int <I></I>
<B>ddVarGroupCheck</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Checks for grouping of x and y. Returns 1 in
  case of grouping; 0 otherwise. This function is used for lazy sifting.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGroup.c"TARGET="ABSTRACT"><CODE>cuddGroup.c</CODE></A>

<dt><pre>
<A NAME="ddWindow2"></A>
static int <I></I>
<B>ddWindow2</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by applying a sliding window of width 2.
  Tries both permutations of the variables in a window
  that slides from low to high.  Assumes that no dead nodes are
  present.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddWindow3"></A>
static int <I></I>
<B>ddWindow3</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by applying a sliding window of width 3.
  Tries all possible permutations to the variables in a
  window that slides from low to high.  Assumes that no dead nodes are
  present.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddWindow4"></A>
static int <I></I>
<B>ddWindow4</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by applying a sliding window of width 4.
  Tries all possible permutations to the variables in a
  window that slides from low to high.  Assumes that no dead nodes are
  present.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddWindowConv2"></A>
static int <I></I>
<B>ddWindowConv2</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by repeatedly applying a sliding window of width
  2. Tries both permutations of the variables in a window
  that slides from low to high.  Assumes that no dead nodes are
  present.  Uses an event-driven approach to determine convergence.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddWindowConv3"></A>
static int <I></I>
<B>ddWindowConv3</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by repeatedly applying a sliding window of width
  3. Tries all possible permutations to the variables in a
  window that slides from low to high.  Assumes that no dead nodes are
  present.  Uses an event-driven approach to determine convergence.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="ddWindowConv4"></A>
static int <I></I>
<B>ddWindowConv4</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Reorders by repeatedly applying a sliding window of width
  4. Tries all possible permutations to the variables in a
  window that slides from low to high.  Assumes that no dead nodes are
  present.  Uses an event-driven approach to determine convergence.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddWindow.c"TARGET="ABSTRACT"><CODE>cuddWindow.c</CODE></A>

<dt><pre>
<A NAME="debugCheckParent"></A>
static void <I></I>
<B>debugCheckParent</B>(
  DdManager * <b>table</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> Searches all the subtables above node. Very expensive.
  The same check is now implemented more efficiently in ddDebugCheck.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#debugFindParent">debugFindParent</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>

<dt><pre>
<A NAME="debugFindParent"></A>
static void <I></I>
<B>debugFindParent</B>(
  DdManager * <b>table</b>, <i></i>
  DdNode * <b>node</b> <i></i>
)
</pre>
<dd> Searches the subtables above node for its parents.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCheck.c"TARGET="ABSTRACT"><CODE>cuddCheck.c</CODE></A>

<dt><pre>
<A NAME="double *�prob�"></A>
 <I></I>
<B>double *�prob�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �mg�"></A>
 <I></I>
<B>double �mg�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �mg�"></A>
 <I></I>
<B>double �mg�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �m�"></A>
 <I></I>
<B>double �m�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality0�minimum improvement for accepted changes when b=0"></A>
 <I></I>
<B>double �quality0�minimum improvement for accepted changes when b=0</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality0�minimum improvement for accepted changes when b=0"></A>
 <I></I>
<B>double �quality0�minimum improvement for accepted changes when b=0</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality�minimum improvement for accepted changes"></A>
 <I></I>
<B>double �quality�minimum improvement for accepted changes</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality�minimum improvement for accepted changes"></A>
 <I></I>
<B>double �quality�minimum improvement for accepted changes</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality�minimum improvement for accepted changes"></A>
 <I></I>
<B>double �quality�minimum improvement for accepted changes</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="double �quality�minimum improvement for accepted changes"></A>
 <I></I>
<B>double �quality�minimum improvement for accepted changes</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="dp2"></A>
static int <I></I>
<B>dp2</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  st_table * <b>t</b> <i></i>
)
</pre>
<dd> Performs the recursive step of cuddP. Returns 1 in case
  of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="emptyClauseSet"></A>
static DdTlcInfo * <I></I>
<B>emptyClauseSet</B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns a pointer to an empty set of clauses if
  successful; NULL otherwise.  No bit vector for the phases is
  allocated.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="equalp"></A>
static int <I></I>
<B>equalp</B>(
  DdHalfWord  <b>var1a</b>, <i></i>
  short  <b>phase1a</b>, <i></i>
  DdHalfWord  <b>var1b</b>, <i></i>
  short  <b>phase1b</b>, <i></i>
  DdHalfWord  <b>var2a</b>, <i></i>
  short  <b>phase2a</b>, <i></i>
  DdHalfWord  <b>var2b</b>, <i></i>
  short  <b>phase2b</b> <i></i>
)
</pre>
<dd> Returns true iff the two arguments are identical
  clauses.  Since literals are sorted, we only need to compare
  literals in the same position.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#beforep">beforep</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="find_best"></A>
static int <I></I>
<B>find_best</B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the index of the fittest individual.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="fixVarTree"></A>
static void <I></I>
<B>fixVarTree</B>(
  MtrNode * <b>treenode</b>, <i></i>
  int * <b>perm</b>, <i></i>
  int  <b>size</b> <i></i>
)
</pre>
<dd> Fixes a variable group tree.
<p>

<dd> <b>Side Effects</b> Changes the variable group tree.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAPI.c"TARGET="ABSTRACT"><CODE>cuddAPI.c</CODE></A>

<dt><pre>
<A NAME="freeMatrix"></A>
static void <I></I>
<B>freeMatrix</B>(
  DdHalfWord ** <b>matrix</b> <i></i>
)
</pre>
<dd> Frees a two-dimensional matrix allocated by getMatrix.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#getMatrix">getMatrix</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="freePathPair"></A>
static enum st_retval <I></I>
<B>freePathPair</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the entries of the visited symbol table. Returns
  ST_CONTINUE.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="gatherInfoAux"></A>
static NodeData * <I></I>
<B>gatherInfoAux</B>(
  DdNode * <b>node</b>, <i>function to analyze</i>
  ApproxInfo * <b>info</b>, <i>info on BDD</i>
  int  <b>parity</b> <i>gather parity information</i>
)
</pre>
<dd> Recursively counts minterms and computes reference
  counts of each node in the BDD.  Similar to the cuddCountMintermAux
  which recursively counts the number of minterms for the dag rooted
  at each node in terms of the total number of variables (max). It assumes
  that the node pointer passed to it is regular and it maintains the
  invariant.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#gatherInfo">gatherInfo</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="gatherInfo"></A>
static ApproxInfo * <I></I>
<B>gatherInfo</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>node</b>, <i>function to be analyzed</i>
  int  <b>numVars</b>, <i>number of variables node depends on</i>
  int  <b>parity</b> <i>gather parity information</i>
)
</pre>
<dd> Counts minterms and computes reference counts of each
  node in the BDD. The minterm count is separately computed for the
  node and its complement. This is to avoid cancellation
  errors. Returns a pointer to the data structure holding the
  information gathered if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddUnderApprox">cuddUnderApprox</a>
<a href="#gatherInfoAux">gatherInfoAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="gcd"></A>
static int <I></I>
<B>gcd</B>(
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Returns the gcd of two integers. Uses the binary GCD
  algorithm described in Cormen, Leiserson, and Rivest.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="getCube"></A>
static DdNode * <I></I>
<B>getCube</B>(
  DdManager * <b>manager</b>, <i></i>
  st_table * <b>visited</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int  <b>cost</b> <i></i>
)
</pre>
<dd> Build a BDD for a largest cube of f.
  Given the minimum length from the root, and the minimum
  lengths for each node (in visited), apply triangulation at each node.
  Of the two children of each node on a shortest path, at least one is
  on a shortest path. In case of ties the procedure chooses the THEN
  children.
  Returns a pointer to the cube BDD representing the path if
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="getLargest"></A>
static cuddPathPair <I></I>
<B>getLargest</B>(
  DdNode * <b>root</b>, <i></i>
  st_table * <b>visited</b> <i></i>
)
</pre>
<dd> Finds the size of the largest cube(s) in a DD.
  This problem is translated into finding the shortest paths from a node
  when both THEN and ELSE arcs have unit lengths.
  Uses a local symbol table to store the lengths for each
  node. Only the lengths for the regular nodes are entered in the table,
  because those for the complement nodes are simply obtained by swapping
  the two lenghts.
  Returns a pair of lengths: the length of the shortest path to 1;
  and the length of the shortest path to 0. This is done so as to take
  complement arcs into account.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="getLevelKeys"></A>
static int <I></I>
<B>getLevelKeys</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>l</b> <i></i>
)
</pre>
<dd> Returns the number of nodes at one level of a unique table.
  The projection function, if isolated, is not counted.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="getMatrix"></A>
static DdHalfWord ** <I></I>
<B>getMatrix</B>(
  int  <b>rows</b>, <i>number of rows</i>
  int  <b>cols</b> <i>number of columns</i>
)
</pre>
<dd> Allocates a two-dimensional matrix of ints.
  Returns the pointer to the matrix if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#freeMatrix">freeMatrix</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="getMaxBinomial"></A>
static int <I></I>
<B>getMaxBinomial</B>(
  int  <b>n</b> <i></i>
)
</pre>
<dd> Computes the maximum value of (n choose k) for a given
  n.  The maximum value occurs for k = n/2 when n is even, or k =
  (n-1)/2 when n is odd.  The algorithm used in this procedure avoids
  intermediate overflow problems.  It is based on the identity
  <pre>
    binomial(n,k) = n/k * binomial(n-1,k-1).
  </pre>
  Returns the computed value if successful; -1 if out of range.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="getPath"></A>
static DdNode * <I></I>
<B>getPath</B>(
  DdManager * <b>manager</b>, <i></i>
  st_table * <b>visited</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  int * <b>weight</b>, <i></i>
  int  <b>cost</b> <i></i>
)
</pre>
<dd> Build a BDD for a shortest path of f.
  Given the minimum length from the root, and the minimum
  lengths for each node (in visited), apply triangulation at each node.
  Of the two children of each node on a shortest path, at least one is
  on a shortest path. In case of ties the procedure chooses the THEN
  children.
  Returns a pointer to the cube BDD representing the path if
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="getShortest"></A>
static cuddPathPair <I></I>
<B>getShortest</B>(
  DdNode * <b>root</b>, <i></i>
  int * <b>cost</b>, <i></i>
  int * <b>support</b>, <i></i>
  st_table * <b>visited</b> <i></i>
)
</pre>
<dd> Finds the length of the shortest path(s) in a DD.
  Uses a local symbol table to store the lengths for each
  node. Only the lengths for the regular nodes are entered in the table,
  because those for the complement nodes are simply obtained by swapping
  the two lenghts.
  Returns a pair of lengths: the length of the shortest path to 1;
  and the length of the shortest path to 0. This is done so as to take
  complement arcs into account.
<p>

<dd> <b>Side Effects</b> Accumulates the support of the DD in support.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSat.c"TARGET="ABSTRACT"><CODE>cuddSat.c</CODE></A>

<dt><pre>
<A NAME="hashDelete"></A>
static void <I></I>
<B>hashDelete</B>(
  DdLevelQueue * <b>queue</b>, <i></i>
  DdQueueItem * <b>item</b> <i></i>
)
</pre>
<dd> Removes an item from the hash table of a level queue.
  Nothing is done if the item is not in the table.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueDequeue">cuddLevelQueueDequeue</a>
<a href="#hashInsert">hashInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="hashInsert"></A>
static int <I></I>
<B>hashInsert</B>(
  DdLevelQueue * <b>queue</b>, <i></i>
  DdQueueItem * <b>item</b> <i></i>
)
</pre>
<dd> Inserts an item in the hash table of a level queue. Returns
  1 if successful; 0 otherwise. No check is performed to see if an item with
  the same key is already in the hash table.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="hashLookup"></A>
static DdQueueItem * <I></I>
<B>hashLookup</B>(
  DdLevelQueue * <b>queue</b>, <i></i>
  void * <b>key</b> <i></i>
)
</pre>
<dd> Looks up a key in the hash table of a level queue. Returns
  a pointer to the item with the given key if the key is found; NULL
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddLevelQueueEnqueue">cuddLevelQueueEnqueue</a>
<a href="#hashInsert">hashInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="hashResize"></A>
static int <I></I>
<B>hashResize</B>(
  DdLevelQueue * <b>queue</b> <i></i>
)
</pre>
<dd> Resizes the hash table of a level queue. Returns 1 if
  successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#hashInsert">hashInsert</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME="impliedp"></A>
static int <I></I>
<B>impliedp</B>(
  DdHalfWord  <b>var1</b>, <i></i>
  short  <b>phase1</b>, <i></i>
  DdHalfWord  <b>var2</b>, <i></i>
  short  <b>phase2</b>, <i></i>
  BitVector * <b>olv</b>, <i></i>
  BitVector * <b>olp</b> <i></i>
)
</pre>
<dd> Returns true iff either literal of a clause is in a set
  of literals.  The first four arguments specify the clause.  The
  remaining two arguments specify the literal set.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="indexCompare"></A>
static int <I></I>
<B>indexCompare</B>(
  const void * <b>a</b>, <i></i>
  const void * <b>b</b> <i></i>
)
</pre>
<dd> Compares indices for qsort.  Subtracting these integers
  cannot produce overflow, because they are non-negative.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddUtil.c"TARGET="ABSTRACT"><CODE>cuddUtil.c</CODE></A>

<dt><pre>
<A NAME="initSymmInfo"></A>
static DdHalfWord * <I></I>
<B>initSymmInfo</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Translates the symmetry information stored in the next
  field of each subtable from level to indices. This procedure is called
  immediately after symmetric sifting, so that the next fields are correct.
  By translating this informaton in terms of indices, we make it independent
  of subsequent reorderings. The format used is that of the next fields:
  a circular list where each variable points to the next variable in the
  same symmetry group. Only the entries between lower and upper are
  considered.  The procedure returns a pointer to an array
  holding the symmetry information if successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#checkSymmInfo">checkSymmInfo</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="int **�cube�"></A>
 <I></I>
<B>int **�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int **�cube�"></A>
 <I></I>
<B>int **�cube�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int **�indices�array containing (on return) the indices"></A>
 <I></I>
<B>int **�indices�array containing (on return) the indices</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int **�indices�array containing (on return) the indices"></A>
 <I></I>
<B>int **�indices�array containing (on return) the indices</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int **�path�"></A>
 <I></I>
<B>int **�path�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int **�path�"></A>
 <I></I>
<B>int **�path�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�array�"></A>
 <I></I>
<B>int *�array�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�array�"></A>
 <I></I>
<B>int *�array�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�digits�"></A>
 <I></I>
<B>int *�digits�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�distance�"></A>
 <I></I>
<B>int *�distance�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�inputs�"></A>
 <I></I>
<B>int *�inputs�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�length�"></A>
 <I></I>
<B>int *�length�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�length�"></A>
 <I></I>
<B>int *�length�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�permutation�required variable permutation"></A>
 <I></I>
<B>int *�permutation�required variable permutation</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�permutation�required variable permutation"></A>
 <I></I>
<B>int *�permutation�required variable permutation</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�permut�"></A>
 <I></I>
<B>int *�permut�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�permut�"></A>
 <I></I>
<B>int *�permut�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�phase2�"></A>
 <I></I>
<B>int *�phase2�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int *�weight�"></A>
 <I></I>
<B>int *�weight�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �N�"></A>
 <I></I>
<B>int �N�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �amount�"></A>
 <I></I>
<B>int �amount�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �arcviolation�"></A>
 <I></I>
<B>int �arcviolation�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �binaryDigits�"></A>
 <I></I>
<B>int �binaryDigits�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �bit�"></A>
 <I></I>
<B>int �bit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �bit�"></A>
 <I></I>
<B>int �bit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �cycle�"></A>
 <I></I>
<B>int �cycle�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �digits�"></A>
 <I></I>
<B>int �digits�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �direction�under (0) or over (1) approximation"></A>
 <I></I>
<B>int �direction�under (0) or over (1) approximation</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �direction�under (0) or over (1) approximation"></A>
 <I></I>
<B>int �direction�under (0) or over (1) approximation</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �hardlimit�flag: 1 if threshold is a hard limit"></A>
 <I></I>
<B>int �hardlimit�flag: 1 if threshold is a hard limit</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �hardlimit�flag: 1 if threshold is a hard limit"></A>
 <I></I>
<B>int �hardlimit�flag: 1 if threshold is a hard limit</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�"></A>
 <I></I>
<B>int �index�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �index�variable index"></A>
 <I></I>
<B>int �index�variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �i�"></A>
 <I></I>
<B>int �i�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �k�number of minterms to find"></A>
 <I></I>
<B>int �k�number of minterms to find</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �level�"></A>
 <I></I>
<B>int �level�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �level�"></A>
 <I></I>
<B>int �level�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �minsize�bound below which no reordering occurs"></A>
 <I></I>
<B>int �minsize�bound below which no reordering occurs</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �minsize�bound below which no reordering occurs"></A>
 <I></I>
<B>int �minsize�bound below which no reordering occurs</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �multiplicity�how many ZDD variables are created for each BDD variable"></A>
 <I></I>
<B>int �multiplicity�how many ZDD variables are created for each BDD variable</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �mvars�size of <code>maskVars</code>"></A>
 <I></I>
<B>int �mvars�size of <code>maskVars</code></B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �mv�0: blif, 1: blif-MV"></A>
 <I></I>
<B>int �mv�0: blif, 1: blif-MV</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �mv�0: blif, 1: blif-MV"></A>
 <I></I>
<B>int �mv�0: blif, 1: blif-MV</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nVars�"></A>
 <I></I>
<B>int �nVars�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �numberXovers�"></A>
 <I></I>
<B>int �numberXovers�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nvars�"></A>
 <I></I>
<B>int �nvars�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nvars�"></A>
 <I></I>
<B>int �nvars�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nvars�"></A>
 <I></I>
<B>int �nvars�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nvars�size of the support of f"></A>
 <I></I>
<B>int �nvars�size of the support of f</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nz�"></A>
 <I></I>
<B>int �nz�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nz�"></A>
 <I></I>
<B>int �nz�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �nz�"></A>
 <I></I>
<B>int �nz�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�"></A>
 <I></I>
<B>int �n�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�length of both arrays"></A>
 <I></I>
<B>int �n�length of both arrays</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�numbers of unknowns"></A>
 <I></I>
<B>int �n�numbers of unknowns</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�numbers of unknowns"></A>
 <I></I>
<B>int �n�numbers of unknowns</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�size of <code>vars</code>"></A>
 <I></I>
<B>int �n�size of <code>vars</code></B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�size of the array"></A>
 <I></I>
<B>int �n�size of the array</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�size of the array"></A>
 <I></I>
<B>int �n�size of the array</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �n�size of the array"></A>
 <I></I>
<B>int �n�size of the array</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �pairIndex�corresponding variable index"></A>
 <I></I>
<B>int �pairIndex�corresponding variable index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �path�"></A>
 <I></I>
<B>int �path�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �phase�"></A>
 <I></I>
<B>int �phase�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �phase�1: positive; 0: negative"></A>
 <I></I>
<B>int �phase�1: positive; 0: negative</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �populationSize�"></A>
 <I></I>
<B>int �populationSize�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �power�"></A>
 <I></I>
<B>int �power�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �precision�"></A>
 <I></I>
<B>int �precision�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �precision�"></A>
 <I></I>
<B>int �precision�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �pr�"></A>
 <I></I>
<B>int �pr�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �pr�"></A>
 <I></I>
<B>int �pr�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �pr�verbosity level"></A>
 <I></I>
<B>int �pr�verbosity level</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �pr�verbosity level"></A>
 <I></I>
<B>int �pr�verbosity level</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �recomb�"></A>
 <I></I>
<B>int �recomb�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �sms�"></A>
 <I></I>
<B>int �sms�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �smv�"></A>
 <I></I>
<B>int �smv�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �symmviolation�"></A>
 <I></I>
<B>int �symmviolation�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �sy�step of column variables"></A>
 <I></I>
<B>int �sy�step of column variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �sy�step of column variables"></A>
 <I></I>
<B>int �sy�step of column variables</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �threshold�maximum number of nodes in the subset"></A>
 <I></I>
<B>int �threshold�maximum number of nodes in the subset</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �threshold�maximum number of nodes in the subset"></A>
 <I></I>
<B>int �threshold�maximum number of nodes in the subset</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �threshold�maximum number of nodes in the superset"></A>
 <I></I>
<B>int �threshold�maximum number of nodes in the superset</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �threshold�maximum number of nodes in the superset"></A>
 <I></I>
<B>int �threshold�maximum number of nodes in the superset</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �top�index of top variable"></A>
 <I></I>
<B>int �top�index of top variable</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �upperBound�distance above which an approximate answer is OK"></A>
 <I></I>
<B>int �upperBound�distance above which an approximate answer is OK</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �upper�"></A>
 <I></I>
<B>int �upper�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �upper�"></A>
 <I></I>
<B>int �upper�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �var�"></A>
 <I></I>
<B>int �var�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �var�"></A>
 <I></I>
<B>int �var�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �var�"></A>
 <I></I>
<B>int �var�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �v�"></A>
 <I></I>
<B>int �v�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �v�"></A>
 <I></I>
<B>int �v�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �x�"></A>
 <I></I>
<B>int �x�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="int �y�column index"></A>
 <I></I>
<B>int �y�column index</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="largest"></A>
static int <I></I>
<B>largest</B>(
   <b></b> <i></i>
)
</pre>
<dd> Finds the largest DD in the population. If an order is
  repeated, it avoids choosing the copy that is in the computed table
  (it has repeat[i
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="long �seed�"></A>
 <I></I>
<B>long �seed�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="long �size�size of the allocation that failed"></A>
 <I></I>
<B>long �size�size of the allocation that failed</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="make_random"></A>
static int <I></I>
<B>make_random</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b> <i></i>
)
</pre>
<dd> Generates the random sequences for the initial population.
  The sequences are permutations of the indices between lower and
  upper in the current order.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="mintermsFromUniverse"></A>
static DdNode * <I></I>
<B>mintermsFromUniverse</B>(
  DdManager * <b>manager</b>, <i></i>
  DdNode ** <b>vars</b>, <i></i>
  int  <b>numVars</b>, <i></i>
  double  <b>n</b>, <i></i>
  int  <b>index</b> <i></i>
)
</pre>
<dd> Recursive procedure to extract n mintems from constant 1.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>

<dt><pre>
<A NAME="oneliteralp"></A>
static int <I></I>
<B>oneliteralp</B>(
  DdHalfWord  <b>var</b> <i></i>
)
</pre>
<dd> Returns true iff the argument is a one-literal clause.
  A one-litaral clause has the constant FALSE as second literal.
  Since the constant TRUE is never used, it is sufficient to test for
  a constant.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="pushDown"></A>
static void <I></I>
<B>pushDown</B>(
  DdHalfWord * <b>order</b>, <i></i>
  int  <b>j</b>, <i></i>
  int  <b>level</b> <i></i>
)
</pre>
<dd> Pushes a variable in the order down to position "level."
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="rand_int"></A>
static int <I></I>
<B>rand_int</B>(
  int  <b>a</b> <i></i>
)
</pre>
<dd> Generates a random number between 0 and the integer a.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="random_generator"></A>
static double <I></I>
<B>random_generator</B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns a double precision value between 0.0 and 1.0.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="restoreOrder"></A>
static int <I></I>
<B>restoreOrder</B>(
  DdManager * <b>table</b>, <i></i>
  int * <b>array</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Restores the variable order in array by a series of sifts up.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="roulette"></A>
static int <I></I>
<B>roulette</B>(
  int * <b>p1</b>, <i></i>
  int * <b>p2</b> <i></i>
)
</pre>
<dd> Selects two distinct parents with the roulette wheel method.
<p>

<dd> <b>Side Effects</b> The indices of the selected parents are returned as side
  effects.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="selectMintermsFromUniverse"></A>
static DdNode * <I></I>
<B>selectMintermsFromUniverse</B>(
  DdManager * <b>manager</b>, <i></i>
  int * <b>varSeen</b>, <i></i>
  double  <b>n</b> <i></i>
)
</pre>
<dd> This function prepares an array of variables which have not been
  encountered so far when traversing the procedure cuddSplitSetRecur. This
  array is then used to extract the required number of minterms from a constant
  1. The algorithm guarantees that the size of BDD will be utmost log(n).
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSplit.c"TARGET="ABSTRACT"><CODE>cuddSplit.c</CODE></A>

<dt><pre>
<A NAME="sentinelp"></A>
static int <I></I>
<B>sentinelp</B>(
  DdHalfWord  <b>var1</b>, <i></i>
  DdHalfWord  <b>var2</b> <i></i>
)
</pre>
<dd> Returns true iff the argument is the sentinel clause.
  A sentinel clause has both variables equal to 0.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="separateCube"></A>
static DdNode * <I></I>
<B>separateCube</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  CUDD_VALUE_TYPE * <b>distance</b> <i></i>
)
</pre>
<dd> Separates cube from distance.  Returns the cube if
  successful; NULL otherwise.
<p>

<dd> <b>Side Effects</b> The distance is returned as a side effect.
<p>

<dd> <b>See Also</b> <code><a href="#cuddBddClosestCube">cuddBddClosestCube</a>
<a href="#createResult">createResult</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddPriority.c"TARGET="ABSTRACT"><CODE>cuddPriority.c</CODE></A>

<dt><pre>
<A NAME="siftBackwardProb"></A>
static int <I></I>
<B>siftBackwardProb</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b>, <i></i>
  double  <b>temp</b> <i></i>
)
</pre>
<dd> Otherwise, "tosses a coin" to decide whether to keep
  the current configuration or return the DD to the original
  one. Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="sift_up"></A>
static int <I></I>
<B>sift_up</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>x_low</b> <i></i>
)
</pre>
<dd> Takes a variable from position x and sifts it up to
  position x_low;  x_low should be less than x. Returns 1 if successful;
  0 otherwise
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME="stPathTableDdFree"></A>
static enum st_retval <I></I>
<B>stPathTableDdFree</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> None
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddSubsetSP.c"TARGET="ABSTRACT"><CODE>cuddSubsetSP.c</CODE></A>

<dt><pre>
<A NAME="st_zdd_count_dbl_free"></A>
static enum st_retval <I></I>
<B>st_zdd_count_dbl_free</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the memory associated with the computed table of
  Cudd_zddCountDouble.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>

<dt><pre>
<A NAME="st_zdd_countfree"></A>
static enum st_retval <I></I>
<B>st_zdd_countfree</B>(
  char * <b>key</b>, <i></i>
  char * <b>value</b>, <i></i>
  char * <b>arg</b> <i></i>
)
</pre>
<dd> Frees the memory associated with the computed table of
  Cudd_zddCount.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddCount.c"TARGET="ABSTRACT"><CODE>cuddZddCount.c</CODE></A>

<dt><pre>
<A NAME="stopping_criterion"></A>
static int <I></I>
<B>stopping_criterion</B>(
  int  <b>c1</b>, <i></i>
  int  <b>c2</b>, <i></i>
  int  <b>c3</b>, <i></i>
  int  <b>c4</b>, <i></i>
  double  <b>temp</b> <i></i>
)
</pre>
<dd> If temperature is STOP_TEMP or there is no improvement
  then terminates. Returns 1 if the termination criterion is met; 0
  otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddAnneal.c"TARGET="ABSTRACT"><CODE>cuddAnneal.c</CODE></A>

<dt><pre>
<A NAME="tlcInfoAlloc"></A>
static DdTlcInfo * <I></I>
<B>tlcInfoAlloc</B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns a pointer to a DdTlcInfo Structure if successful;
  NULL otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_tlcInfoFree">Cudd_tlcInfoFree</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME="unsigned int �factor�"></A>
 <I></I>
<B>unsigned int �factor�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �hr�"></A>
 <I></I>
<B>unsigned int �hr�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �limit�"></A>
 <I></I>
<B>unsigned int �limit�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �lut�"></A>
 <I></I>
<B>unsigned int �lut�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �maxLive�"></A>
 <I></I>
<B>unsigned int �maxLive�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �mc�"></A>
 <I></I>
<B>unsigned int �mc�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �mr�"></A>
 <I></I>
<B>unsigned int �mr�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �next�"></A>
 <I></I>
<B>unsigned int �next�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �p�"></A>
 <I></I>
<B>unsigned int �p�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �secondDen�"></A>
 <I></I>
<B>unsigned int �secondDen�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �type�MTR_DEFAULT or MTR_FIXED"></A>
 <I></I>
<B>unsigned int �type�MTR_DEFAULT or MTR_FIXED</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �type�MTR_DEFAULT or MTR_FIXED"></A>
 <I></I>
<B>unsigned int �type�MTR_DEFAULT or MTR_FIXED</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned int �upperB�upper bound"></A>
 <I></I>
<B>unsigned int �upperB�upper bound</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned long �increase�"></A>
 <I></I>
<B>unsigned long �increase�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned long �maxMemory�"></A>
 <I></I>
<B>unsigned long �maxMemory�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned long �maxMemory�target maximum memory occupation"></A>
 <I></I>
<B>unsigned long �maxMemory�target maximum memory occupation</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned long �st�"></A>
 <I></I>
<B>unsigned long �st�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="unsigned long �tl�"></A>
 <I></I>
<B>unsigned long �tl�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="updateEntry"></A>
static int <I></I>
<B>updateEntry</B>(
  DdManager * <b>table</b>, <i></i>
  DdHalfWord * <b>order</b>, <i></i>
  int  <b>level</b>, <i></i>
  int  <b>cost</b>, <i></i>
  DdHalfWord ** <b>orders</b>, <i></i>
  int * <b>costs</b>, <i></i>
  int  <b>subsets</b>, <i></i>
  char * <b>mask</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Updates entry for a subset. Finds the subset, if it exists.
  If the new order for the subset has lower cost, or if the subset did not
  exist, it stores the new order and cost. Returns the number of subsets
  currently in the table.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="updateParity"></A>
static void <I></I>
<B>updateParity</B>(
  DdNode * <b>node</b>, <i>function to analyze</i>
  ApproxInfo * <b>info</b>, <i>info on BDD</i>
  int  <b>newparity</b> <i>new parity for node</i>
)
</pre>
<dd> Recursively update the parity of the paths reaching a node.
  Assumes that node is regular and propagates the invariant.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#gatherInfoAux">gatherInfoAux</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="updateRefs"></A>
static int <I></I>
<B>updateRefs</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  DdNode * <b>skip</b>, <i></i>
  ApproxInfo * <b>info</b>, <i></i>
  DdLevelQueue * <b>queue</b> <i></i>
)
</pre>
<dd> Update function reference counts to account for replacement.
  Returns the number of nodes saved if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code>UAmarkNodes
RAmarkNodes
BAmarkNodes
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddApprox.c"TARGET="ABSTRACT"><CODE>cuddApprox.c</CODE></A>

<dt><pre>
<A NAME="updateUB"></A>
static int <I></I>
<B>updateUB</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>oldBound</b>, <i></i>
  DdHalfWord * <b>bestOrder</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Updates the upper bound and saves the best order seen so far.
  Returns the current value of the upper bound.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddExact.c"TARGET="ABSTRACT"><CODE>cuddExact.c</CODE></A>

<dt><pre>
<A NAME="void *�data�"></A>
 <I></I>
<B>void *�data�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="void *�data�"></A>
 <I></I>
<B>void *�data�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="void *�data�"></A>
 <I></I>
<B>void *�data�</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME="zddClearFlag"></A>
static void <I></I>
<B>zddClearFlag</B>(
  DdNode * <b>f</b> <i></i>
)
</pre>
<dd> Performs a DFS from f, clearing the LSB of the next
  pointers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#zddSupportStep">zddSupportStep</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="zddCountInternalMtrNodes"></A>
static int <I></I>
<B>zddCountInternalMtrNodes</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b> <i></i>
)
</pre>
<dd> Counts the number of internal nodes of the group tree.
  Returns the count.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddFindNodeHiLo"></A>
static void <I></I>
<B>zddFindNodeHiLo</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int * <b>lower</b>, <i></i>
  int * <b>upper</b> <i></i>
)
</pre>
<dd> Finds the lower and upper bounds of the group represented
  by treenode.  The high and low fields of treenode are indices.  From
  those we need to derive the current positions, and find maximum and
  minimum.
<p>

<dd> <b>Side Effects</b> The bounds are returned as side effects.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddFixTree"></A>
static void <I></I>
<B>zddFixTree</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b> <i></i>
)
</pre>
<dd> Fixes the ZDD variable group tree after a
  shuffle. Assumes that the order of the variables in a terminal node
  has not been changed.
<p>

<dd> <b>Side Effects</b> Changes the ZDD variable group tree.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddGroupMoveBackward"></A>
static int <I></I>
<B>zddGroupMoveBackward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Undoes the swap two groups.  Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupMove"></A>
static int <I></I>
<B>zddGroupMove</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Swaps two groups and records the move. Returns the
  number of keys in the DD table in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupSiftingAux"></A>
static int <I></I>
<B>zddGroupSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  int  <b>xHigh</b> <i></i>
)
</pre>
<dd> Sifts one variable up and down until it has taken all
  positions. Checks for aggregation. There may be at most two sweeps,
  even if the group grows.  Assumes that x is either an isolated
  variable, or it is the bottom of a group. All groups may not have
  been found. The variable being moved is returned to the best position
  seen during sifting.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupSiftingBackward"></A>
static int <I></I>
<B>zddGroupSiftingBackward</B>(
  DdManager * <b>table</b>, <i></i>
  Move * <b>moves</b>, <i></i>
  int  <b>size</b> <i></i>
)
</pre>
<dd> Determines the best position for a variables and returns
  it there.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupSiftingDown"></A>
static int <I></I>
<B>zddGroupSiftingDown</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xHigh</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Sifts down a variable until it reaches position xHigh.
  Assumes that x is the bottom of a group (or a singleton).  Records
  all the moves.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupSiftingUp"></A>
static int <I></I>
<B>zddGroupSiftingUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>y</b>, <i></i>
  int  <b>xLow</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Sifts up a variable until either it reaches position
  xLow or the size of the DD heap increases too much. Assumes that y is
  the top of a group (or a singleton).  Checks y for aggregation to the
  adjacent variables. Records all the moves that are appended to the
  list of moves received as input and returned as a side effect.
  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddGroupSifting"></A>
static int <I></I>
<B>zddGroupSifting</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>lower</b>, <i></i>
  int  <b>upper</b> <i></i>
)
</pre>
<dd> Sifts from treenode->low to treenode->high. If
  croupcheck == CUDD_GROUP_CHECK7, it checks for group creation at the
  end of the initial sifting. If a group is created, it is then sifted
  again. After sifting one variable, the group that contains it is
  dissolved.  Returns 1 in case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddMergeGroups"></A>
static void <I></I>
<B>zddMergeGroups</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  int  <b>low</b>, <i></i>
  int  <b>high</b> <i></i>
)
</pre>
<dd> Creates a single group from low to high and adjusts the
  idex field of the tree node.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddPortFromBddStep"></A>
static DdNode * <I></I>
<B>zddPortFromBddStep</B>(
  DdManager * <b>dd</b>, <i></i>
  DdNode * <b>B</b>, <i></i>
  int  <b>expected</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddPortFromBdd.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>

<dt><pre>
<A NAME="zddPortToBddStep"></A>
static DdNode * <I></I>
<B>zddPortToBddStep</B>(
  DdManager * <b>dd</b>, <i>manager</i>
  DdNode * <b>f</b>, <i>ZDD to be converted</i>
  int  <b>depth</b> <i>recursion depth</i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddPortToBdd.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddPort.c"TARGET="ABSTRACT"><CODE>cuddZddPort.c</CODE></A>

<dt><pre>
<A NAME="zddPrintCoverAux"></A>
static void <I></I>
<B>zddPrintCoverAux</B>(
  DdManager * <b>zdd</b>, <i>manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  int  <b>level</b>, <i>depth in the recursion</i>
  int * <b>list</b> <i>current recursion path</i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddPrintCover.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="zddReorderChildren"></A>
static int <I></I>
<B>zddReorderChildren</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  Cudd_ReorderingType  <b>method</b> <i></i>
)
</pre>
<dd> Reorders the children of a group tree node according to
  the options. After reordering puts all the variables in the group
  and/or its descendents in a single group. This allows hierarchical
  reordering.  If the variables in the group do not exist yet, simply
  does nothing. Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddReorderPostprocess"></A>
static int <I></I>
<B>zddReorderPostprocess</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Shrinks almost empty subtables at the end of reordering to
  guarantee that they have a reasonable load factor. However, if there many
  nodes are being reclaimed, then no resizing occurs. Returns 1 in case of
  success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddReorderPreprocess"></A>
static void <I></I>
<B>zddReorderPreprocess</B>(
  DdManager * <b>table</b> <i></i>
)
</pre>
<dd> Prepares the ZDD heap for dynamic reordering. Does
  garbage collection, to guarantee that there are no dead nodes;
  and clears the cache, which is invalidated by dynamic reordering.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddShuffle"></A>
static int <I></I>
<B>zddShuffle</B>(
  DdManager * <b>table</b>, <i></i>
  int * <b>permutation</b> <i></i>
)
</pre>
<dd> Reorders ZDD variables according to a given permutation.
  The i-th permutation array contains the index of the variable that
  should be brought to the i-th level. zddShuffle assumes that no
  dead nodes are present.  The reordering is achieved by a series of
  upward sifts.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddSiftUp"></A>
static int <I></I>
<B>zddSiftUp</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>xLow</b> <i></i>
)
</pre>
<dd> Takes a ZDD variable from position x and sifts it up to
  position xLow;  xLow should be less than or equal to x.
  Returns 1 if successful; 0 otherwise
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddSupportStep"></A>
static void <I></I>
<B>zddSupportStep</B>(
  DdNode * <b>f</b>, <i></i>
  int * <b>support</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddSupport. Performs a
  DFS from f. The support is accumulated in supp as a side effect. Uses
  the LSB of the then pointer as visited flag.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#zddClearFlag">zddClearFlag</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="zddSwapAny"></A>
static Move * <I></I>
<B>zddSwapAny</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Swaps any two variables. Returns the set of moves.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddReord.c"TARGET="ABSTRACT"><CODE>cuddZddReord.c</CODE></A>

<dt><pre>
<A NAME="zddTreeSiftingAux"></A>
static int <I></I>
<B>zddTreeSiftingAux</B>(
  DdManager * <b>table</b>, <i></i>
  MtrNode * <b>treenode</b>, <i></i>
  Cudd_ReorderingType  <b>method</b> <i></i>
)
</pre>
<dd> Recursively visits the group tree and reorders each
  group in postorder fashion.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddUniqueCompareGroup"></A>
static int <I></I>
<B>zddUniqueCompareGroup</B>(
  int * <b>ptrX</b>, <i></i>
  int * <b>ptrY</b> <i></i>
)
</pre>
<dd> Comparison function used by qsort to order the variables
  according to the number of keys in the subtables.  Returns the
  difference in number of keys between the two variables being
  compared.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddGroup.c"TARGET="ABSTRACT"><CODE>cuddZddGroup.c</CODE></A>

<dt><pre>
<A NAME="zddVarToConst"></A>
static void <I></I>
<B>zddVarToConst</B>(
  DdNode * <b>f</b>, <i></i>
  DdNode ** <b>gp</b>, <i></i>
  DdNode ** <b>hp</b>, <i></i>
  DdNode * <b>base</b>, <i></i>
  DdNode * <b>empty</b> <i></i>
)
</pre>
<dd> Replaces variables with constants if possible (part of
  canonical form).
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="zdd_group_move_backward"></A>
static int <I></I>
<B>zdd_group_move_backward</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b> <i></i>
)
</pre>
<dd> Undoes the swap of two groups. x is assumed to be the
  bottom variable of the first group. y is assumed to be the top
  variable of the second group.  Returns 1 if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="zdd_group_move"></A>
static int <I></I>
<B>zdd_group_move</B>(
  DdManager * <b>table</b>, <i></i>
  int  <b>x</b>, <i></i>
  int  <b>y</b>, <i></i>
  Move ** <b>moves</b> <i></i>
)
</pre>
<dd> Swaps two groups. x is assumed to be the bottom variable
  of the first group. y is assumed to be the top variable of the second
  group.  Updates the list of moves. Returns the number of keys in the
  table if successful; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSymm.c"TARGET="ABSTRACT"><CODE>cuddZddSymm.c</CODE></A>

<dt><pre>
<A NAME="zdd_print_minterm_aux"></A>
static void <I></I>
<B>zdd_print_minterm_aux</B>(
  DdManager * <b>zdd</b>, <i>manager</i>
  DdNode * <b>node</b>, <i>current node</i>
  int  <b>level</b>, <i>depth in the recursion</i>
  int * <b>list</b> <i>current recursion path</i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddPrintMinterm.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="zdd_subset0_aux"></A>
static DdNode * <I></I>
<B>zdd_subset0_aux</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>zvar</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddSubset0.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="zdd_subset1_aux"></A>
static DdNode * <I></I>
<B>zdd_subset1_aux</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>P</b>, <i></i>
  DdNode * <b>zvar</b> <i></i>
)
</pre>
<dd> Performs the recursive step of Cudd_zddSubset1.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddSetop.c"TARGET="ABSTRACT"><CODE>cuddZddSetop.c</CODE></A>

<dt><pre>
<A NAME="zp2"></A>
static int <I></I>
<B>zp2</B>(
  DdManager * <b>zdd</b>, <i></i>
  DdNode * <b>f</b>, <i></i>
  st_table * <b>t</b> <i></i>
)
</pre>
<dd> Performs the recursive step of cuddZddP. Returns 1 in
  case of success; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddZddUtil.c"TARGET="ABSTRACT"><CODE>cuddZddUtil.c</CODE></A>

<dt><pre>
<A NAME="��"></A>
 <I></I>
<B>��</B>(
   <b></b> <i></i>
)
</pre>
<dd> 
<p>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Adds node to the head of the free list.  Does not
  deallocate memory chunks that become free.  This function is also
  used by the dynamic reordering functions.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
<a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
<a href="#cuddDeallocMove">cuddDeallocMove</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Adds node to the head of the free list.  Does not
  deallocate memory chunks that become free.  This function is also
  used by the dynamic reordering functions.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddDeallocNode">cuddDeallocNode</a>
<a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Adjusts the values of table fields controlling the.
  sizes of subtables and computed table. If the computed table is too small
  according to the new values, it is resized.
<p>

<dd> <b>Side Effects</b> Modifies manager fields. May resize computed table.
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Clears a bit vector.  The parameter size gives the
  number of bits.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bitVectorAlloc">bitVectorAlloc</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Clears the 4 least significant bits of a pointer.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Comparison of a function to the i-th ADD variable. Returns 1 if
  the function is the i-th ADD variable; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Comparison of a pair of functions to the i-th ADD
  variable. Returns 1 if the functions are the i-th ADD variable and its
  complement; 0 otherwise.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddCompose.c"TARGET="ABSTRACT"><CODE>cuddCompose.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Complements a DD if condition c is true; c should be
  either 0 or 1, because it is used directly (for efficiency). If in
  doubt on the values c may take, use "(c) ? Cudd_Not(node) : node".
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Not">Cudd_Not</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Complements a DD by flipping the complement attribute of
  the pointer (the least significant bit).
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_NotCond">Cudd_NotCond</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes hash function for keys of one operand.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddLCHash3">ddLCHash3</a>
<a href="#ddLCHash">ddLCHash</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes hash function for keys of three operands.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddLCHash2">ddLCHash2</a>
<a href="#ddLCHash">ddLCHash</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes hash function for keys of two operands.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#ddLCHash3">ddLCHash3</a>
<a href="#ddLCHash">ddLCHash</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes the absolute value of a number.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes the hash value for a local cache. Returns the
  bucket index.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes the maximum of two numbers.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#ddMin">ddMin</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Computes the minimum of two numbers.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#ddMax">ddMax</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Decreases the reference count of node. It is primarily
  used in recursive procedures to decrease the ref count of a result
  node before returning it. This accomplishes the goal of removing the
  protection applied by a previous cuddRef. This being a macro, it is
  faster than Cudd_Deref, but it cannot be used in constructs like
  cuddDeref(a = b()).
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Deref">Cudd_Deref</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Enforces DD_MINUS_INF_VAL <= x <= DD_PLUS_INF_VAL.
  Furthermore, if x <= DD_MINUS_INF_VAL/2, x is set to
  DD_MINUS_INF_VAL. Similarly, if DD_PLUS_INF_VAL/2 <= x, x is set to
  DD_PLUS_INF_VAL.  Normally this macro is a NOOP. However, if
  HAVE_IEEE_754 is not defined, it makes sure that a value does not
  get larger than infinity in absolute value, and once it gets to
  infinity, stays there.  If the value overflows before this macro is
  applied, no recovery is possible.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Extract the least significant digit of a double digit. Used
  in the manipulation of arbitrary precision integers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code>DD_MSDIGIT
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Extract the most significant digit of a double digit. Used
  in the manipulation of arbitrary precision integers.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code>DD_LSDIGIT
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Fast storage allocation for items in a hash table. The
  first 4 bytes of a chunk contain a pointer to the next block; the
  rest contains DD_MEM_CHUNK spaces for hash items.  Returns a pointer to
  a new item if successful; NULL is memory is full.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddAllocNode">cuddAllocNode</a>
<a href="#cuddDynamicAllocNode">cuddDynamicAllocNode</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLCache.c"TARGET="ABSTRACT"><CODE>cuddLCache.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Finds the current position of ZDD variable index in the
  order.  This macro duplicates the functionality of Cudd_ReadPermZdd,
  but it does not check for out-of-bounds indices and it is more
  efficient.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ReadPermZdd">Cudd_ReadPermZdd</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Finds the current position of variable index in the
  order.  This macro duplicates the functionality of Cudd_ReadPerm,
  but it does not check for out-of-bounds indices and it is more
  efficient.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Hash function for the cache for functions with two
  operands.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#ddHash">ddHash</a>
<a href="#ddCHash">ddCHash</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Hash function for the cache.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#ddHash">ddHash</a>
<a href="#ddCHash2">ddCHash2</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Hash function for the table of a level queue.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#hashInsert">hashInsert</a>
<a href="#hashLookup">hashLookup</a>
<a href="#hashDelete">hashDelete</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddLevelQ.c"TARGET="ABSTRACT"><CODE>cuddLevelQ.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Hash function for the unique table.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#ddCHash">ddCHash</a>
<a href="#ddCHash2">ddCHash2</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Increases the reference count of a node, if it is not
  saturated. This being a macro, it is faster than Cudd_Ref, but it
  cannot be used in constructs like cuddRef(a = b()).
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Ref">Cudd_Ref</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Iterates over the cubes of a decision diagram f.
  <ul>
  <li> DdManager *manager;
  <li> DdNode *f;
  <li> DdGen *gen;
  <li> int *cube;
  <li> CUDD_VALUE_TYPE value;
  </ul>
  Cudd_ForeachCube allocates and frees the generator. Therefore the
  application should not try to do that. Also, the cube is freed at the
  end of Cudd_ForeachCube and hence is not available outside of the loop.<p>
  CAUTION: It is assumed that dynamic reordering will not occur while
  there are open generators. It is the user's responsibility to make sure
  that dynamic reordering does not occur. As long as new nodes are not created
  during generation, and dynamic reordering is not called explicitly,
  dynamic reordering will not occur. Alternatively, it is sufficient to
  disable dynamic reordering. It is a mistake to dispose of a diagram
  on which generation is ongoing.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ForeachNode">Cudd_ForeachNode</a>
<a href="#Cudd_FirstCube">Cudd_FirstCube</a>
<a href="#Cudd_NextCube">Cudd_NextCube</a>
<a href="#Cudd_GenFree">Cudd_GenFree</a>
<a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
<a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Iterates over the nodes of a decision diagram f.
  <ul>
  <li> DdManager *manager;
  <li> DdNode *f;
  <li> DdGen *gen;
  <li> DdNode *node;
  </ul>
  The nodes are returned in a seemingly random order.
  Cudd_ForeachNode allocates and frees the generator. Therefore the
  application should not try to do that.<p>
  CAUTION: It is assumed that dynamic reordering will not occur while
  there are open generators. It is the user's responsibility to make sure
  that dynamic reordering does not occur. As long as new nodes are not created
  during generation, and dynamic reordering is not called explicitly,
  dynamic reordering will not occur. Alternatively, it is sufficient to
  disable dynamic reordering. It is a mistake to dispose of a diagram
  on which generation is ongoing.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
<a href="#Cudd_FirstNode">Cudd_FirstNode</a>
<a href="#Cudd_NextNode">Cudd_NextNode</a>
<a href="#Cudd_GenFree">Cudd_GenFree</a>
<a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
<a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Iterates over the paths of a ZDD f.
  <ul>
  <li> DdManager *manager;
  <li> DdNode *f;
  <li> DdGen *gen;
  <li> int *path;
  </ul>
  Cudd_zddForeachPath allocates and frees the generator. Therefore the
  application should not try to do that. Also, the path is freed at the
  end of Cudd_zddForeachPath and hence is not available outside of the loop.<p>
  CAUTION: It is assumed that dynamic reordering will not occur while
  there are open generators.  It is the user's responsibility to make sure
  that dynamic reordering does not occur.  As long as new nodes are not created
  during generation, and dynamic reordering is not called explicitly,
  dynamic reordering will not occur.  Alternatively, it is sufficient to
  disable dynamic reordering.  It is a mistake to dispose of a diagram
  on which generation is ongoing.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_zddFirstPath">Cudd_zddFirstPath</a>
<a href="#Cudd_zddNextPath">Cudd_zddNextPath</a>
<a href="#Cudd_GenFree">Cudd_GenFree</a>
<a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
<a href="#Cudd_AutodynDisable">Cudd_AutodynDisable</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Iterates over the primes of a Boolean function producing
  a prime and irredundant cover.
  <ul>
  <li> DdManager *manager;
  <li> DdNode *l;
  <li> DdNode *u;
  <li> DdGen *gen;
  <li> int *cube;
  </ul>
  The Boolean function is described by an upper bound and a lower bound.  If
  the function is completely specified, the two bounds coincide.
  Cudd_ForeachPrime allocates and frees the generator.  Therefore the
  application should not try to do that.  Also, the cube is freed at the
  end of Cudd_ForeachPrime and hence is not available outside of the loop.<p>
  CAUTION: It is a mistake to change a diagram on which generation is ongoing.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ForeachCube">Cudd_ForeachCube</a>
<a href="#Cudd_FirstPrime">Cudd_FirstPrime</a>
<a href="#Cudd_NextPrime">Cudd_NextPrime</a>
<a href="#Cudd_GenFree">Cudd_GenFree</a>
<a href="#Cudd_IsGenEmpty">Cudd_IsGenEmpty</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Outputs a line of stats if DD_COUNT and DD_STATS are
  defined. Increments the number of recursive calls if DD_COUNT is
  defined.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Performs the left rotation for red/black trees.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRotateRight">cuddRotateRight</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Performs the right rotation for red/black trees.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#cuddRotateLeft">cuddRotateLeft</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddTable.c"TARGET="ABSTRACT"><CODE>cuddTable.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns 1 if a pointer is complemented.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Regular">Cudd_Regular</a>
<a href="#Cudd_Complement">Cudd_Complement</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns 1 if the absolute value of the difference of the two
  arguments x and y is less than e.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns 1 if the node is a constant node (rather than an
  internal node). All constant nodes have the same index
  (CUDD_CONST_INDEX). The pointer passed to Cudd_IsConstant may be either
  regular or complemented.
<p>

<dd> <b>Side Effects</b> none
<p>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns 1 if the node is a constant node (rather than an
  internal node). All constant nodes have the same index
  (CUDD_CONST_INDEX). The pointer passed to cuddIsConstant must be regular.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_IsConstant">Cudd_IsConstant</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the arithmetic 0 constant node. This is different
  from the logical zero. The latter is obtained by
  Cudd_Not(DD_ONE(dd)).
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code>DD_ONE
<a href="#Cudd_Not">Cudd_Not</a>
DD_PLUS_INFINITY
DD_MINUS_INFINITY
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the average fitness of the population.
<p>

<dd> <b>Side Effects</b> None
<p>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddGenetic.c"TARGET="ABSTRACT"><CODE>cuddGenetic.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the complemented version of a pointer.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Regular">Cudd_Regular</a>
<a href="#Cudd_IsComplement">Cudd_IsComplement</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the constant 1 node.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code>DD_ZERO
DD_PLUS_INFINITY
DD_MINUS_INFINITY
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the current position in the order of variable
  index. This macro is obsolete and is kept for compatibility. New
  applications should use Cudd_ReadPerm instead.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_ReadPerm">Cudd_ReadPerm</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the else child of an internal node. If
  <code>node</code> is a constant node, the result is unpredictable.
  The pointer passed to cuddE must be regular.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_E">Cudd_E</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the else child of an internal node. If
  <code>node</code> is a constant node, the result is unpredictable.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
<a href="#Cudd_V">Cudd_V</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the i-th entry of a bit vector.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bitVectorSet">bitVectorSet</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the minus infinity constant node.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code>DD_ONE
DD_ZERO
DD_PLUS_INFINITY
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the plus infinity constant node.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code>DD_ONE
DD_ZERO
DD_MINUS_INFINITY
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the regular version of a pointer.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_Complement">Cudd_Complement</a>
<a href="#Cudd_IsComplement">Cudd_IsComplement</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the then child of an internal node. If
  <code>node</code> is a constant node, the result is unpredictable.
  The pointer passed to cuddT must be regular.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the then child of an internal node. If
  <code>node</code> is a constant node, the result is unpredictable.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_E">Cudd_E</a>
<a href="#Cudd_V">Cudd_V</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the value of a constant node. If
  <code>node</code> is an internal node, the result is unpredictable.
  The pointer passed to cuddV must be regular.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_V">Cudd_V</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Returns the value of a constant node. If
  <code>node</code> is an internal node, the result is unpredictable.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#Cudd_T">Cudd_T</a>
<a href="#Cudd_E">Cudd_E</a>
</code>

<DD> <B>Defined in </B> <CODE>cudd.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Saturating decrement operator.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#cuddSatInc">cuddSatInc</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Saturating increment operator.
<p>

<dd> <b>Side Effects</b> none
<p>

<dd> <b>See Also</b> <code><a href="#cuddSatDec">cuddSatDec</a>
</code>

<DD> <B>Defined in </B> <CODE>cuddInt.h</CODE>

<dt><pre>
<A NAME=""></A>
 <I></I>
<B></B>(
   <b></b> <i></i>
)
</pre>
<dd> Sets the i-th entry of a bit vector to a value.
<p>

<dd> <b>Side Effects</b> None
<p>

<dd> <b>See Also</b> <code><a href="#bitVectorRead">bitVectorRead</a>
</code>

<DD> <B>Defined in </B> <A HREF="cuddAllFile.html#cuddEssent.c"TARGET="ABSTRACT"><CODE>cuddEssent.c</CODE></A>


</DL>
<HR>
Last updated on 20120204 17h33
</BODY></HTML>