Author: schor Date: Tue Jan 2 20:38:16 2018 New Revision: 1819895 URL: http://svn.apache.org/viewvc?rev=1819895&view=rev Log: improve copyOnWrite impls for size - is a constant. Minor refactoring in CASImpl.
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java?rev=1819895&r1=1819894&r2=1819895&view=diff ============================================================================== --- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java (original) +++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java Tue Jan 2 20:38:16 2018 @@ -798,12 +798,12 @@ public class CASImpl extends AbstractCas // assert(l.size() == (2 + fsIdGenerator)); final int p = fsIdGenerator; - final int r = fsIdGenerator += isId2Fs - ? lastFsV2Size - : 1; + final int r = fsIdGenerator = peekNextFsId(); + if (r < p) { throw new RuntimeException("UIMA Cas Internal id value overflowed maximum int value"); } + if (isId2Fs) { // this computation is partial - misses length of arrays stored on heap // because that info not yet available @@ -813,6 +813,17 @@ public class CASImpl extends AbstractCas return r; } + /** + * @return the lastUsedFsId + the size of that or 1 + */ + int peekNextFsId() { + return fsIdGenerator + lastFsV2IdIncr(); + } + + int lastFsV2IdIncr() { + return (isId2Fs ? lastFsV2Size : 1); + } + private CASImpl getViewFromSofaNbr(int nbr) { final ArrayList<CASImpl> sn2v = sofaNbr2ViewMap; if (nbr < sn2v.size()) { @@ -4749,6 +4760,14 @@ public class CASImpl extends AbstractCas return svd.fsIdGenerator; } + final public int peekNextFsId() { + return svd.peekNextFsId(); + } + + final public int lastV2IdIncr() { + return svd.lastFsV2IdIncr(); + } + /** * Call this to capture the current value of fsIdGenerator and make it * available to other threads. @@ -5326,7 +5345,7 @@ public class CASImpl extends AbstractCas // - v.toString() } - private static int debug2cnt = 0; +// private static int debug2cnt = 0; /** * @param v Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java?rev=1819895&r1=1819894&r2=1819895&view=diff ============================================================================== --- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java (original) +++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java Tue Jan 2 20:38:16 2018 @@ -36,10 +36,13 @@ public class CopyOnWriteObjHashSet<T> im private ObjHashSet<T> original; + private final int original_size; + public CopyOnWriteObjHashSet(ObjHashSet<T> original) { this.ohs = original; this.original = original; + this.original_size = original.size(); } /** @@ -62,12 +65,7 @@ public class CopyOnWriteObjHashSet<T> im public int find(T obj) { return ohs.find(obj); } - -// @Override -// public int size() { -// -// } - + /** * For iterator use * @param index a magic number returned by the internal find @@ -172,8 +170,8 @@ public class CopyOnWriteObjHashSet<T> im * @see ObjHashSet#size() * @return the size */ - public int size() { - return ohs.size(); + final public int size() { + return original_size; } /* (non-Javadoc) Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java?rev=1819895&r1=1819894&r2=1819895&view=diff ============================================================================== --- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java (original) +++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java Tue Jan 2 20:38:16 2018 @@ -35,6 +35,7 @@ public class CopyOnWriteOrderedFsSet_arr final public int a_firstUsedslot; final public int a_nextFreeslot; final public OrderedFsSet_array<TOP> original; + final private int original_size; public TOP[] a; // derived from "set" above @@ -46,6 +47,7 @@ public class CopyOnWriteOrderedFsSet_arr this.a_firstUsedslot = original.a_firstUsedslot; this.a_nextFreeslot = original.a_nextFreeslot; this.a = original.a; + this.original_size = original.size(); } /** @@ -89,8 +91,8 @@ public class CopyOnWriteOrderedFsSet_arr * @see OrderedFsSet_array#size() * @return the size of this version of the index (maybe not the current index size) */ - public int size() { - return a_nextFreeslot - a_firstUsedslot; + final public int size() { + return original_size; } // /**