static unsigned int 
AssessPathLength(
  unsigned int * pathLengthArray, array determining number of nodes belonging to the different path lengths
  int  threshold, threshold to determine maximum allowable nodes in the subset
  int  numVars, maximum number of variables
  unsigned int * excess, number of nodes labeled maxpath required in the subset
  FILE * fp where to write messages
)
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;

Side Effects None

Defined in cuddSubsetSP.c

static int 
BAapplyBias(
  DdManager * dd, 
  DdNode * f, 
  DdNode * b, 
  ApproxInfo * info, 
  DdHashTable * cache 
)
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.

Side Effects None

See Also cuddBiasedUnderApprox
Defined in cuddApprox.c

static int 
BAmarkNodes(
  DdManager * dd, manager
  DdNode * f, function to be analyzed
  ApproxInfo * info, info on BDD
  int  threshold, when to stop approximating
  double  quality1, minimum improvement for accepted changes when b=1
  double  quality0 minimum improvement for accepted changes when b=0
)
Marks nodes for remapping. Returns 1 if successful; 0 otherwise.

Side Effects None

See Also cuddBiasedUnderApprox
Defined in cuddApprox.c

static Conjuncts * 
BuildConjuncts(
  DdManager * dd, 
  DdNode * node, 
  st_table * distanceTable, 
  st_table * cacheTable, 
  int  approxDistance, 
  int  maxLocalRef, 
  st_table * ghTable, 
  st_table * mintermTable 
)
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.

See Also cuddConjunctsAux
Defined in cuddDecomp.c

static DdNode * 
BuildSubsetBdd(
  DdManager * dd, DD manager
  GlobalInfo_t * gInfo, global information
  st_table * pathTable, path table with path lengths and computed results
  DdNode * node, current node
  struct AssortedInfo * info, assorted information structure
  st_table * subsetNodeTable table storing computed results
)
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.

Side Effects SubsetNodeTable is changed if it is not NIL.

Defined in cuddSubsetSP.c

static DdNode * 
BuildSubsetBdd(
  DdManager * dd, DD manager
  DdNode * node, current node
  int * size, current size of the subset
  st_table * visitedTable, visited table storing all node data
  int  threshold, 
  st_table * storeTable, 
  st_table * approxTable 
)
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.

Side Effects None

Defined in cuddSubsetHB.c

 
CUDD_VALUE_TYPE *þvalueþ(
    
)


 
CUDD_VALUE_TYPE *þvalueþ(
    
)


 
CUDD_VALUE_TYPE þcþ(
    
)


 
CUDD_VALUE_TYPE þepþ(
    
)


 
CUDD_VALUE_TYPE þupperþ(
    
)


 
CUDD_VALUE_TYPE þvalueþ(
    
)


 
CUDD_VALUE_TYPE þvalueþ(
    
)


static Conjuncts * 
CheckInTables(
  DdNode * node, 
  DdNode * g1, 
  DdNode * h1, 
  DdNode * g2, 
  DdNode * h2, 
  st_table * ghTable, 
  st_table * cacheTable, 
  int * outOfMem 
)
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.

See Also ZeroCase BuildConjuncts
Defined in cuddDecomp.c

static Conjuncts * 
CheckTablesCacheAndReturn(
  DdNode * node, 
  DdNode * g, 
  DdNode * h, 
  st_table * ghTable, 
  st_table * cacheTable 
)
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.

Side Effects g and h referenced for the cache

See Also ZeroCase
Defined in cuddDecomp.c

static void 
ConjunctsFree(
  DdManager * dd, 
  Conjuncts * factors 
)
Free factors structure

Side Effects None

Defined in cuddDecomp.c

static enum st_retval 
CorrelCleanUp(
  char * key, 
  char * value, 
  char * arg 
)
Frees memory associated with hash table. Returns ST_CONTINUE.

Side Effects None

Defined in cuddBddCorr.c

static int 
CorrelCompare(
  const char * key1, 
  const char * key2 
)
Compares two hash table entries. Returns 0 if they are identical; 1 otherwise.

Side Effects None

Defined in cuddBddCorr.c

static int 
CorrelHash(
  char * key, 
  int  modulus 
)
Hashes a hash table entry. It is patterned after st_strhash. Returns a value between 0 and modulus.

Side Effects None

Defined in cuddBddCorr.c

static double 
CountMinterms(
  DdNode * node, 
  double  max, 
  st_table * mintermTable, 
  FILE * fp 
)
Count the number of minterms of each node ina a BDD and store it in a hash table.

