From: John W. <joe...@us...> - 2005-01-31 10:34:37
|
Update of /cvsroot/javabdd/JavaBDD/net/sf/javabdd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30282/net/sf/javabdd Modified Files: MicroFactory.java Log Message: Optimized makenode search and DECREF() macro. Index: MicroFactory.java =================================================================== RCS file: /cvsroot/javabdd/JavaBDD/net/sf/javabdd/MicroFactory.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MicroFactory.java 31 Jan 2005 10:08:35 -0000 1.3 --- MicroFactory.java 31 Jan 2005 10:34:18 -0000 1.4 *************** *** 154,166 **** private final void DECREF(int node) { int a = bddnodes[node*__node_size + offset__lref] & REF_LMASK; ! if (a == 0 || a == REF_LMASK) { ! if (REF_HMASK == 0) return; ! int b = bddnodes[node*__node_size + offset__href] & REF_HMASK; ! if (a == 0) { ! if (b == 0) return; ! bddnodes[node*__node_size + offset__href] -= REF_HINC; ! } else if (b == REF_HMASK) return; } - bddnodes[node*__node_size + offset__lref] -= REF_LINC; } --- 154,163 ---- private final void DECREF(int node) { int a = bddnodes[node*__node_size + offset__lref] & REF_LMASK; ! if (a != REF_LMASK || ! (REF_HMASK != 0 && ! (bddnodes[node*__node_size + offset__href] & REF_HMASK) != REF_HMASK)) { ! if (REF_HMASK != 0 && a == 0) bddnodes[node*__node_size + offset__href] -= REF_HINC; ! bddnodes[node*__node_size + offset__lref] -= REF_LINC; } } *************** *** 3290,3300 **** res = HASH(hash2); ! while (res != 0) { ! if (LEVEL(res) == level && LOW(res) == low && HIGH(res) == high) { ! if (CACHESTATS > 0) cachestats.uniqueHit++; ! return res; ! } ! res = NEXT(res); ! if (CACHESTATS > 0) cachestats.uniqueChain++; } --- 3287,3302 ---- res = HASH(hash2); ! if (res != 0) { ! int m1 = (level << LEV_LPOS) | low; ! int m2 = ((level << (LEV_HPOS-LEV_LBITS)) & LEV_HMASK) | high; ! do { ! if (bddnodes[res*__node_size + offset__low] == m1 && ! bddnodes[res*__node_size + offset__high] == m2) { ! if (CACHESTATS > 0) cachestats.uniqueHit++; ! return res; ! } ! res = NEXT(res); ! if (CACHESTATS > 0) cachestats.uniqueChain++; ! } while (res != 0); } |