Author: schor
Date: Tue Feb 16 22:35:41 2016
New Revision: 1730763

URL: http://svn.apache.org/viewvc?rev=1730763&view=rev
Log:
[UIMA-4674] based on profiling, add non-checking forms for some iterator 
operations, to be used when the context guarantees the check isn't needed.

Modified:
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_ordered.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_unordered.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LLUnambiguousIteratorImpl.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java
 Tue Feb 16 22:35:41 2016
@@ -63,6 +63,10 @@ class FsIterator_aggregation_common<T ex
     }
     return iterators[lastValidIndex].get();
   }
+  
+  public T getNvc() {
+    return iterators[lastValidIndex].getNvc();
+  }
 
   public boolean isValid() {
     return lastValidIndex >= 0 &&
@@ -131,6 +135,25 @@ class FsIterator_aggregation_common<T ex
     lastValidIndex = iterators.length;  // invalid position
   }
     
+  public void moveToNextNvc() {
+    FSIterator<T> it = iterators[lastValidIndex];
+    it.moveToNextNvc();
+
+    if (it.isValid()) {
+      return;
+    }
+    
+    final int nbrIt = iterators.length;
+    for (int i = lastValidIndex + 1; i < nbrIt; i++) {
+      it = iterators[i];
+      it.moveToFirst();
+      if (it.isValid()) {
+        lastValidIndex = i;
+        return;
+      }
+    }
+    lastValidIndex = iterators.length;  // invalid position
+  }
 
   public void moveToPrevious() {
     // No point in going anywhere if iterator is not valid.

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
 Tue Feb 16 22:35:41 2016
@@ -61,6 +61,11 @@ class FsIterator_bag<T extends FeatureSt
     throw new NoSuchElementException();
   }
 
+  public T getNvc() {
+    checkConcurrentModification();
+    return bag.get(position);
+  }
+
   /* (non-Javadoc)
    * @see org.apache.uima.cas.FSIterator#moveToFirst()
    */
@@ -93,6 +98,14 @@ class FsIterator_bag<T extends FeatureSt
       position = bag.moveToNextFilled(++position);
     }
   }
