You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2018/01/02 20:38:16 UTC

svn commit: r1819895 - in /uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima: cas/impl/CASImpl.java internal/util/CopyOnWriteObjHashSet.java internal/util/CopyOnWriteOrderedFsSet_array.java

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;
   }
 
 //  /**