diff options
Diffstat (limited to 'src/bdd/cudd/cuddHarwell.c')
-rw-r--r-- | src/bdd/cudd/cuddHarwell.c | 592 |
1 files changed, 311 insertions, 281 deletions
diff --git a/src/bdd/cudd/cuddHarwell.c b/src/bdd/cudd/cuddHarwell.c index af552148..75e328ea 100644 --- a/src/bdd/cudd/cuddHarwell.c +++ b/src/bdd/cudd/cuddHarwell.c @@ -7,17 +7,44 @@ Synopsis [Function to read a matrix in Harwell format.] Description [External procedures included in this module: - <ul> - <li> Cudd_addHarwell() - </ul> - ] + <ul> + <li> Cudd_addHarwell() + </ul> + ] Author [Fabio Somenzi] - Copyright [This file was created at the University of Colorado at - Boulder. The University of Colorado at Boulder makes no warranty - about the suitability of this software for any purpose. It is - presented on an AS IS basis.] + Copyright [Copyright (c) 1995-2004, Regents of the University of Colorado + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the University of Colorado nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE.] ******************************************************************************/ @@ -27,6 +54,7 @@ ABC_NAMESPACE_IMPL_START + /*---------------------------------------------------------------------------*/ /* Constant declarations */ /*---------------------------------------------------------------------------*/ @@ -47,7 +75,7 @@ ABC_NAMESPACE_IMPL_START /*---------------------------------------------------------------------------*/ #ifndef lint -static char rcsid[] DD_UNUSED = "$Id: cuddHarwell.c,v 1.1.1.1 2003/02/24 22:23:52 wjiang Exp $"; +static char rcsid[] DD_UNUSED = "$Id: cuddHarwell.c,v 1.9 2004/08/13 18:04:49 fabio Exp $"; #endif /*---------------------------------------------------------------------------*/ @@ -116,16 +144,16 @@ Cudd_addHarwell( DdNode *cubex, *cubey, *minterm1; int u, v, err, i, j, nv; double val; - DdNode **lx = NULL, **ly = NULL, **lxn = NULL, **lyn = NULL; /* local copies of x, y, xn, yn_ */ /* Suppress "might be used uninitialized */ - int lnx, lny; /* local copies of nx and ny */ + DdNode **lx, **ly, **lxn, **lyn; /* local copies of x, y, xn, yn_ */ + int lnx, lny; /* local copies of nx and ny */ char title[73], key[9], mxtype[4], rhstyp[4]; int totcrd, ptrcrd, indcrd, valcrd, rhscrd, nrow, ncol, nnzero, neltvl, - nrhs, nrhsix; + nrhs, nrhsix; int *colptr, *rowind; #if 0 int nguess, nexact; - int *rhsptr, *rhsind; + int *rhsptr, *rhsind; #endif if (*nx < 0 || *ny < 0) return(0); @@ -136,7 +164,7 @@ Cudd_addHarwell( /* Read the header */ err = fscanf(fp, "%72c %8c", title, key); if (err == EOF) { - return(0); + return(0); } else if (err != 2) { return(0); } @@ -146,7 +174,7 @@ Cudd_addHarwell( err = fscanf(fp, "%d %d %d %d %d", &totcrd, &ptrcrd, &indcrd, &valcrd, &rhscrd); if (err == EOF) { - return(0); + return(0); } else if (err != 5) { return(0); } @@ -154,55 +182,55 @@ Cudd_addHarwell( err = fscanf(fp, "%3s %d %d %d %d", mxtype, &nrow, &ncol, &nnzero, &neltvl); if (err == EOF) { - return(0); + return(0); } else if (err != 5) { return(0); } /* Skip FORTRAN formats */ if (rhscrd == 0) { - err = fscanf(fp, "%*s %*s %*s \n"); + err = fscanf(fp, "%*s %*s %*s \n"); } else { - err = fscanf(fp, "%*s %*s %*s %*s \n"); + err = fscanf(fp, "%*s %*s %*s %*s \n"); } if (err == EOF) { - return(0); + return(0); } else if (err != 0) { return(0); } /* Print out some stuff if requested to be verbose */ if (pr>0) { - (void) fprintf(dd->out,"%s: type %s, %d rows, %d columns, %d entries\n", key, - mxtype, nrow, ncol, nnzero); - if (pr>1) (void) fprintf(dd->out,"%s\n", title); + (void) fprintf(dd->out,"%s: type %s, %d rows, %d columns, %d entries\n", key, + mxtype, nrow, ncol, nnzero); + if (pr>1) (void) fprintf(dd->out,"%s\n", title); } /* Check matrix type */ if (mxtype[0] != 'R' || mxtype[1] != 'U' || mxtype[2] != 'A') { - (void) fprintf(dd->err,"%s: Illegal matrix type: %s\n", - key, mxtype); - return(0); + (void) fprintf(dd->err,"%s: Illegal matrix type: %s\n", + key, mxtype); + return(0); } if (neltvl != 0) return(0); /* Read optional 5-th line */ if (rhscrd != 0) { - err = fscanf(fp, "%3c %d %d", rhstyp, &nrhs, &nrhsix); - if (err == EOF) { - return(0); - } else if (err != 3) { - return(0); - } - rhstyp[3] = (char) 0; - if (rhstyp[0] != 'F') { - (void) fprintf(dd->err, - "%s: Sparse right-hand side not yet supported\n", key); - return(0); - } - if (pr>0) (void) fprintf(dd->out,"%d right-hand side(s)\n", nrhs); + err = fscanf(fp, "%3c %d %d", rhstyp, &nrhs, &nrhsix); + if (err == EOF) { + return(0); + } else if (err != 3) { + return(0); + } + rhstyp[3] = (char) 0; + if (rhstyp[0] != 'F') { + (void) fprintf(dd->err, + "%s: Sparse right-hand side not yet supported\n", key); + return(0); + } + if (pr>0) (void) fprintf(dd->out,"%d right-hand side(s)\n", nrhs); } else { - nrhs = 0; + nrhs = 0; } /* Compute the number of variables */ @@ -210,109 +238,109 @@ Cudd_addHarwell( /* row and column numbers start from 0 */ u = nrow - 1; for (i=0; u > 0; i++) { - u >>= 1; + u >>= 1; } lnx = i; if (nrhs == 0) { - v = ncol - 1; + v = ncol - 1; } else { - v = 2* (ddMax(ncol, nrhs) - 1); + v = 2* (ddMax(ncol, nrhs) - 1); } for (i=0; v > 0; i++) { - v >>= 1; + v >>= 1; } lny = i; /* Allocate or reallocate arrays for variables as needed */ if (*nx == 0) { - if (lnx > 0) { - *x = lx = ABC_ALLOC(DdNode *,lnx); + if (lnx > 0) { + *x = lx = ABC_ALLOC(DdNode *,lnx); + if (lx == NULL) { + dd->errorCode = CUDD_MEMORY_OUT; + return(0); + } + *xn = lxn = ABC_ALLOC(DdNode *,lnx); + if (lxn == NULL) { + dd->errorCode = CUDD_MEMORY_OUT; + return(0); + } + } else { + *x = *xn = NULL; + } + } else if (lnx > *nx) { + *x = lx = ABC_REALLOC(DdNode *, *x, lnx); if (lx == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } - *xn = lxn = ABC_ALLOC(DdNode *,lnx); + *xn = lxn = ABC_REALLOC(DdNode *, *xn, lnx); if (lxn == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } } else { - *x = *xn = NULL; - } - } else if (lnx > *nx) { - *x = lx = ABC_REALLOC(DdNode *, *x, lnx); - if (lx == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); - } - *xn = lxn = ABC_REALLOC(DdNode *, *xn, lnx); - if (lxn == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); - } - } else { - lx = *x; - lxn = *xn; + lx = *x; + lxn = *xn; } if (*ny == 0) { - if (lny >0) { - *y = ly = ABC_ALLOC(DdNode *,lny); + if (lny >0) { + *y = ly = ABC_ALLOC(DdNode *,lny); + if (ly == NULL) { + dd->errorCode = CUDD_MEMORY_OUT; + return(0); + } + *yn_ = lyn = ABC_ALLOC(DdNode *,lny); + if (lyn == NULL) { + dd->errorCode = CUDD_MEMORY_OUT; + return(0); + } + } else { + *y = *yn_ = NULL; + } + } else if (lny > *ny) { + *y = ly = ABC_REALLOC(DdNode *, *y, lny); if (ly == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } - *yn_ = lyn = ABC_ALLOC(DdNode *,lny); + *yn_ = lyn = ABC_REALLOC(DdNode *, *yn_, lny); if (lyn == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } } else { - *y = *yn_ = NULL; - } - } else if (lny > *ny) { - *y = ly = ABC_REALLOC(DdNode *, *y, lny); - if (ly == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); - } - *yn_ = lyn = ABC_REALLOC(DdNode *, *yn_, lny); - if (lyn == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); - } - } else { - ly = *y; - lyn = *yn_; + ly = *y; + lyn = *yn_; } /* Create new variables as needed */ for (i= *nx,nv=bx+(*nx)*sx; i < lnx; i++,nv+=sx) { - do { - dd->reordered = 0; - lx[i] = cuddUniqueInter(dd, nv, one, zero); - } while (dd->reordered == 1); - if (lx[i] == NULL) return(0); + do { + dd->reordered = 0; + lx[i] = cuddUniqueInter(dd, nv, one, zero); + } while (dd->reordered == 1); + if (lx[i] == NULL) return(0); cuddRef(lx[i]); - do { - dd->reordered = 0; - lxn[i] = cuddUniqueInter(dd, nv, zero, one); - } while (dd->reordered == 1); - if (lxn[i] == NULL) return(0); + do { + dd->reordered = 0; + lxn[i] = cuddUniqueInter(dd, nv, zero, one); + } while (dd->reordered == 1); + if (lxn[i] == NULL) return(0); cuddRef(lxn[i]); } for (i= *ny,nv=by+(*ny)*sy; i < lny; i++,nv+=sy) { - do { - dd->reordered = 0; - ly[i] = cuddUniqueInter(dd, nv, one, zero); - } while (dd->reordered == 1); - if (ly[i] == NULL) return(0); - cuddRef(ly[i]); - do { - dd->reordered = 0; - lyn[i] = cuddUniqueInter(dd, nv, zero, one); - } while (dd->reordered == 1); - if (lyn[i] == NULL) return(0); - cuddRef(lyn[i]); + do { + dd->reordered = 0; + ly[i] = cuddUniqueInter(dd, nv, one, zero); + } while (dd->reordered == 1); + if (ly[i] == NULL) return(0); + cuddRef(ly[i]); + do { + dd->reordered = 0; + lyn[i] = cuddUniqueInter(dd, nv, zero, one); + } while (dd->reordered == 1); + if (lyn[i] == NULL) return(0); + cuddRef(lyn[i]); } /* Update matrix parameters */ @@ -320,213 +348,213 @@ Cudd_addHarwell( *ny = lny; *m = nrow; if (nrhs == 0) { - *n = ncol; + *n = ncol; } else { - *n = (1 << (lny - 1)) + nrhs; + *n = (1 << (lny - 1)) + nrhs; } /* Read structure data */ colptr = ABC_ALLOC(int, ncol+1); if (colptr == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } rowind = ABC_ALLOC(int, nnzero); if (rowind == NULL) { - dd->errorCode = CUDD_MEMORY_OUT; - return(0); + dd->errorCode = CUDD_MEMORY_OUT; + return(0); } for (i=0; i<ncol+1; i++) { - err = fscanf(fp, " %d ", &u); - if (err == EOF){ - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } else if (err != 1) { - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - colptr[i] = u - 1; + err = fscanf(fp, " %d ", &u); + if (err == EOF){ + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } else if (err != 1) { + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + colptr[i] = u - 1; } if (colptr[0] != 0) { - (void) fprintf(dd->err,"%s: Unexpected colptr[0] (%d)\n", - key,colptr[0]); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - for (i=0; i<nnzero; i++) { - err = fscanf(fp, " %d ", &u); - if (err == EOF){ - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } else if (err != 1) { + (void) fprintf(dd->err,"%s: Unexpected colptr[0] (%d)\n", + key,colptr[0]); ABC_FREE(colptr); ABC_FREE(rowind); return(0); } - rowind[i] = u - 1; + for (i=0; i<nnzero; i++) { + err = fscanf(fp, " %d ", &u); + if (err == EOF){ + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } else if (err != 1) { + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + rowind[i] = u - 1; } *E = zero; cuddRef(*E); for (j=0; j<ncol; j++) { - v = j; - cubey = one; cuddRef(cubey); - for (nv = lny - 1; nv>=0; nv--) { - if (v & 1) { - w = Cudd_addApply(dd, Cudd_addTimes, cubey, ly[nv]); - } else { - w = Cudd_addApply(dd, Cudd_addTimes, cubey, lyn[nv]); - } - if (w == NULL) { - Cudd_RecursiveDeref(dd, cubey); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - cuddRef(w); - Cudd_RecursiveDeref(dd, cubey); - cubey = w; - v >>= 1; - } - for (i=colptr[j]; i<colptr[j+1]; i++) { - u = rowind[i]; - err = fscanf(fp, " %lf ", &val); - if (err == EOF || err != 1){ - Cudd_RecursiveDeref(dd, cubey); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - /* Create new Constant node if necessary */ - cubex = cuddUniqueConst(dd, (CUDD_VALUE_TYPE) val); - if (cubex == NULL) { - Cudd_RecursiveDeref(dd, cubey); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - cuddRef(cubex); - - for (nv = lnx - 1; nv>=0; nv--) { - if (u & 1) { - w = Cudd_addApply(dd, Cudd_addTimes, cubex, lx[nv]); - } else { - w = Cudd_addApply(dd, Cudd_addTimes, cubex, lxn[nv]); - } - if (w == NULL) { + v = j; + cubey = one; cuddRef(cubey); + for (nv = lny - 1; nv>=0; nv--) { + if (v & 1) { + w = Cudd_addApply(dd, Cudd_addTimes, cubey, ly[nv]); + } else { + w = Cudd_addApply(dd, Cudd_addTimes, cubey, lyn[nv]); + } + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + cuddRef(w); Cudd_RecursiveDeref(dd, cubey); - Cudd_RecursiveDeref(dd, cubex); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); + cubey = w; + v >>= 1; } - cuddRef(w); - Cudd_RecursiveDeref(dd, cubex); - cubex = w; - u >>= 1; - } - minterm1 = Cudd_addApply(dd, Cudd_addTimes, cubey, cubex); - if (minterm1 == NULL) { - Cudd_RecursiveDeref(dd, cubey); - Cudd_RecursiveDeref(dd, cubex); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); + for (i=colptr[j]; i<colptr[j+1]; i++) { + u = rowind[i]; + err = fscanf(fp, " %lf ", &val); + if (err == EOF || err != 1){ + Cudd_RecursiveDeref(dd, cubey); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + /* Create new Constant node if necessary */ + cubex = cuddUniqueConst(dd, (CUDD_VALUE_TYPE) val); + if (cubex == NULL) { + Cudd_RecursiveDeref(dd, cubey); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + cuddRef(cubex); + + for (nv = lnx - 1; nv>=0; nv--) { + if (u & 1) { + w = Cudd_addApply(dd, Cudd_addTimes, cubex, lx[nv]); + } else { + w = Cudd_addApply(dd, Cudd_addTimes, cubex, lxn[nv]); + } + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + Cudd_RecursiveDeref(dd, cubex); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + cuddRef(w); + Cudd_RecursiveDeref(dd, cubex); + cubex = w; + u >>= 1; + } + minterm1 = Cudd_addApply(dd, Cudd_addTimes, cubey, cubex); + if (minterm1 == NULL) { + Cudd_RecursiveDeref(dd, cubey); + Cudd_RecursiveDeref(dd, cubex); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + cuddRef(minterm1); + Cudd_RecursiveDeref(dd, cubex); + w = Cudd_addApply(dd, Cudd_addPlus, *E, minterm1); + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + ABC_FREE(colptr); + ABC_FREE(rowind); + return(0); + } + cuddRef(w); + Cudd_RecursiveDeref(dd, minterm1); + Cudd_RecursiveDeref(dd, *E); + *E = w; } - cuddRef(minterm1); - Cudd_RecursiveDeref(dd, cubex); - w = Cudd_addApply(dd, Cudd_addPlus, *E, minterm1); - if (w == NULL) { Cudd_RecursiveDeref(dd, cubey); - ABC_FREE(colptr); - ABC_FREE(rowind); - return(0); - } - cuddRef(w); - Cudd_RecursiveDeref(dd, minterm1); - Cudd_RecursiveDeref(dd, *E); - *E = w; - } - Cudd_RecursiveDeref(dd, cubey); } ABC_FREE(colptr); ABC_FREE(rowind); /* Read right-hand sides */ for (j=0; j<nrhs; j++) { - v = j + (1<< (lny-1)); - cubey = one; cuddRef(cubey); - for (nv = lny - 1; nv>=0; nv--) { - if (v & 1) { - w = Cudd_addApply(dd, Cudd_addTimes, cubey, ly[nv]); - } else { - w = Cudd_addApply(dd, Cudd_addTimes, cubey, lyn[nv]); - } - if (w == NULL) { - Cudd_RecursiveDeref(dd, cubey); - return(0); - } - cuddRef(w); - Cudd_RecursiveDeref(dd, cubey); - cubey = w; - v >>= 1; - } - for (i=0; i<nrow; i++) { - u = i; - err = fscanf(fp, " %lf ", &val); - if (err == EOF || err != 1){ - Cudd_RecursiveDeref(dd, cubey); - return(0); - } - /* Create new Constant node if necessary */ - if (val == (double) 0.0) continue; - cubex = cuddUniqueConst(dd, (CUDD_VALUE_TYPE) val); - if (cubex == NULL) { - Cudd_RecursiveDeref(dd, cubey); - return(0); - } - cuddRef(cubex); - - for (nv = lnx - 1; nv>=0; nv--) { - if (u & 1) { - w = Cudd_addApply(dd, Cudd_addTimes, cubex, lx[nv]); - } else { - w = Cudd_addApply(dd, Cudd_addTimes, cubex, lxn[nv]); - } - if (w == NULL) { + v = j + (1<< (lny-1)); + cubey = one; cuddRef(cubey); + for (nv = lny - 1; nv>=0; nv--) { + if (v & 1) { + w = Cudd_addApply(dd, Cudd_addTimes, cubey, ly[nv]); + } else { + w = Cudd_addApply(dd, Cudd_addTimes, cubey, lyn[nv]); + } + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + return(0); + } + cuddRef(w); Cudd_RecursiveDeref(dd, cubey); - Cudd_RecursiveDeref(dd, cubex); - return(0); + cubey = w; + v >>= 1; } - cuddRef(w); - Cudd_RecursiveDeref(dd, cubex); - cubex = w; - u >>= 1; - } - minterm1 = Cudd_addApply(dd, Cudd_addTimes, cubey, cubex); - if (minterm1 == NULL) { - Cudd_RecursiveDeref(dd, cubey); - Cudd_RecursiveDeref(dd, cubex); - return(0); + for (i=0; i<nrow; i++) { + u = i; + err = fscanf(fp, " %lf ", &val); + if (err == EOF || err != 1){ + Cudd_RecursiveDeref(dd, cubey); + return(0); + } + /* Create new Constant node if necessary */ + if (val == (double) 0.0) continue; + cubex = cuddUniqueConst(dd, (CUDD_VALUE_TYPE) val); + if (cubex == NULL) { + Cudd_RecursiveDeref(dd, cubey); + return(0); + } + cuddRef(cubex); + + for (nv = lnx - 1; nv>=0; nv--) { + if (u & 1) { + w = Cudd_addApply(dd, Cudd_addTimes, cubex, lx[nv]); + } else { + w = Cudd_addApply(dd, Cudd_addTimes, cubex, lxn[nv]); + } + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + Cudd_RecursiveDeref(dd, cubex); + return(0); + } + cuddRef(w); + Cudd_RecursiveDeref(dd, cubex); + cubex = w; + u >>= 1; + } + minterm1 = Cudd_addApply(dd, Cudd_addTimes, cubey, cubex); + if (minterm1 == NULL) { + Cudd_RecursiveDeref(dd, cubey); + Cudd_RecursiveDeref(dd, cubex); + return(0); + } + cuddRef(minterm1); + Cudd_RecursiveDeref(dd, cubex); + w = Cudd_addApply(dd, Cudd_addPlus, *E, minterm1); + if (w == NULL) { + Cudd_RecursiveDeref(dd, cubey); + return(0); + } + cuddRef(w); + Cudd_RecursiveDeref(dd, minterm1); + Cudd_RecursiveDeref(dd, *E); + *E = w; } - cuddRef(minterm1); - Cudd_RecursiveDeref(dd, cubex); - w = Cudd_addApply(dd, Cudd_addPlus, *E, minterm1); - if (w == NULL) { Cudd_RecursiveDeref(dd, cubey); - return(0); - } - cuddRef(w); - Cudd_RecursiveDeref(dd, minterm1); - Cudd_RecursiveDeref(dd, *E); - *E = w; - } - Cudd_RecursiveDeref(dd, cubey); } return(1); @@ -542,5 +570,7 @@ Cudd_addHarwell( /* Definition of static functions */ /*---------------------------------------------------------------------------*/ + ABC_NAMESPACE_IMPL_END + |