Side Effects None

Defined in cuddDecomp.c

static NodeStat * 
CreateBotDist(
  DdNode * node, 
  st_table * distanceTable 
)
Get longest distance of node from constant. Returns the distance of the root from the constant if successful; CUDD_OUT_OF_MEM otherwise.

Side Effects None

Defined in cuddDecomp.c

static int 
CreateBotDist(
  DdNode * node, current node
  st_table * pathTable, path table with path lengths
  unsigned int * pathLengthArray, array that stores number of nodes belonging to a particular path length.
  FILE * fp where to write messages
)
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

Side Effects Updates Path Table and path length array

See Also CreatePathTable CreateTopDist AssessPathLength
Defined in cuddSubsetSP.c

static st_table * 
CreatePathTable(
  DdManager * dd, DD manager
  GlobalInfo_t * gInfo, global information
  DdNode * node, root of function
  unsigned int * pathLengthArray, array of path lengths to store nodes labeled with the various path lengths
  FILE * fp where to write messages
)
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.

Side Effects None

See Also CreateTopDist CreateBotDist
Defined in cuddSubsetSP.c

static void 
CreateTopDist(
  DdManager * dd, DD manager
  GlobalInfo_t * gInfo, global information
  st_table * pathTable, hast table to store path lengths
  int  parentPage, the pointer to the page on which the first parent in the queue is to be found.
  int  parentQueueIndex, pointer to the first parent on the page
  int  topLen, current distance from the root
  DdNode ** childPage, pointer to the page on which the first child is to be added.
  int  childQueueIndex, pointer to the first child
  int  numParents, number of parents to process in this recursive call
  FILE * fp where to write messages
)
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.

Side Effects Creates entries in the pathTable

