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 2016/09/27 21:14:29 UTC
svn commit: r1762563 -
/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
Author: schor
Date: Tue Sep 27 21:14:28 2016
New Revision: 1762563
URL: http://svn.apache.org/viewvc?rev=1762563&view=rev
Log:
[UIMA-5115] use reworked Subiterator class for impl of FsIterator terminal with bounds.
Modified:
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java?rev=1762563&r1=1762562&r2=1762563&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java Tue Sep 27 21:14:28 2016
@@ -26,9 +26,9 @@ import java.util.Spliterator;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.FSIndex;
import org.apache.uima.cas.FSIterator;
-import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.SelectFSs;
import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
import org.apache.uima.jcas.cas.TOP;
import org.apache.uima.jcas.tcas.Annotation;
@@ -435,7 +435,7 @@ public class SelectFSs_impl <T extends T
}
- private FSIterator<T> plainFsIterator(FSIndex idx, CASImpl v) {
+ private FSIterator<T> plainFsIterator(FSIndex<T> idx, CASImpl v) {
if (null == idx) {
// no bounds, not ordered
// type could be null
@@ -445,34 +445,37 @@ public class SelectFSs_impl <T extends T
final boolean isIndexOrdered = idx.getIndexingStrategy() == FSIndex.SORTED_INDEX;
final boolean isAnnotationIndex = idx instanceof AnnotationIndex;
final AnnotationIndex ai = isAnnotationIndex ? (AnnotationIndex)idx: null;
+ FSIterator<T> it;
if (boundsUse == null) {
if (!isIndexOrdered) {
- return idx.iterator(startingFs);
+ it = idx.iterator();
} else {
// index is ordered but no bounds are being used - return plain fsIterator or maybe nonOverlapping version
- FSIterator<T> it = (isAnnotationIndex && isNonOverlapping)
- ? ai.iterator(true)
- : (isUnordered && idx instanceof FsIndex_iicp)
- ? ((FsIndex_iicp<T>)idx).iteratorUnordered()
- : idx.iterator();
- return maybeShift(maybePosition(it, startingFs, isAnnotationIndex, isTypePriority, isPositionUsesType));
+ it = (isAnnotationIndex && isNonOverlapping)
+ ? ai.iterator(true)
+ : (isUnordered && idx instanceof FsIndex_iicp)
+ ? ((FsIndex_iicp<T>)idx).iteratorUnordered()
+ : idx.iterator();
}
- }
+ if (null != startingFs) {
+ it.moveTo(startingFs);
+ }
+ } else {
// bounds in use, index must be annotation index, is ordered
-
- return (FSIterator<T>) new Subiterator<>(
- idx.iterator(),
- boundingFs,
- !isNonOverlapping,
- isEndWithinBounds,
- true, // is bounded
+ it = (FSIterator<T>) new Subiterator<>(
+ (FSIterator<AnnotationFS>)idx.iterator(),
+ boundingFs,
+ !isNonOverlapping, // ambiguous
+ isEndWithinBounds, // strict
+ true, // isBounded
isTypePriority,
isPositionUsesType,
isSkipEquals,
- v.indexRepository.getAnnotationFsComparator());
+ v.indexRepository.getAnnotationFsComparator());
+ }
+ return maybeShift(it);
}
-
-
+
@Override
public Iterator<T> iterator() {
return null;
@@ -555,6 +558,7 @@ public class SelectFSs_impl <T extends T
}
return it;
}
+
/********************************************
* The methods below are alternatives
* to the methods above, that combine