+  
+  @Override
+  public void moveToNextNvc() {
+    checkConcurrentModification(); 
+    isGoingForward = true;
+    position = bag.moveToNextFilled(++position);
+  }
+
 
   /* (non-Javadoc)
    * @see org.apache.uima.cas.FSIterator#moveToPrevious()

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted.java
 Tue Feb 16 22:35:41 2016
@@ -83,7 +83,11 @@ class FsIterator_set_sorted<T extends Fe
     if (!isValid()) {
       return;
     }
+    moveToNextNvc();
+  }
   
+  @Override
+  public void moveToNextNvc() { 
     checkConcurrentModification();
     if (isGoingForward) {
       if (isCurrentElementFromLastGet) {
@@ -104,6 +108,7 @@ class FsIterator_set_sorted<T extends Fe
     }
   }
 
+
   @Override
   public void moveToPrevious() {
     if (!isValid()) {
@@ -138,6 +143,16 @@ class FsIterator_set_sorted<T extends Fe
     checkConcurrentModification();
     if (!isCurrentElementFromLastGet) {
       currentElement = iterator.next();
+      isCurrentElementFromLastGet = true;
+    }
+    return currentElement;
+  }
+
+  @Override
+  public T getNvc() {
+    checkConcurrentModification();
+    if (!isCurrentElementFromLastGet) {
+      currentElement = iterator.next();
       isCurrentElementFromLastGet = true;
     }
     return currentElement;

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_singletype.java
 Tue Feb 16 22:35:41 2016
@@ -37,7 +37,7 @@ public abstract class FsIterator_singlet
     // subtypes do moveToFirst after they finish initialization
   }
     
-  protected <I extends FSIterator<T>> I checkConcurrentModification() {
+  final protected <I extends FSIterator<T>> I checkConcurrentModification() {
     if ((null != detectIllegalIndexUpdates) && (modificationSnapshot != 
detectIllegalIndexUpdates[typeCode])) {
       throw new ConcurrentModificationException();
     }
@@ -67,4 +67,5 @@ public abstract class FsIterator_singlet
     sb.append(", size: ").append(this.ll_indexSize());
     return sb.toString();
   }
+  
 }

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes.java
 Tue Feb 16 22:35:41 2016
@@ -58,8 +58,12 @@ public abstract class FsIterator_subtype
     @Override
     public TOP get() throws NoSuchElementException { throw new 
NoSuchElementException(); }
     @Override
+    public TOP getNvc() { throw new NoSuchElementException(); }
+    @Override
     public void moveToNext() {}
     @Override
+    public void moveToNextNvc() {}
+    @Override
     public void moveToPrevious() {}
     @Override
     public void moveToFirst() {}

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_ordered.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_ordered.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_ordered.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_ordered.java
 Tue Feb 16 22:35:41 2016
@@ -122,46 +122,63 @@ public class FsIterator_subtypes_ordered
       it0.moveToNext();
       heapify_down(it0, 1);
     } else {
-      // We need to increment everything.
-      int lvi = this.iterators.length - 1;
-      int i = 1;
-      while (i <= lvi) {
-        // Any iterator other than the current one needs to be
-        // incremented until it's pointing at something that's
-        // greater than the current element.
-        final FsIterator_singletype<T> it = 
iterators[i].checkConcurrentModification();
-        // If the iterator we're considering is not valid, we
-        // set it to the first element. This should be it for this iterator...
-        if (!it.isValid()) {
-          it.moveToFirst();
-        }
-        // Increment the iterator while it is valid and pointing
-        // at something smaller than the current element.
-        while (it.isValid() && is_before(it, it0, 1)) {
-          it.moveToNext();
-        }
-
-        // find placement
-        if (it.isValid()) {
-          heapify_up(it, i, 1);
-          ++i;
-        } else {
-          // swap this iterator with the last possibly valid one
-          // lvi might be equal to i, this will not be a problem
-          this.iterators[i] = this.iterators[lvi];
-          this.iterators[lvi] = it;
-          --lvi;
-        }
-      }
+      moveToNextCmn(it0);
+    }
+  }
 
-      this.lastValidIndex = lvi;
-      this.wentForward = true;
+  @Override
+  public void moveToNextNvc() {
+    final FsIterator_singletype<T> it0 = 
iterators[0].checkConcurrentModification();
 
-      it0.moveToNext();
+    if (this.wentForward) {
+      it0.moveToNextNvc();
       heapify_down(it0, 1);
+    } else {
+      moveToNextCmn(it0);
     }
   }
 
+  private void moveToNextCmn(final FsIterator_singletype<T> it0) {
+    // We need to increment everything.
+    int lvi = this.iterators.length - 1;
+    int i = 1;
+    while (i <= lvi) {
+      // Any iterator other than the current one needs to be
+      // incremented until it's pointing at something that's
+      // greater than the current element.
+      final FsIterator_singletype<T> it = 
iterators[i].checkConcurrentModification();
+      // If the iterator we're considering is not valid, we
+      // set it to the first element. This should be it for this iterator...
+      if (!it.isValid()) {
+        it.moveToFirst();
+      }
+      // Increment the iterator while it is valid and pointing
+      // at something smaller than the current element.
+      while (it.isValid() && is_before(it, it0, 1)) {
+        it.moveToNext();
+      }
+
+      // find placement
+      if (it.isValid()) {
+        heapify_up(it, i, 1);
+        ++i;
+      } else {
+        // swap this iterator with the last possibly valid one
+        // lvi might be equal to i, this will not be a problem
+        this.iterators[i] = this.iterators[lvi];
+        this.iterators[lvi] = it;
+        --lvi;
+      }
+    }
+
+    this.lastValidIndex = lvi;
+    this.wentForward = true;
+
+    it0.moveToNext();
+    heapify_down(it0, 1);
+
+  }
+  
   @Override
   public void moveToPrevious() {
     if (!isValid()) {
@@ -371,6 +388,14 @@ public class FsIterator_subtypes_ordered
     return iterators[0].checkConcurrentModification().get();
   }
 
+  /* (non-Javadoc)
+   * @see org.apache.uima.cas.FSIterator#getNvc()
+   */
+  @Override
+  public T getNvc() throws NoSuchElementException {
+    return iterators[0].checkConcurrentModification().get();
+  }
+
   /* (non-Javadoc)
    * @see 
org.apache.uima.cas.FSIterator#moveTo(org.apache.uima.cas.FeatureStructure)
    */

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
 Tue Feb 16 22:35:41 2016
