Author: schor
Date: Thu Jul 19 19:34:04 2018
New Revision: 1836297
URL: http://svn.apache.org/viewvc?rev=1836297&view=rev
Log:
[UIMA-5840] fix / improve generics
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIndex.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.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
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/OrderedFsSet_array.java
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
Thu Jul 19 19:34:04 2018
@@ -434,13 +434,13 @@ public interface SelectFSs<T extends Fea
* @param <N> the generic type argument of the elements of the list
* @return a List object whose elements represent the selection.
*/
- <N extends T> List<N> asList();
+ List<T> asList();
/**
* @param clazz the class of the type of the elements
* @param <N> the generic type argument of the elements of the array
* @return a Array object representation of the elements of the selection.
*/
- <N extends T> N[] asArray(Class<N> clazz);
+ T[] asArray(Class<? super T> clazz);
// Spliterator<T> spliterator(); // inherited, not needed here
// returning one item
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
Thu Jul 19 19:34:04 2018
@@ -21,12 +21,13 @@ package org.apache.uima.cas.impl;
import java.util.Iterator;
-import org.apache.uima.jcas.cas.TOP;
+import org.apache.uima.cas.FeatureStructure;
/**
* common APIs supporting the copy on write aspect of index parts
*/
-public interface CopyOnWriteIndexPart<T> {
+// extend FeatureStructure because users have type specs like this
+public interface CopyOnWriteIndexPart<T extends FeatureStructure> {
void makeReadOnlyCopy();
@@ -52,5 +53,5 @@ public interface CopyOnWriteIndexPart<T>
* @param startingIndexInTarget the starting index in the target array
* @return startingIndexInTarget + size
*/
- int copyToArray(TOP[] target, int startingIndexInTarget);
+ int copyToArray(T[] target, int startingIndexInTarget);
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
Thu Jul 19 19:34:04 2018
@@ -1617,7 +1617,7 @@ public class FSIndexRepositoryImpl imple
int i = 0;
for (CopyOnWriteIndexPart<T> idx : indexes) {
- i = idx.copyToArray(r, i);
+ i = idx.copyToArray((T[]) r, i);
}
return r;
}
@@ -1630,7 +1630,7 @@ public class FSIndexRepositoryImpl imple
int i = 0;
for (CopyOnWriteIndexPart<T> idx : indexes) {
- i = idx.copyToArray((TOP[]) r, i);
+ i = idx.copyToArray( (T[]) r, i);
}
return r;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FilteredIterator.java
Thu Jul 19 19:34:04 2018
@@ -19,6 +19,7 @@
package org.apache.uima.cas.impl;
+import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Comparator;
@@ -164,13 +165,14 @@ class FilteredIterator<T extends Feature
}
@Override
- public FeatureStructure[] getArray() {
+ public T[] getArray(Class<? super T> clazz) {
FilteredIterator<T> it2 = new FilteredIterator<T>(it, cons);
ArrayList<FeatureStructure> items = new ArrayList<>();
while (it2.hasNext()) {
items.add(it2.nextNvc());
}
- return items.toArray(new FeatureStructure[items.size()]);
+ T[] r = (T[]) Array.newInstance(clazz, items.size());
+ return items.toArray(r);
}
// /* (non-Javadoc)
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
Thu Jul 19 19:34:04 2018
@@ -205,18 +205,18 @@ public class FsIndex_bag<T extends Featu
*/
@Override
public LowLevelIterator<T> iterator(boolean orderNotNeeded, boolean
ignoreType) {
- CopyOnWriteIndexPart cow_index_wrapper = getNonNullCow();
+ CopyOnWriteIndexPart<T> cow_index_wrapper = getNonNullCow();
return casImpl.inPearContext()
? new FsIterator_bag_pear<>(this, type, cow_index_wrapper)
: new FsIterator_bag <>(this, type, cow_index_wrapper);
}
@Override
- protected CopyOnWriteIndexPart createCopyOnWriteIndexPart() {
+ protected CopyOnWriteIndexPart<T> createCopyOnWriteIndexPart() {
if (CASImpl.traceCow) {
this.casImpl.traceCowCopy(this);
}
- return new CopyOnWriteObjHashSet<TOP>(index);
+ return new CopyOnWriteObjHashSet(index);
}
@Override
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java
Thu Jul 19 19:34:04 2018
@@ -67,6 +67,9 @@ public abstract class FsIndex_singletype
// A reference to the low-level CAS.
final protected CASImpl casImpl;
+
+ // comparators are over TOP since it's allowed to compare
+ // items with types in the superchain of T (up to TOP)
/**
* comparator for an index, passed in as an argument to the constructor
*/
@@ -522,8 +525,8 @@ public abstract class FsIndex_singletype
flush();
}
- protected CopyOnWriteIndexPart getNonNullCow() {
- CopyOnWriteIndexPart n = getCopyOnWriteIndexPart();
+ protected CopyOnWriteIndexPart<T> getNonNullCow() {
+ CopyOnWriteIndexPart<T> n = getCopyOnWriteIndexPart();
if (n != null) {
if (CASImpl.traceCow) {
this.casImpl.traceCowReinit("reuse", this);
@@ -550,7 +553,7 @@ public abstract class FsIndex_singletype
return (wr_cow == null) ? null : wr_cow.get();
}
- protected abstract CopyOnWriteIndexPart createCopyOnWriteIndexPart();
+ protected abstract CopyOnWriteIndexPart<T> createCopyOnWriteIndexPart();
/**
* Called just before modifying an index if wr_cow has a value, tell that
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_backwards.java
Thu Jul 19 19:34:04 2018
@@ -146,13 +146,13 @@ class FsIterator_backwards<T extends Fea
}
@Override
- public FeatureStructure[] getArray() {
- FeatureStructure[] a = it.getArray();
+ public T[] getArray(Class<? super T> clazz) {
+ T[] a = it.getArray(clazz);
int len = a.length;
int len2 = len >> 1;
int len1 = len - 1;
for (int i = 0, i2 = len1; i < len2; i++, i2--) {
- FeatureStructure t = a[i];
+ T t = a[i];
a[i] = a[i2];
a[i2] = t;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_bag.java
Thu Jul 19 19:34:04 2018
@@ -19,8 +19,8 @@
package org.apache.uima.cas.impl;
+import java.lang.reflect.Array;
import java.util.Comparator;
-import java.util.NoSuchElementException;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.uima.UIMAFramework;
@@ -33,7 +33,7 @@ class FsIterator_bag<T extends FeatureSt
private static final AtomicInteger moveToCount = new AtomicInteger(0);
- protected CopyOnWriteObjHashSet<TOP> bag;
+ protected CopyOnWriteObjHashSet<T> bag;
final protected FsIndex_bag<T> fsBagIndex; // just an optimization, is == to
fsLeafIndexImpl from super class, allows dispatch w/o casting
private int position = -1;
@@ -42,16 +42,16 @@ class FsIterator_bag<T extends FeatureSt
- FsIterator_bag(FsIndex_bag<T> fsBagIndex, TypeImpl ti, CopyOnWriteIndexPart
cow_wrapper) {
+ FsIterator_bag(FsIndex_bag<T> fsBagIndex, TypeImpl ti,
CopyOnWriteIndexPart<T> cow_wrapper) {
super(ti);
this.fsBagIndex = fsBagIndex; // need for copy()
- bag = (CopyOnWriteObjHashSet<TOP>) cow_wrapper;
+ bag = (CopyOnWriteObjHashSet<T>) cow_wrapper;
moveToFirst();
}
public boolean maybeReinitIterator() {
if (!bag.isOriginal()) {
- bag = (CopyOnWriteObjHashSet<TOP>) fsBagIndex.getNonNullCow();
+ bag = (CopyOnWriteObjHashSet<T>) fsBagIndex.getNonNullCow();
return true;
}
return false;
@@ -186,8 +186,8 @@ class FsIterator_bag<T extends FeatureSt
}
@Override
- public FeatureStructure[] getArray() {
- TOP[] a = new TOP[size()];
+ public T[] getArray(Class<? super T> clazz) {
+ T[] a = (T[]) Array.newInstance(clazz, size());
bag.copyToArray(a, 0);
return a;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_limited.java
Thu Jul 19 19:34:04 2018
@@ -19,7 +19,9 @@
package org.apache.uima.cas.impl;
+import java.util.Arrays;
import java.util.Comparator;
+
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.jcas.cas.TOP;
@@ -141,12 +143,10 @@ class FsIterator_limited<T extends Featu
}
@Override
- public FeatureStructure[] getArray() {
- FeatureStructure[] a = iterator.getArray();
+ public T[] getArray(Class<? super T> clazz) {
+ T[] a = iterator.getArray(clazz);
if (a.length > limit) {
- FeatureStructure[] a2 = new FeatureStructure[limit];
- System.arraycopy(a, 0, a2, 0, limit);
- return a2;
+ return Arrays.copyOf(a, limit);
}
return a;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_multiple_indexes.java
Thu Jul 19 19:34:04 2018
@@ -19,6 +19,7 @@
package org.apache.uima.cas.impl;
+import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Comparator;
@@ -193,11 +194,11 @@ public abstract class FsIterator_multipl
}
@Override
- public FeatureStructure[] getArray() {
- FeatureStructure[] a = new FeatureStructure[size()];
+ public T[] getArray(Class<? super T> clazz) {
+ T[] a = (T[]) Array.newInstance(clazz, size());
int destPos = 0;
for (LowLevelIterator<T> it : nonEmptyIterators) {
- FeatureStructure[] p = it.getArray();
+ T[] p = it.getArray(clazz);
System.arraycopy(p, 0, a, destPos, p.length);
destPos += p.length;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_set_sorted2.java
Thu Jul 19 19:34:04 2018
@@ -19,6 +19,7 @@
package org.apache.uima.cas.impl;
+import java.lang.reflect.Array;
import java.util.Comparator;
import org.apache.uima.cas.FeatureStructure;
@@ -300,8 +301,8 @@ class FsIterator_set_sorted2<T extends F
}
@Override
- public FeatureStructure[] getArray() {
- TOP[] a = new TOP[size()];
+ public T[] getArray(Class<? super T> clazz) {
+ T[] a = (T[]) Array.newInstance(clazz, size());
this.ofsa.copyToArray(a, 0);
return a;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
Thu Jul 19 19:34:04 2018
@@ -263,7 +263,7 @@ public class FsIterator_subtypes_snapsho
@Override
- public FeatureStructure[] getArray() {
+ public T[] getArray(Class<? super T> clazz) {
return snapshot;
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIndex.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIndex.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIndex.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIndex.java
Thu Jul 19 19:34:04 2018
@@ -22,7 +22,6 @@ package org.apache.uima.cas.impl;
import java.util.Comparator;
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;
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/LowLevelIterator.java
Thu Jul 19 19:34:04 2018
@@ -175,7 +175,7 @@ public interface LowLevelIterator<T exte
/**
* @return an array representing the collection of items the iterator would
return
*/
- default FeatureStructure[] getArray() {
+ default T[] getArray(Class<? super T> clazz) {
throw new UnsupportedOperationException();
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
Thu Jul 19 19:34:04 2018
@@ -652,7 +652,7 @@ public class SelectFSs_impl <T extends F
private FSIterator<T> make_or_copy_snapshot(LowLevelIterator<T>
baseIterator, boolean bkwd) {
FSIterator<T> it;
- T[] a = (T[]) asArray(baseIterator); // array is in forward order because
+ T[] a = (T[]) asArray(baseIterator, FeatureStructure.class); // array is
in forward order because
// it's produced by a backwards
iterator, but then the array is reversed
it = new FsIterator_subtypes_snapshot<T>(
a,
@@ -877,54 +877,40 @@ public class SelectFSs_impl <T extends F
*
*/
@Override
- public <N extends T> List<N> asList() {
+ public List<T> asList() {
- return new AbstractList<N>() {
-
- /**
- * iterator used for two purposes:
- * - as underlying impl for listIterator
- * - to compute the size
- */
- private final LowLevelIterator<T> it = (LowLevelIterator<T>)
fsIterator();
+ return new AbstractList<T>() {
+
+ private final T[] a = asArray((LowLevelIterator<T>) fsIterator());
- N[] a = asArrayFs(it);
-
@Override
- public N get(int i) {
+ public T get(int i) {
return a[i];
}
@Override
public int size() {
- return it.size();
+ return a.length;
}
};
-
-
-
}
/* (non-Javadoc)
* @see org.apache.uima.cas.SelectFSs#asArray()
*/
@Override
- public <N extends T> N[] asArray(Class<N> clazz) {
- return asArray((LowLevelIterator<T>)fsIterator());
- }
-
- private <N extends T> N[] asArrayFs(LowLevelIterator<T> it) {
- return (N[]) ((LowLevelIterator<T>)it).getArray();
+ public T[] asArray(Class<? super T> clazz) {
+ return asArray((LowLevelIterator<T>)fsIterator(), clazz);
}
- private <N extends T> N[] asArray(LowLevelIterator<T> it) {
- return (N[]) ((LowLevelIterator<T>)it).getArray();
+ private T[] asArray(LowLevelIterator<T> it, Class<? super T> clazz) {
+ return ((LowLevelIterator<T>)it).getArray(clazz);
}
-// private FeatureStructure[] asArray(FSIterator<T> it) {
-// return asArray(it, FeatureStructure.class);
-// }
+ private T[] asArray(LowLevelIterator<T> it) {
+ return asArray(it, (Class<? super T>) ((TypeImpl)it.getType()).javaClass);
+ }
private Annotation makePosAnnot(int begin, int end) {
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=1836297&r1=1836296&r2=1836297&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
Thu Jul 19 19:34:04 2018
@@ -23,14 +23,12 @@ import java.util.NoSuchElementException;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.impl.CopyOnWriteIndexPart;
-import org.apache.uima.internal.util.ObjHashSet;
-import org.apache.uima.jcas.cas.TOP;
/**
* implements ObjHashSet partially, for iterator use
*/
-public class CopyOnWriteObjHashSet<T> implements CopyOnWriteIndexPart {
+public class CopyOnWriteObjHashSet<T extends FeatureStructure> implements
CopyOnWriteIndexPart<T>{
private ObjHashSet<T> ohs;
@@ -186,11 +184,11 @@ public class CopyOnWriteObjHashSet<T> im
* @see
org.apache.uima.cas.impl.CopyOnWriteIndexPart#copyToArray(org.apache.uima.jcas.cas.TOP[],
int)
*/
@Override
- public int copyToArray(TOP[] target, int startingIndexInTarget) {
+ public int copyToArray(T[] target, int startingIndexInTarget) {
Iterator<T> it = iterator();
int i = startingIndexInTarget;
while (it.hasNext()) {
- target[i++] = (TOP) it.next();
+ target[i++] = it.next();
}
return i;
}
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=1836297&r1=1836296&r2=1836297&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
Thu Jul 19 19:34:04 2018
@@ -21,32 +21,32 @@ package org.apache.uima.internal.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
+import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.impl.CopyOnWriteIndexPart;
-import org.apache.uima.jcas.cas.TOP;
/**
* implements OrderedFsSet_array partially, for iterator use
*/
-public class CopyOnWriteOrderedFsSet_array implements CopyOnWriteIndexPart {
+public class CopyOnWriteOrderedFsSet_array<T extends FeatureStructure>
implements CopyOnWriteIndexPart<T> {
- private OrderedFsSet_array<TOP> set;
+ private OrderedFsSet_array<T> set;
final public int a_firstUsedslot;
final public int a_nextFreeslot;
- final public OrderedFsSet_array<TOP> original;
+ final public OrderedFsSet_array<T> original;
final private int original_size;
- public TOP[] a; // derived from "set" above
+ public T[] a; // derived from "set" above
- public CopyOnWriteOrderedFsSet_array(OrderedFsSet_array original) {
+ public CopyOnWriteOrderedFsSet_array(OrderedFsSet_array<T> original) {
this.set = original;
this.original = original;
// this.comparatorNoTypeWithoutID = original.comparatorNoTypeWithoutID;
// this.comparatorNoTypeWithID = original.comparatorNoTypeWithID;
this.a_firstUsedslot = original.a_firstUsedslot;
this.a_nextFreeslot = original.a_nextFreeslot;
- this.a = original.a;
+ this.a = (T[]) original.a;
this.original_size = original.size();
}
@@ -56,8 +56,8 @@ public class CopyOnWriteOrderedFsSet_arr
*/
@Override
public void makeReadOnlyCopy() {
- this.set = new OrderedFsSet_array<TOP>(set, true); // true = make read
only copy
- this.a = set.a;
+ this.set = new OrderedFsSet_array<T>(set, true); // true = make read only
copy
+ this.a = (T[]) set.a;
}
/* (non-Javadoc)
@@ -110,7 +110,7 @@ public class CopyOnWriteOrderedFsSet_arr
return set.toString();
}
- public OrderedFsSet_array<TOP> getOfsa() {
+ public OrderedFsSet_array<T> getOfsa() {
return set;
}
@@ -118,8 +118,8 @@ public class CopyOnWriteOrderedFsSet_arr
* @see java.lang.Iterable#iterator()
*/
@Override
- public Iterator<TOP> iterator() {
- return new Iterator<TOP>() {
+ public Iterator<T> iterator() {
+ return new Iterator<T>() {
int pos = a_firstUsedslot;
@@ -129,11 +129,11 @@ public class CopyOnWriteOrderedFsSet_arr
}
@Override
- public TOP next() {
+ public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
- return a[pos++];
+ return (T) a[pos++];
}
};
}
@@ -142,7 +142,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @see
org.apache.uima.cas.impl.CopyOnWriteIndexPart#copyToArray(org.apache.uima.jcas.cas.TOP[],
int)
*/
@Override
- public int copyToArray(TOP[] target, int startingIndexInTarget) {
+ public int copyToArray(T[] target, int startingIndexInTarget) {
System.arraycopy(a, a_firstUsedslot, target, startingIndexInTarget,
size());
return startingIndexInTarget + size();
}
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/OrderedFsSet_array.java
URL:
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/OrderedFsSet_array.java?rev=1836297&r1=1836296&r2=1836297&view=diff
==============================================================================
---
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/OrderedFsSet_array.java
(original)
+++
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/OrderedFsSet_array.java
Thu Jul 19 19:34:04 2018
@@ -67,8 +67,10 @@ public class OrderedFsSet_array<T extend
*/
int a_nextFreeslot = 0;
int a_firstUsedslot = 0;
-
- final private Comparator<TOP> comparatorNoTypeWithID;
+ // comparators are over TOP, not "T", because it's allowed to compare
+ // items which are supertypes of the index's items
+ // e.g. compare something of type Annotation with "Token"
+ final private Comparator<TOP> comparatorNoTypeWithID;
final private Comparator<TOP> comparatorNoTypeWithoutID;
private int maxSize = 0; // managing shrinking
@@ -189,9 +191,7 @@ public class OrderedFsSet_array<T extend
? a.length + multiplication_limit
: (a.length << 1);
- TOP[] aa = new TOP[newSize];
- System.arraycopy(a, 0, aa, 0, a.length);
- a = aa;
+ a = Arrays.copyOf(a, newSize);
}
/**
@@ -336,7 +336,7 @@ public class OrderedFsSet_array<T extend
* @return - the index of the found item, or if not found, the (-index) -1
of the
* position one more than where the item would go
*/
- public static int binarySearch(
+ public int binarySearch(
TOP[] _a,
int start,
int end,
@@ -549,7 +549,7 @@ public class OrderedFsSet_array<T extend
b.append(",\n");
}
if (i != null) {
- b.append(i.toShortString());
+ b.append(((TOP)i).toShortString());
} else {
b.append("null");
}