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/19 20:24:02 UTC
svn commit: r1761499 - in
/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima:
cas/impl/ internal/util/
Author: schor
Date: Mon Sep 19 20:24:02 2016
New Revision: 1761499
URL: http://svn.apache.org/viewvc?rev=1761499&view=rev
Log:
[UIMA-5111] refactor for common code
Added:
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
Modified:
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_flat.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_set_sorted.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.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/internal/util/CopyOnWriteObjHashSet.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java
Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java?rev=1761499&view=auto
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java (added)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CopyOnWriteIndexPart.java Mon Sep 19 20:24:02 2016
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.cas.impl;
+
+/**
+ * common APIs supporting the copy on write aspect of index parts
+ */
+public interface CopyOnWriteIndexPart {
+
+ void makeCopy();
+
+}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_bag.java Mon Sep 19 20:24:02 2016
@@ -19,7 +19,6 @@
package org.apache.uima.cas.impl;
-import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.List;
@@ -28,7 +27,6 @@ import org.apache.uima.cas.FeatureStruct
import org.apache.uima.cas.Type;
import org.apache.uima.cas.admin.FSIndexComparator;
import org.apache.uima.internal.util.CopyOnWriteObjHashSet;
-import org.apache.uima.internal.util.CopyOnWriteOrderedFsSet_array;
import org.apache.uima.internal.util.ObjHashSet;
import org.apache.uima.jcas.cas.TOP;
@@ -47,16 +45,16 @@ public class FsIndex_bag<T extends Featu
final private ObjHashSet<TOP> index;
- /**
- * Copy on write, initially null
- * Iterator creation initializes (if not null).
- * Modification to index:
- * call cow.makeCopy();
- * set cow = null
- * do the modification
- * index clear/flush - set to null;
- */
- private WeakReference<CopyOnWriteObjHashSet<TOP>> cow = null;
+// /**
+// * Copy on write, initially null
+// * Iterator creation initializes (if not null).
+// * Modification to index:
+// * call cow.makeCopy();
+// * set cow = null
+// * do the modification
+// * index clear/flush - set to null;
+// */
+// private WeakReference<CopyOnWriteObjHashSet<TOP>> cow = null;
FsIndex_bag(CASImpl cas, Type type, int initialSize, int indexType, FSIndexComparator comparatorForIndexSpecs) {
super(cas, type, indexType, cleanUpComparator(comparatorForIndexSpecs, cas));
@@ -80,9 +78,10 @@ public class FsIndex_bag<T extends Featu
return newComp;
}
+ @Override
public void flush() {
+ super.flush();
index.clear();
- cow = null;
}
@Override
@@ -144,6 +143,7 @@ public class FsIndex_bag<T extends Featu
* FSs in the index.
* @return <code>true</code> if the index contains such an element.
*/
+ @Override
public boolean contains(FeatureStructure fs) {
return this.index.contains(fs);
}
@@ -170,6 +170,7 @@ public class FsIndex_bag<T extends Featu
/**
* @see org.apache.uima.cas.FSIndex#size()
*/
+ @Override
public int size() {
return this.index.size();
}
@@ -189,6 +190,7 @@ public class FsIndex_bag<T extends Featu
return deleteFS((T) casImpl.getFsFromId_checked(fsRef));
}
+ @Override
public int hashCode() {
throw new UnsupportedOperationException();
}
@@ -203,43 +205,48 @@ public class FsIndex_bag<T extends Featu
*/
@Override
public FSIterator<T> iterator() {
- if (null == cow || null == cow.get()) {
- cow = new WeakReference<>(new CopyOnWriteObjHashSet<TOP>(index));
- }
+ setupIteratorCopyOnWrite();
return casImpl.inPearContext()
? new FsIterator_bag_pear<>(this, type)
: new FsIterator_bag <>(this, type);
}
- ObjHashSet<TOP> getObjHashSet() {
- return index;
- }
-
- private void maybeCopy() {
- if (cow != null) {
- CopyOnWriteObjHashSet<TOP> v = cow.get();
- if (v != null) {
- v.makeCopy();
- }
- cow = null;
- }
+ @Override
+ protected CopyOnWriteIndexPart createCopyOnWriteIndexPart() {
+ return new CopyOnWriteObjHashSet<TOP>(index);
}
- /**
- * Called when iterator created, and when a reset concur mod happens
- * @return cow to use in iterator
- */
- public CopyOnWriteObjHashSet<TOP> getCow() {
- if (cow != null) {
- CopyOnWriteObjHashSet<TOP> n = cow.get();
- if (n != null) {
- return n;
- }
- }
+// ObjHashSet<TOP> getObjHashSet() {
+// return index;
+// }
- // null means index updated since iterator was created, need to make new cow and use it
- CopyOnWriteObjHashSet<TOP> n = new CopyOnWriteObjHashSet<TOP>(index);
- cow = new WeakReference<>(n);
- return n;
- }
+
+// private void maybeCopy() {
+// if (cow != null) {
+// CopyOnWriteObjHashSet<TOP> v = cow.get();
+// if (v != null) {
+// v.makeCopy();
+// }
+// cow = null;
+// }
+// }
+
+// /**
+// * Called when iterator created, and when a reset concur mod happens
+// * @return cow to use in iterator
+// */
+// public CopyOnWriteObjHashSet<TOP> getNonNullCow() {
+// if (cow != null) {
+// CopyOnWriteObjHashSet<TOP> n = cow.get();
+// if (n != null) {
+// return n;
+// }
+// }
+//
+// // null means index updated since iterator was created, need to make new cow and use it
+// CopyOnWriteObjHashSet<TOP> n = new CopyOnWriteObjHashSet<TOP>(index);
+// cow = new WeakReference<>(n);
+// return n;
+// }
+
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_flat.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_flat.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_flat.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_flat.java Mon Sep 19 20:24:02 2016
@@ -29,6 +29,7 @@ import java.util.List;
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.internal.util.IntVector;
+import org.apache.uima.internal.util.Misc;
/**
* Common part of flattened indexes, used for both snapshot iterators and
@@ -36,7 +37,7 @@ import org.apache.uima.internal.util.Int
*
* @param <T> the Java class type for this index
*/
-public class FsIndex_flat<T extends FeatureStructure> extends FsIndex_singletype<T> {
+public class FsIndex_flat<T extends FeatureStructure> extends FsIndex_singletype<T> implements CopyOnWriteIndexPart {
// The index, an array.
final private FeatureStructure[] indexedFSs;
@@ -144,6 +145,7 @@ public class FsIndex_flat<T extends Feat
/**
* @see org.apache.uima.cas.FSIndex#size()
*/
+ @Override
public int size() {
return this.indexedFSs.length;
}
@@ -151,6 +153,7 @@ public class FsIndex_flat<T extends Feat
/**
* @see org.apache.uima.cas.impl.FsIndex_singletype#deleteFS(T)
*/
+ @Override
public boolean deleteFS(T fs) {
throw new UnsupportedOperationException();
}
@@ -176,4 +179,20 @@ public class FsIndex_flat<T extends Feat
return comparator.compare(fs1, fs2);
}
+ @Override
+ protected CopyOnWriteIndexPart createCopyOnWriteIndexPart() {
+ Misc.internalError(); // should never be called
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.cas.impl.CopyOnWriteIndexPart#makeCopy()
+ */
+ @Override
+ public void makeCopy() {
+ Misc.internalError(); // should never be called
+ }
+
+
+
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_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/FsIndex_set_sorted.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_set_sorted.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_set_sorted.java Mon Sep 19 20:24:02 2016
@@ -19,7 +19,6 @@
package org.apache.uima.cas.impl;
-import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
@@ -30,7 +29,6 @@ import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.admin.FSIndexComparator;
-import org.apache.uima.internal.util.CopyOnWriteObjHashSet;
import org.apache.uima.internal.util.CopyOnWriteOrderedFsSet_array;
import org.apache.uima.internal.util.OrderedFsSet_array;
import org.apache.uima.jcas.cas.TOP;
@@ -107,19 +105,19 @@ public class FsIndex_set_sorted<T extend
// final private TreeSet<FeatureStructure> indexedFSs;
final private OrderedFsSet_array indexedFSs;
- /**
- * Copy on write, initially null
- * Iterator creation initializes (if not null), and uses.
- * Modification to index:
- * call cow.makeCopy();
- * set cow = null
- * do the modification
- * index clear/flush - set to null;
- *
- * Weak ref so that after iterator is GC'd, and no ref's exist, this becomes null, so that
- * future mods no longer need to do extra work.
- */
- private WeakReference<CopyOnWriteOrderedFsSet_array> cow = null;
+// /**
+// * Copy on write, initially null
+// * Iterator creation initializes (if not null), and uses.
+// * Modification to index:
+// * call cow.makeCopy();
+// * set cow = null
+// * do the modification
+// * index clear/flush - set to null;
+// *
+// * Weak ref so that after iterator is GC'd, and no ref's exist, this becomes null, so that
+// * future mods no longer need to do extra work.
+// */
+// private WeakReference<CopyOnWriteOrderedFsSet_array> cow = null;
final private Comparator<TOP> comparatorWithID;
final private Comparator<TOP> comparatorWithoutID;
@@ -173,7 +171,7 @@ public class FsIndex_set_sorted<T extend
@Override
public void flush() {
- this.cow = null;
+ super.flush();
this.indexedFSs.clear();
// this.itemsToBeAdded.clear();
// this.largestItemNotYetAdded = null;
@@ -348,37 +346,41 @@ public class FsIndex_set_sorted<T extend
@Override
public FSIterator<T> iterator() {
- if (cow == null || null == cow.get()) {
- cow = new WeakReference<>(new CopyOnWriteOrderedFsSet_array(this.indexedFSs));
- }
+ setupIteratorCopyOnWrite();
return casImpl.inPearContext()
? new FsIterator_set_sorted_pear<>(this, type, this)
: new FsIterator_set_sorted <>(this, type, this);
}
- private void maybeCopy() {
- if (cow != null) {
- CopyOnWriteOrderedFsSet_array v = cow.get();
- if (v != null) {
- v.makeCopy();
- }
- cow = null;
- }
+ @Override
+ protected CopyOnWriteIndexPart createCopyOnWriteIndexPart() {
+ return new CopyOnWriteOrderedFsSet_array(indexedFSs);
}
- public CopyOnWriteOrderedFsSet_array getCow() {
- if (cow != null) {
- CopyOnWriteOrderedFsSet_array n = cow.get();
- if (n != null) {
- return n;
- }
- }
-
- // null means index updated since iterator was created, need to make new cow and use it
- CopyOnWriteOrderedFsSet_array n = new CopyOnWriteOrderedFsSet_array(indexedFSs);
- cow = new WeakReference<>(n);
- return n;
- }
+// private void maybeCopy() {
+// if (cow != null) {
+// CopyOnWriteOrderedFsSet_array v = cow.get();
+// if (v != null) {
+// v.makeCopy();
+// }
+// cow = null;
+// }
+// }
+
+// public CopyOnWriteOrderedFsSet_array getNonNullCow() {
+// if (cow != null) {
+// CopyOnWriteOrderedFsSet_array n = cow.get();
+// if (n != null) {
+// return n;
+// }
+// }
+//
+// // null means index updated since iterator was created, need to make new cow and use it
+// CopyOnWriteOrderedFsSet_array n = new CopyOnWriteOrderedFsSet_array(indexedFSs);
+// cow = new WeakReference<>(n);
+// return n;
+// }
+
// synchronized void maybeProcessBulkAdds() {
// final int sz = itemsToBeAdded.size();
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIndex_singletype.java Mon Sep 19 20:24:02 2016
@@ -63,7 +63,7 @@ public abstract class FsIndex_singletype
/*********** Info about Index Comparator (not used for bag ***********
* Index into these arrays is the key number (indexes can have multiple keys)
- */
+ **********************************************************************/
// For each key, the int code of the type of that key.
final private Object[] keys; // either a FeatImpl or a LinearTypeOrder;
@@ -75,6 +75,20 @@ public abstract class FsIndex_singletype
final private int typeCode;
+ /**
+ * common copy on write instance or null; starts out as null
+ * Iterator creation initializes (if not null).
+ * A subsequent Modification to index, if this is not null:
+ * call cow.makeCopy();
+ * set wr_cow = null
+ * do the modification
+ * index clear/flush - set to null;
+ *
+ * Weak ref so that after iterator is GC'd, and no ref's exist, this becomes null, so that
+ * future mods no longer need to do extra work.
+ */
+ protected WeakReference<CopyOnWriteIndexPart> wr_cow = null;
+
@Override
public String toString() {
@@ -162,9 +176,18 @@ public abstract class FsIndex_singletype
*/
abstract boolean deleteFS(T fs);
+ /**
+ * Common part of iterator creation
+ */
+ protected void setupIteratorCopyOnWrite() {
+ if (null == wr_cow || null == wr_cow.get()) {
+ wr_cow = new WeakReference<>(createCopyOnWriteIndexPart());
+ }
+ }
+
@Override
public FSIterator<T> iterator(FeatureStructure initialPositionFs) {
- FSIterator<T> fsIt = (FSIterator<T>) iterator();
+ FSIterator<T> fsIt = iterator();
fsIt.moveTo(initialPositionFs);
return fsIt;
}
@@ -364,4 +387,42 @@ public abstract class FsIndex_singletype
}
flush();
}
+
+ protected CopyOnWriteIndexPart getNonNullCow() {
+ if (wr_cow != null) {
+ CopyOnWriteIndexPart n = wr_cow.get();
+ if (n != null) {
+ return n;
+ }
+ }
+
+ // null means index updated since iterator was created, need to make new cow and use it
+ CopyOnWriteIndexPart n = createCopyOnWriteIndexPart(); //new CopyOnWriteObjHashSet<TOP>(index);
+ wr_cow = new WeakReference<>(n);
+ return n;
+ }
+
+ protected abstract CopyOnWriteIndexPart createCopyOnWriteIndexPart();
+
+ /**
+ * Called just before modifying an index
+ * if wr_cow has a value,
+ * tell that value to create a preserving copy of the index part, and
+ * set wr_cow to null
+ */
+ protected void maybeCopy() {
+ if (wr_cow != null) {
+ CopyOnWriteIndexPart v = wr_cow.get();
+ if (v != null) {
+ v.makeCopy();
+ }
+ wr_cow = null;
+ }
+ }
+
+ @Override
+ public void flush() {
+ wr_cow = null;
+ }
+
}
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=1761499&r1=1761498&r2=1761499&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 Mon Sep 19 20:24:02 2016
@@ -23,7 +23,6 @@ import java.util.NoSuchElementException;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.internal.util.CopyOnWriteObjHashSet;
-import org.apache.uima.internal.util.ObjHashSet;
import org.apache.uima.jcas.cas.TOP;
class FsIterator_bag<T extends FeatureStructure> extends FsIterator_singletype<T> {
@@ -62,6 +61,7 @@ class FsIterator_bag<T extends FeatureSt
throw new NoSuchElementException();
}
+ @Override
public T getNvc() {
checkConcurrentModification();
return (T) bag.get(position);
@@ -72,7 +72,7 @@ class FsIterator_bag<T extends FeatureSt
*/
@Override
public void moveToFirst() {
- bag = fsBagIndex.getCow();
+ bag = (CopyOnWriteObjHashSet<TOP>) fsBagIndex.getNonNullCow();
resetConcurrentModification();
isGoingForward = true;
position = (bag.size() == 0) ? -1 : bag.moveToNextFilled(0);
@@ -84,7 +84,7 @@ class FsIterator_bag<T extends FeatureSt
*/
@Override
public void moveToLast() {
- bag = fsBagIndex.getCow();
+ bag = (CopyOnWriteObjHashSet<TOP>) fsBagIndex.getNonNullCow();
resetConcurrentModification();
isGoingForward = false;
position = (bag.size() == 0) ? -1 : bag.moveToPreviousFilled(bag.getCapacity() -1);
@@ -134,7 +134,7 @@ class FsIterator_bag<T extends FeatureSt
*/
@Override
public void moveTo(FeatureStructure fs) {
- bag = fsBagIndex.getCow();
+ bag = (CopyOnWriteObjHashSet<TOP>) fsBagIndex.getNonNullCow();
resetConcurrentModification();
position = bag.moveTo(fs);
}
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=1761499&r1=1761498&r2=1761499&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 Mon Sep 19 20:24:02 2016
@@ -59,9 +59,7 @@ class FsIterator_set_sorted<T extends Fe
FsIterator_set_sorted(FsIndex_set_sorted<T> fsSetSortIndex, TypeImpl ti, Comparator<FeatureStructure> comp) {
super(ti, comp);
this.fsSetSortIndex = fsSetSortIndex;
- this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getCow(); // cast to TOP to allow keys outside of range of returned values
- iterator = (Iterator<T>) navSet.iterator(); // can't use fsSortIndex.iterator - that recursively calls this
- resetConcurrentModification(); // follow create of iterator, which, in turn, does any pending batch processing
+ moveToFirst();
}
@Override
@@ -70,7 +68,7 @@ class FsIterator_set_sorted<T extends Fe
@Override
public void moveToFirst() {
// fsSetSortIndex.maybeProcessBulkAdds();
- this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getCow();
+ this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getNonNullCow();
iterator = (Iterator<T>) navSet.iterator(); // in case iterator was reverse, etc.
resetConcurrentModification(); // follow create of iterator, which, in turn, does any pending batch processing
isGoingForward = true;
@@ -80,7 +78,7 @@ class FsIterator_set_sorted<T extends Fe
@Override
public void moveToLast() {
// fsSetSortIndex.maybeProcessBulkAdds();
- this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getCow();
+ this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getNonNullCow();
iterator = (Iterator<T>) navSet.descendingIterator();
resetConcurrentModification(); // follow create of iterator, which, in turn, does any pending batch processing
isGoingForward = false;
@@ -195,7 +193,7 @@ class FsIterator_set_sorted<T extends Fe
isGoingForward = true;
isCurrentElementFromLastGet = false;
currentElement = null;
- this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getCow();
+ this.navSet = (NavigableSet<TOP>) fsSetSortIndex.getNonNullCow();
// fsSetSortIndex.maybeProcessBulkAdds(); // not needed, always done due to previous size() call when creating iterator
Iterator<T> it = (Iterator<T>) navSet.headSet(fs, false).descendingIterator(); // may have a bunch of equal (using withoutID compare) at end
// last element in headSet is 1 before the one LE fs.
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteObjHashSet.java Mon Sep 19 20:24:02 2016
@@ -21,12 +21,13 @@ package org.apache.uima.internal.util;
import java.util.Iterator;
import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.impl.CopyOnWriteIndexPart;
/**
* implements ObjHashSet partially, for iterator use
*/
-public class CopyOnWriteObjHashSet<T> {
+public class CopyOnWriteObjHashSet<T> implements CopyOnWriteIndexPart {
private ObjHashSet<T> ohs;
@@ -38,6 +39,7 @@ public class CopyOnWriteObjHashSet<T> {
/**
* Called by index when about to make an update
*/
+ @Override
public void makeCopy() {
ohs = new ObjHashSet<>(ohs);
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java?rev=1761499&r1=1761498&r2=1761499&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/CopyOnWriteOrderedFsSet_array.java Mon Sep 19 20:24:02 2016
@@ -28,6 +28,7 @@ import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
+import org.apache.uima.cas.impl.CopyOnWriteIndexPart;
import org.apache.uima.jcas.cas.TOP;
/**
@@ -35,7 +36,7 @@ import org.apache.uima.jcas.cas.TOP;
* Delegates generated by Eclipse
*/
-public class CopyOnWriteOrderedFsSet_array implements NavigableSet<TOP> {
+public class CopyOnWriteOrderedFsSet_array implements NavigableSet<TOP>, CopyOnWriteIndexPart {
private OrderedFsSet_array set;
@@ -50,6 +51,7 @@ public class CopyOnWriteOrderedFsSet_arr
/**
* Called by index when about to make an update
*/
+ @Override
public void makeCopy() {
set = new OrderedFsSet_array(set);
}
@@ -58,6 +60,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @param action
* @see java.lang.Iterable#forEach(java.util.function.Consumer)
*/
+ @Override
public void forEach(Consumer<? super TOP> action) {
set.forEach(action);
}
@@ -66,6 +69,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.lang.Object#hashCode()
*/
+ @Override
public int hashCode() {
return set.hashCode();
}
@@ -75,6 +79,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.lang.Object#equals(java.lang.Object)
*/
+ @Override
public boolean equals(Object obj) {
return set.equals(obj);
}
@@ -83,6 +88,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#comparator()
*/
+ @Override
public Comparator<? super TOP> comparator() {
return set.comparator();
}
@@ -91,6 +97,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#first()
*/
+ @Override
public TOP first() {
return set.first();
}
@@ -99,6 +106,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#last()
*/
+ @Override
public TOP last() {
return set.last();
}
@@ -107,6 +115,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#size()
*/
+ @Override
public int size() {
return set.size();
}
@@ -115,6 +124,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#isEmpty()
*/
+ @Override
public boolean isEmpty() {
return set.isEmpty();
}
@@ -124,6 +134,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#contains(java.lang.Object)
*/
+ @Override
public boolean contains(Object o) {
return set.contains(o);
}
@@ -132,6 +143,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#toArray()
*/
+ @Override
public Object[] toArray() {
return set.toArray();
}
@@ -141,6 +153,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#toArray(java.lang.Object[])
*/
+ @Override
public <T> T[] toArray(T[] a1) {
return set.toArray(a1);
}
@@ -150,6 +163,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#add(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public boolean add(TOP fs) {
return set.add(fs);
}
@@ -158,6 +172,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.util.SortedSet#spliterator()
*/
+ @Override
public Spliterator<TOP> spliterator() {
return set.spliterator();
}
@@ -167,6 +182,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.util.Collection#removeIf(java.util.function.Predicate)
*/
+ @Override
public boolean removeIf(Predicate<? super TOP> filter) {
return set.removeIf(filter);
}
@@ -175,6 +191,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.util.Collection#stream()
*/
+ @Override
public Stream<TOP> stream() {
return set.stream();
}
@@ -183,6 +200,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see java.util.Collection#parallelStream()
*/
+ @Override
public Stream<TOP> parallelStream() {
return set.parallelStream();
}
@@ -192,6 +210,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#remove(java.lang.Object)
*/
+ @Override
public boolean remove(Object o) {
return set.remove(o);
}
@@ -201,6 +220,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#containsAll(java.util.Collection)
*/
+ @Override
public boolean containsAll(Collection<?> c) {
return set.containsAll(c);
}
@@ -210,6 +230,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#addAll(java.util.Collection)
*/
+ @Override
public boolean addAll(Collection<? extends TOP> c) {
return set.addAll(c);
}
@@ -219,6 +240,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#retainAll(java.util.Collection)
*/
+ @Override
public boolean retainAll(Collection<?> c) {
return set.retainAll(c);
}
@@ -228,6 +250,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#removeAll(java.util.Collection)
*/
+ @Override
public boolean removeAll(Collection<?> c) {
return set.removeAll(c);
}
@@ -236,6 +259,7 @@ public class CopyOnWriteOrderedFsSet_arr
*
* @see org.apache.uima.internal.util.OrderedFsSet_array#clear()
*/
+ @Override
public void clear() {
set.clear();
}
@@ -245,6 +269,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#lower(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public TOP lower(TOP fs) {
return set.lower(fs);
}
@@ -263,6 +288,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#floor(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public TOP floor(TOP fs) {
return set.floor(fs);
}
@@ -281,6 +307,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#ceiling(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public TOP ceiling(TOP fs) {
return set.ceiling(fs);
}
@@ -299,6 +326,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#higher(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public TOP higher(TOP fs) {
return set.higher(fs);
}
@@ -316,6 +344,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#pollFirst()
*/
+ @Override
public TOP pollFirst() {
return set.pollFirst();
}
@@ -324,6 +353,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#pollLast()
*/
+ @Override
public TOP pollLast() {
return set.pollLast();
}
@@ -332,6 +362,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#iterator()
*/
+ @Override
public Iterator<TOP> iterator() {
return set.iterator();
}
@@ -340,6 +371,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#descendingSet()
*/
+ @Override
public NavigableSet<TOP> descendingSet() {
return set.descendingSet();
}
@@ -348,6 +380,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#descendingIterator()
*/
+ @Override
public Iterator<TOP> descendingIterator() {
return set.descendingIterator();
}
@@ -360,6 +393,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#subSet(org.apache.uima.jcas.cas.TOP, boolean, org.apache.uima.jcas.cas.TOP, boolean)
*/
+ @Override
public NavigableSet<TOP> subSet(TOP fromElement, boolean fromInclusive, TOP toElement,
boolean toInclusive) {
return set.subSet(fromElement, fromInclusive, toElement, toInclusive);
@@ -371,6 +405,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#headSet(org.apache.uima.jcas.cas.TOP, boolean)
*/
+ @Override
public NavigableSet<TOP> headSet(TOP toElement, boolean inclusive) {
return set.headSet(toElement, inclusive);
}
@@ -381,6 +416,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#tailSet(org.apache.uima.jcas.cas.TOP, boolean)
*/
+ @Override
public NavigableSet<TOP> tailSet(TOP fromElement, boolean inclusive) {
return set.tailSet(fromElement, inclusive);
}
@@ -391,6 +427,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#subSet(org.apache.uima.jcas.cas.TOP, org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public SortedSet<TOP> subSet(TOP fromElement, TOP toElement) {
return set.subSet(fromElement, toElement);
}
@@ -400,6 +437,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#headSet(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public SortedSet<TOP> headSet(TOP toElement) {
return set.headSet(toElement);
}
@@ -409,6 +447,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#tailSet(org.apache.uima.jcas.cas.TOP)
*/
+ @Override
public SortedSet<TOP> tailSet(TOP fromElement) {
return set.tailSet(fromElement);
}
@@ -425,6 +464,7 @@ public class CopyOnWriteOrderedFsSet_arr
* @return
* @see org.apache.uima.internal.util.OrderedFsSet_array#toString()
*/
+ @Override
public String toString() {
return set.toString();
}