@@ -67,6 +67,14 @@ public class FsIterator_subtypes_snapsho
   }
 
   /* (non-Javadoc)
+   * @see org.apache.uima.cas.FSIterator#get()
+   */
+  @Override
+  public T getNvc() {
+    return snapshot[pos];
+  }
+
+  /* (non-Javadoc)
    * @see org.apache.uima.cas.FSIterator#moveToNext()
    */
   @Override
@@ -76,6 +84,11 @@ public class FsIterator_subtypes_snapsho
     }
   }
 
+  @Override
+  public void moveToNextNvc() {
+    pos++;
+  }
+
   /* (non-Javadoc)
    * @see org.apache.uima.cas.FSIterator#moveToPrevious()
    */

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_unordered.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_unordered.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_unordered.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_unordered.java
 Tue Feb 16 22:35:41 2016
@@ -42,8 +42,12 @@ public class FsIterator_subtypes_unorder
   @Override
   public T get() throws NoSuchElementException {throw new 
UnsupportedOperationException();}
   @Override
+  public T getNvc() {throw new UnsupportedOperationException();}
+  @Override
   public void moveToNext() {throw new UnsupportedOperationException();}
   @Override
+  public void moveToNextNvc() {throw new UnsupportedOperationException();}
+  @Override
   public void moveToPrevious() {throw new UnsupportedOperationException();}
   @Override
   public void moveToFirst() {}  // can't throw, should be a no-op.

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LLUnambiguousIteratorImpl.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LLUnambiguousIteratorImpl.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LLUnambiguousIteratorImpl.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LLUnambiguousIteratorImpl.java
 Tue Feb 16 22:35:41 2016
@@ -44,7 +44,7 @@ public class LLUnambiguousIteratorImpl<T
     it.moveToFirst();
     // Iterate over the input iterator.
     while (it.isValid()) {
-      FeatureStructure fs = it.next();
+      FeatureStructure fs = it.nextNvc();
       if (!(fs instanceof Annotation)) {
         continue;  // skip until get an annotation
       }

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java?rev=1730763&r1=1730762&r2=1730763&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
 Tue Feb 16 22:35:41 2016
@@ -56,6 +56,7 @@ public interface LowLevelIterator<T exte
     moveTo(ll_getIndex().getCasImpl().ll_getFSForRef(fsRef));
   }
   
+  
 
   /**
    * Return the size of the underlying index.
@@ -80,6 +81,8 @@ public interface LowLevelIterator<T exte
     @Override
     public FeatureStructure get() throws NoSuchElementException { throw new 
NoSuchElementException(); }
     @Override
+    public FeatureStructure getNvc() { throw new NoSuchElementException(); }
+    @Override
     public void moveTo(int i) {}
     @Override
     public void moveToFirst() {}
@@ -90,6 +93,8 @@ public interface LowLevelIterator<T exte
     @Override
     public void moveToNext() {}
     @Override
+    public void moveToNextNvc() {}
+    @Override
     public void moveToPrevious() {}
     @Override
     public void moveTo(FeatureStructure fs) {}


Reply via email to