1Release 2.5.0 of Cudd introduces the ability to set timeouts. The 2function that is interrupted returns NULL (which the application must 3be prepared to handle,) but the BDDs are uncorrupted and the invoking 4program can continue to use the manager. 5 6In addition, reordering is now aware of timeouts, so that it gives up 7when a timeout is approaching to give the invoking program a chance to 8obtain some results. 9 10The response time to the timeout is not immediate, though most of the time 11it is well below one second. Checking for timeouts has a small overhead. 12In experiments, less than 1% has been observed on average. 13 14Creation of BDD managers with many variables (e.g., tens or hundreds 15of thousands) is now much more efficient. Computing small supports of 16BDDs when there are many variables is also much more efficient, but 17this has been at the cost of separating the function for BDDs and ADDs 18(Cudd_Support) from that for ZDDs (Cudd_zddSupport). 19 20The C++ interface has undergone a major upgrade. 21 22The handling of variable gruops in reordering has been much improved. 23(Thanks to Arie Gurfinkel for a very detailed bug report!) A handful 24of other bugs have been fixed as well. 25 26 27New Functions: 28 29unsigned long Cudd_ReadStartTime(DdManager *unique); 30 31unsigned long Cudd_ReadElapsedTime(DdManager *unique); 32 33void Cudd_SetStartTime(DdManager *unique, unsigned long st); 34 35void Cudd_ResetStartTime(DdManager *unique); 36 37unsigned long Cudd_ReadTimeLimit(DdManager *unique); 38 39void Cudd_SetTimeLimit(DdManager *unique, unsigned long tl); 40 41void Cudd_UpdateTimeLimit(DdManager * unique); 42 43void Cudd_IncreaseTimeLimit(DdManager * unique, unsigned long increase); 44 45void Cudd_UnsetTimeLimit(DdManager *unique); 46 47int Cudd_TimeLimited(DdManager *unique); 48 49unsigned int Cudd_ReadMaxReorderings (DdManager *dd); 50 51void Cudd_SetMaxReorderings (DdManager *dd, unsigned int mr); 52 53unsigned int Cudd_ReadOrderRandomization(DdManager * dd); 54 55void Cudd_SetOrderRandomization(DdManager * dd, unsigned int factor); 56 57int Cudd_PrintGroupedOrder(DdManager * dd, const char *str, void *data); 58 59int Cudd_EnableOrderingMonitoring(DdManager *dd); 60 61int Cudd_DisableOrderingMonitoring(DdManager *dd); 62 63int Cudd_OrderingMonitoring(DdManager *dd); 64 65DdNode * Cudd_bddExistAbstractLimit(DdManager * manager, DdNode * f, DdNode * cube, unsigned int limit); 66 67DdNode * Cudd_bddIteLimit (DdManager *dd, DdNode *f, DdNode *g, DdNode *h, unsigned int limit); 68 69DdNode * Cudd_bddOrLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); 70 71DdNode * Cudd_bddXnorLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); 72 73int Cudd_CheckCube (DdManager *dd, DdNode *g); 74 75DdNode * Cudd_bddMaximallyExpand(DdManager *dd, DdNode *lb, DdNode *ub, DdNode *f); 76 77DdNode * Cudd_bddLargestPrimeUnate(DdManager *dd , DdNode *f, DdNode *phaseBdd); 78 79int Cudd_Reserve(DdManager *manager, int amount); 80 81int Cudd_SupportIndices(DdManager * dd, DdNode * f, int **indices); 82 83int Cudd_VectorSupportIndices(DdManager * dd, DdNode ** F, int n, int **indices); 84 85DdNode * Cudd_zddSupport(DdManager * dd, DdNode * f); 86 87 88Changed prototypes: 89 90unsigned int Cudd_ReadReorderings (DdManager *dd); 91 92---------------------------------------------------------------------- 93 94Release 2.4.2 of Cudd features several bug fixes. The most important 95are those that prevented Cudd from making full use of up to 4 GB of 96memory when using 32-bit pointers. A handful of bugs were discovered by 97Coverity. (Thanks to Christian Stangier!) 98 99This release can be compiled with either 64-bit pointers or 32-bit 100pointers on x86_64 platforms if sizeof(long) = sizeof(void *) = 8 and 101sizeof(int) = 4. This is known as the LP64 model. For 32-bit pointers, 102one usually needs supplementary libraries. On Ubuntu and Debian Linux, 103one needs g++-multilib, which can be installed with 104"apt-get install g++-multilib." 105 106Added functions 107 108DdNode *Cudd_Inequality (DdManager * dd, int N, int c, DdNode ** x, 109DdNode ** y); 110 111DdNode * Cudd_Disequality (DdManager * dd, int N, int c, DdNode ** x, 112DdNode ** y); 113 114DdNode * Cudd_bddInterval (DdManager * dd, int N, DdNode ** x, 115unsigned int lowerB, unsigned int upperB); 116 117Changed prototypes: 118 119int Cudd_DumpBlif (DdManager *dd, int n, DdNode **f, char 120**inames, char **onames, char *mname, FILE *fp, int mv); 121 122int Cudd_DumpBlifBody (DdManager *dd, int n, DdNode **f, char 123**inames, char **onames, FILE *fp, int mv); 124 125The additional parameter allows the caller to choose between plain blif 126and blif-MV. 127 128---------------------------------------------------------------------- 129 130Release 2.4.1 of Cudd features one major change with respect to previous 131releases. The licensing terms are now explicitly stated. 132