These are the main changes from release 2.3.1 to release 2.4.0 of Cudd: Improved: - The package can now be compiled with a few C++ compilers in standard mode (as opposed to compatibility mode). This has required changes to most files both in CUDD and in the supporting packages. - The package compiles with gcc 3.3.1 without type-punning warnings. - Garbage collection speed has been improved. Note that now each garbage collection sweeps both the BDD/ADD table and the ZDD table. - Sizing of tables during variable reordering has been improved. - Improved efficiency of Cudd_bddIsVarEssential. - Node enumeration now is un reverse topological order. - The C++ interface will not crash when the maximum live number of nodes is exceeded. - The distribution includes now version 2.0.2 of the dddmp package. Fixed bugs in: cuddAddOrAbstractRecur cuddLocalCacheResize cuddSwapInPlace hashResize (in cuddLevelQ.c) cuddBddClosestCube cuddShrinkDeathRow Cudd_ShortestPath Cudd_LargestCube Cudd_bddCompose Cudd_addCompose Cudd_zddFirstPath Cudd_zddNextPath ddEpdCountMintermAux ddLCHash st.c Makefiles Changed: - memory in use is now an unsigned long instead of a long. This affects: unsigned long Cudd_ReadMemoryInUse(DdManager *dd) unsigned long Cudd_ReadMaxMemory(DdManager *dd) void Cudd_SetMaxMemory(DdManager *dd, unsigned long maxMemory) - Reversed the parameter order to ApaCountMinterm in the C++ interface. Added: - functions for and and and-exist that take a limit on the number of new nodes they can generate - iterator on the prime implicants of a function - functions to extract two-literal clauses from a BDD or ADD. - several API functions to the C++ interface New functions: DdNode * Cudd_bddAndAbstractLimit(DdManager *manager, DdNode *f, DdNode *g, DdNode *cube, unsigned int limit) DdNode * Cudd_bddAndLimit(DdManager *dd, DdNode *f, DdNode *g, unsigned int limit) DdTlcInfo * Cudd_FindTwoLiteralClauses(DdManager * dd, DdNode * f) int Cudd_PrintTwoLiteralClauses(DdManager * dd, DdNode * f, char **names, FILE *fp) int Cudd_ReadIthClause(DdTlcInfo * tlc, int i, DdHalfWord *var1, DdHalfWord *var2, int *phase1, int *phase2) void Cudd_tlcInfoFree(DdTlcInfo * t) DdNode * Cudd_bddNPAnd(DdManager *dd, DdNode *f, DdNode *c) DdGen * Cudd_FirstPrime(DdManager *dd, DdNode *l, DdNode *u, int **cube) int Cudd_NextPrime(DdGen *gen, int **cube) Thanks to: Will Adams Kavel Buyuksahin Goerschwin Fey Victor Kravets Guoqiang Pan Ralf Wimmer