See Also CreatePathTable CreateBotDist
Defined in cuddSubsetSP.c

 
Cudd_AggregationType þgcþ(
    
)


 
Cudd_HookType þwhereþ(
    
)


 
Cudd_HookType þwhereþ(
    
)


 
Cudd_HookType þwhereþ(
    
)


 
Cudd_ReorderingType *þmethodþ(
    
)


 
Cudd_ReorderingType *þmethodþ(
    
)


 
Cudd_ReorderingType þmethodþ(
    
)


 
Cudd_ReorderingType þmethodþ(
    
)


 
DD_PRFP þPifuncþfunction used to build Pi if it is NULL(
    
)


 
DdApaDigit þliteralþ(
    
)


 
DdApaNumber þbþ(
    
)


 
DdApaNumber þdestþ(
    
)


 
DdApaNumber þdiffþ(
    
)


 
DdApaNumber þnumberþ(
    
)


 
DdApaNumber þnumberþ(
    
)


 
DdApaNumber þquotientþ(
    
)


 
DdApaNumber þquotientþ(
    
)


 
DdApaNumber þsecondþ(
    
)


 
DdApaNumber þsumþ(
    
)


 
DdGen *þgenþ(
    
)


 
DdGen *þgenþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þddþ(
    
)


 
DdManager *þmanagerþ(
    
)


 
DdManager *þtableþ(
    
)


 
DdManager *þtableþ(
    
)


 
DdManager *þtableþ(
    
)


 
DdManager *þtableþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdManager *þuniqueþ(
    
)


 
DdNode ***þconjunctsþaddress of the array of conjuncts(
    
)


 
DdNode ***þconjunctsþaddress of the array of conjuncts(
    
)


 
DdNode ***þconjunctsþaddress of the array of conjuncts(
    
)


 
DdNode ***þconjunctsþaddress of the first factor(
    
)


 
DdNode ***þdisjunctsþaddress of the array of the disjuncts(
    
)


 
DdNode ***þdisjunctsþaddress of the array of the disjuncts(
    
)


 
DdNode ***þdisjunctsþaddress of the array of the disjuncts(
    
)


 
DdNode ***þdisjunctsþaddress of the array of the disjuncts(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þgþ(
    
)


 
DdNode **þnodeþ(
    
)


 
DdNode **þnodeþ(
    
)


 
DdNode **þonlyGþcube of variables only in g(
    
)


 
DdNode **þvectorOffþ(
    
)


 
DdNode **þvectorþ(
    
)


 
DdNode **þvectorþ(
    
)


 
DdNode **þvectorþ(
    
)


 
DdNode **þyþarray of y variables(
    
)


 
DdNode **þyþarray of y variables(
    
)


 
DdNode **þyþarray of y variables(
    
)


 
DdNode **þyþarray of y variables(
    
)


 
DdNode **þyþarray of y variables(
    
)


 
DdNode **þzdd_Iþ(
    
)


 
DdNode **þzþarray of z variables(
    
)


 
DdNode **þzþarray of z variables(
    
)


 
DdNode *þBþ(
    
)


 
DdNode *þBþ(
    
)


 
DdNode *þDþ(
    
)


 
DdNode *þDþ(
    
)


 
DdNode *þPþ(
    
)


 
DdNode *þPþ(
    
)


 
DdNode *þQþ(
    
)


 
DdNode *þQþ(
    
)


 
DdNode *þQþ(
    
)


 
DdNode *þQþ(
    
)


 
DdNode *þUþ(
    
)


 
DdNode *þYþ(
    
)


 
DdNode *þbckþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcubeþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþ(
    
)


 
DdNode *þcþconstraint (care set)(
    
)


 
DdNode *þepsilonþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþ(
    
)


 
DdNode *þfþDD whose support is sought(
    
)


 
DdNode *þfþDD whose support is sought(
    
)


 
DdNode *þfþDD whose support size is sought(
    
)


 
DdNode *þfþZDD whose support is sought(
    
)


 
DdNode *þfþfunction against which to expand(
    
)


 
DdNode *þfþfunction in which to remap variables(
    
)


 
DdNode *þfþfunction of which the cube is to be made a prime(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþ(
    
)


 
DdNode *þgþsecond operand(
    
)


 
DdNode *þhþ(
    
)


 
DdNode *þhþ(
    
)


 
DdNode *þhþ(
    
)


 
DdNode *þhþ(
    
)


 
DdNode *þhþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnodeþ(
    
)


 
DdNode *þnþ(
    
)


 
DdNode *þnþ(
    
)


 
DdNode *þnþ(
    
)


 
DdNode *þnþ(
    
)


 
DdNode *þnþ(
    
)


 
DdNode *þp_nodeþ(
    
)


 
DdNode *þphaseBddþcube of the phases(
    
)


 
DdNode *þuþ(
    
)


 
DdNode *þuþupper bound(
    
)


 
DdNode *þvarþvariable(
    
)


 
DdTlcInfo *þtþ(
    
)


 
EpDouble *þepdþ(
    
)


 
FILE *þfpþ(
    
)


 
FILE *þfpþ(
    
)


 
FILE *þfpþ(
    
)


 
FILE *þfpþ(
    
)


 
FILE *þfpþ(
    
)


 
FILE *þfpþpointer to the dump file(
    
)


 
FILE *þfpþpointer to the dump file(
    
)


 
FILE *þfpþpointer to the dump file(
    
)


 
FILE *þfpþpointer to the dump file(
    
)


 
FILE *þfpþpointer to the dump file(
    
)


static enum st_retval 
MarkCacheCleanUp(
  char * key, 
  char * value, 
  char * arg 
)
Frees memory associated with computed table of cuddBddLICMarkEdges. Returns ST_CONTINUE.

Side Effects None

See Also Cudd_bddLICompaction
Defined in cuddGenCof.c

static int 
MarkCacheCompare(
  const char * ptr1, 
  const char * ptr2 
)
Comparison function for the computed table of cuddBddLICMarkEdges. Returns 0 if the two nodes of the key are equal; 1 otherwise.

Side Effects None

See Also Cudd_bddLICompaction
Defined in cuddGenCof.c

static int 
MarkCacheHash(
  char * ptr, 
  int  modulus 
)
Hash function for the computed table of cuddBddLICMarkEdges. Returns the bucket number.

Side Effects None

See Also Cudd_bddLICompaction
Defined in cuddGenCof.c

 
MtrNode *þtreeþ(
    
)


 
MtrNode *þtreeþ(
    
)


static int 
PMX(
  int  maxvar 
)
Performs the crossover between two randomly chosen parents, and creates two children, x1 and x2. Uses the Partially Matched Crossover operator.

Side Effects None

Defined in cuddGenetic.c

static int 
PairInTables(
  DdNode * g, 
  DdNode * h, 
  st_table * ghTable 
)
.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;

See Also CheckTablesCacheAndReturn CheckInTables
Defined in cuddDecomp.c

static Conjuncts * 
PickOnePair(
  DdNode * node, 
  DdNode * g1, 
  DdNode * h1, 
  DdNode * g2, 
  DdNode * h2, 
  st_table * ghTable, 
  st_table * cacheTable 
)
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.

See Also ZeroCase BuildConjuncts
Defined in cuddDecomp.c

static DdNode * 
RAbuildSubset(
  DdManager * dd, DD manager
  DdNode * node, current node
  ApproxInfo * info node info
)
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.

Side Effects None

See Also cuddRemapUnderApprox
Defined in cuddApprox.c

static int 
RAmarkNodes(
  DdManager * dd, manager
  DdNode * f, function to be analyzed
  ApproxInfo * info, info on BDD
  int  threshold, when to stop approximating
  double  quality minimum improvement for accepted changes
)
Marks nodes for remapping. Returns 1 if successful; 0 otherwise.

Side Effects None

See Also cuddRemapUnderApprox
Defined in cuddApprox.c

static void 
ResizeCountMintermPages(
    
)
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.

Side Effects Changes the size of minterm pages, page, page index, maximum number of pages freeing stuff in case of memory out.

Defined in cuddSubsetHB.c

static void 
ResizeCountNodePages(
    
)
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.

Side Effects Changes the size of pages, page, page index, maximum number of pages freeing stuff in case of memory out.

Defined in cuddSubsetHB.c

static void 
ResizeNodeDataPages(
    
)
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.

Side Effects Changes the size of pages, page, page index, maximum number of pages freeing stuff in case of memory out.

Defined in cuddSubsetHB.c

static void 
ResizeNodeDistPages(
  DdManager * dd, DD manager
  GlobalInfo_t * gInfo global information
)
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.

Side Effects Changes the size of pages, page, page index, maximum number of pages freeing stuff in case of memory out.

Defined in cuddSubsetSP.c

static void 
ResizeQueuePages(
  DdManager * dd, DD manager
  GlobalInfo_t * gInfo global information
)
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.

Side Effects Changes the size of pages, page, page index, maximum number of pages freeing stuff in case of memory out.

Defined in cuddSubsetSP.c

static void 
StoreNodes(
  st_table * storeTable, 
  DdManager * dd, 
  DdNode * node 
)
rocedure to recursively store nodes that are retained in the subset.

Side Effects None

See Also StoreNodes
Defined in cuddSubsetHB.c

static double 
SubsetCountMintermAux(
  DdNode * node, function to analyze
  double  max, number of minterms of constant 1
  st_table * table visitedTable table
)
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.

Side Effects Creates structures of type node quality and fills the st_table

See Also SubsetCountMinterm
Defined in cuddSubsetHB.c

static st_table * 
SubsetCountMinterm(
  DdNode * node, function to be analyzed
  int  nvars number of variables node depends on
)
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.

Side Effects none

See Also SubsetCountMintermAux
Defined in cuddSubsetHB.c

static int 
SubsetCountNodesAux(
  DdNode * node, current node
  st_table * table, table to update node count, also serves as visited table.
  double  max maximum number of variables
)
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.

Side Effects Updates the node data table with node counts

See Also SubsetCountNodes
Defined in cuddSubsetHB.c

static int 
SubsetCountNodes(
  DdNode * node, function to be analyzed
  st_table * table, node quality table
  int  nvars number of variables node depends on
)
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.

Side Effects None

See Also SubsetCountNodesAux
Defined in cuddSubsetHB.c

static DdNode * 
UAbuildSubset(
  DdManager * dd, DD manager
  DdNode * node, current node
  ApproxInfo * info node info
)
Builds the subset BDD. Based on the info table, replaces selected nodes by zero. Returns a pointer to the result if successful; NULL otherwise.

Side Effects None

See Also cuddUnderApprox
Defined in cuddApprox.c

static int 
UAmarkNodes(
  DdManager * dd, manager
  DdNode * f, function to be analyzed
  ApproxInfo * info, info on BDD
  int  threshold, when to stop approximating
  int  safe, enforce safe approximation
  double  quality minimum improvement for accepted changes
)
Marks nodes for replacement by zero. Returns 1 if successful; 0 otherwise.

Side Effects None

See Also cuddUnderApprox
Defined in cuddApprox.c

static Conjuncts * 
ZeroCase(
  DdManager * dd, 
  DdNode * node, 
  Conjuncts * factorsNv, 
  st_table * ghTable, 
  st_table * cacheTable, 
  int  switched 
)
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.

Side Effects Frees the BDDs in factorsNv. factorsNv itself is not freed because it is freed above.

See Also BuildConjuncts
Defined in cuddDecomp.c

static DdNode * 
addBddDoInterval(
  DdManager * dd, 
  DdNode * f, 
  DdNode * l, 
  DdNode * u 
)
Performs the recursive step for Cudd_addBddInterval. Returns a pointer to the BDD if successful; NULL otherwise.

Side Effects None

See Also addBddDoThreshold addBddDoStrictThreshold
Defined in cuddBridge.c

static DdNode * 
addBddDoIthBit(
  DdManager * dd, 
  DdNode * f, 
  DdNode * index 
)
Performs the recursive step for Cudd_addBddIthBit. Returns a pointer to the BDD if successful; NULL otherwise.

Side Effects None

Defined in cuddBridge.c

static DdNode * 
addBddDoStrictThreshold(
  DdManager * dd, 
  DdNode * f, 
  DdNode * val 
)
Performs the recursive step for Cudd_addBddStrictThreshold. Returns a pointer to the BDD if successful; NULL otherwise.

Side Effects None

See Also addBddDoThreshold
Defined in cuddBridge.c

static DdNode * 
addBddDoThreshold(
  DdManager * dd, 
  DdNode * f, 
  DdNode * val 
)
Performs the recursive step for Cudd_addBddThreshold. Returns a pointer to the BDD if successful; NULL otherwise.

Side Effects None

See Also addBddDoStrictThreshold
Defined in cuddBridge.c

static int 
addCheckPositiveCube(
  DdManager * manager, 
  DdNode * cube 
)
Checks whether cube is an ADD representing the product of positive literals. Returns 1 in case of success; 0 otherwise.

Side Effects None

Defined in cuddAddAbs.c

static DdNode * 
addDoIthBit(
  DdManager * dd, 
  DdNode * f, 
  DdNode * index 
)
Performs the recursive step for Cudd_addIthBit. Returns a pointer to the BDD if successful; NULL otherwise.

Side Effects None

Defined in cuddAddFind.c

static DdNode * 
addMMRecur(
  DdManager * dd, 
  DdNode * A, 
  DdNode * B, 
  int  topP, 
  int * vars 
)
Performs the recursive step of Cudd_addMatrixMultiply. Returns a pointer to the result if successful; NULL otherwise.

Side Effects None

Defined in cuddMatMult.c

static int 
addMultiplicityGroups(
  DdManager * dd, manager
  MtrNode * treenode, current tree node
  int  multiplicity, how many ZDD vars per BDD var
  char * vmask, variable pairs for which a group has been already built
  char * lmask levels for which a group has already been built
)
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.

Side Effects Changes the variable group tree.

See Also Cudd_zddVarsFromBddVars
Defined in cuddAPI.c

static DdNode * 
addTriangleRecur(
  DdManager * dd, 
  DdNode * f, 
  DdNode * g, 
  int * vars, 
  DdNode * cube 
)
Performs the recursive step of Cudd_addTriangle. Returns a pointer to the result if successful; NULL otherwise.

Side Effects None

Defined in cuddMatMult.c

static void 
addVarToConst(
  DdNode * f, 
  DdNode ** gp, 
  DdNode ** hp, 
  DdNode * one, 
  DdNode * zero 
)
Replaces variables with constants if possible (part of canonical form).

Side Effects None

Defined in cuddAddIte.c

static DdNode * 
addWalshInt(
  DdManager * dd, 
  DdNode ** x, 
  DdNode ** y, 
  int  n 
)
Generates a Walsh matrix in ADD form. Returns a pointer to the matrixi if successful; NULL otherwise.

Side Effects None

Defined in cuddAddWalsh.c

static int 
array_compare(
  const char * array1, 
  const char * array2 
)
Comparison function for the computed table. Returns 0 if the two arrays are equal; 1 otherwise.

Side Effects None

Defined in cuddGenetic.c

static int 
array_hash(
  char * array, 
  int  modulus 
)
Hash function for the computed table. Returns the bucket number.

Side Effects None

Defined in cuddGenetic.c

static double 
bddAnnotateMintermCount(
  DdManager * manager, 
  DdNode * node, 
  double  max, 
  st_table * table 
)
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.

Side Effects Fills up 'table' with the pair .

Defined in cuddSplit.c

static int 
bddCheckPositiveCube(
  DdManager * manager, 
  DdNode * cube 
)
Returns 1 in case of success; 0 otherwise.

Side Effects None

Defined in cuddBddAbs.c

static double 
bddCorrelationAux(
  DdManager * dd, 
  DdNode * f, 
  DdNode * g, 
  st_table * table 
)
Performs the recursive step of Cudd_bddCorrelation. Returns the fraction of minterms in the ON-set of the EXNOR of f and g.

Side Effects None

See Also bddCorrelationWeightsAux
Defined in cuddBddCorr.c

static double 
bddCorrelationWeightsAux(
  DdManager * dd, 
  DdNode * f, 
  DdNode * g, 
  double * prob, 
  st_table * table 
)
Performs the recursive step of Cudd_bddCorrelationWeigths.

Side Effects None

See Also bddCorrelationAux
Defined in cuddBddCorr.c

static void 
bddFixTree(
  DdManager * table, 
  MtrNode * treenode 
)
Fixes the BDD variable group tree after a shuffle. Assumes that the order of the variables in a terminal node has not been changed.

Side Effects Changes the BDD variable group tree.

Defined in cuddReorder.c

static int 
bddVarToCanonicalSimple(
  DdManager * dd, 
  DdNode ** fp, 
  DdNode ** gp, 
  DdNode ** hp, 
  unsigned int * topfp, 
  unsigned int * topgp, 
  unsigned int * tophp 
)
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.

Side Effects None

See Also bddVarToConst bddVarToCanonical
Defined in cuddBddIte.c

static int 
bddVarToCanonical(
  DdManager * dd, 
  DdNode ** fp, 
  DdNode ** gp, 
  DdNode ** hp, 
  unsigned int * topfp, 
  unsigned int * topgp, 
  unsigned int * tophp 
)
Reduces 2 variable expressions to canonical form.

Side Effects None

See Also bddVarToConst bddVarToCanonicalSimple
Defined in cuddBddIte.c

static void 
bddVarToConst(
  DdNode * f, 
  DdNode ** gp, 
  DdNode ** hp, 
  DdNode * one 
)
This function performs part of the transformation to standard form by replacing variables with constants if possible.

Side Effects None

See Also bddVarToCanonical bddVarToCanonicalSimple
Defined in cuddBddIte.c

static int 
beforep(
  DdHalfWord  var1a, 
  short  phase1a, 
  DdHalfWord  var1b, 
  short  phase1b, 
  DdHalfWord  var2a, 
  short  phase2a, 
  DdHalfWord  var2b, 
  short  phase2b 
)
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).

Side Effects None

See Also equalp
Defined in cuddEssent.c

static BitVector * 
bitVectorAlloc(
  int  size 
)
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.

Side Effects None

See Also bitVectorClear bitVectorFree
Defined in cuddEssent.c

static void 
bitVectorFree(
  BitVector * vector 
)
Frees a bit vector.

Side Effects None

See Also bitVectorAlloc
Defined in cuddEssent.c

static int 
build_dd(
  DdManager * table, 
  int  num, the index of the individual to be built
  int  lower, 
  int  upper 
)
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.

Side Effects None

Defined in cuddGenetic.c

 
char *þstringþ(
    
)


 
char *þstrþpointer to string to use if != NULL(
    
)


static int 
checkSymmInfo(
  DdManager * table, 
  DdHalfWord * symmInfo, 
  int  index, 
  int  level 
)
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.

Side Effects None

See Also initSymmInfo
Defined in cuddExact.c

static DdTlcInfo * 
computeClausesWithUniverse(
  DdTlcInfo * Cres, list of clauses for child
  DdHalfWord  label, variable labeling the current node
  short  phase 0 if E child is zero; 1 if T child is zero
)
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.

Side Effects None

See Also computeClauses
Defined in cuddEssent.c

static DdTlcInfo * 
computeClauses(
  DdTlcInfo * Tres, list of clauses for T child
  DdTlcInfo * Eres, list of clauses for E child
  DdHalfWord  label, variable labeling the current node
  int  size number of variables in the manager
)
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.

Side Effects None

See Also computeClausesWithUniverse
Defined in cuddEssent.c

static int 
computeLB(
  DdManager * table, manager
  DdHalfWord * order, optimal order for the subset
  int  roots, roots between lower and upper
  int  cost, minimum cost for the subset
  int  lower, lower level to be reordered
  int  upper, upper level to be reordered
  int  level offset for the current top bottom var
)
Computes a lower bound on the size of a BDD from the following factors:

Last updated on 20120204 17h33