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 2014/12/17 15:46:44 UTC
svn commit: r1646270 - in
/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima: cas/impl/
internal/util/
Author: schor
Date: Wed Dec 17 14:46:43 2014
New Revision: 1646270
URL: http://svn.apache.org/r1646270
Log:
[UIMA-4155] add bulk update methods, and eliminate extra int array creation / sorting if allowed
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSBagIndex.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSLeafIndexImpl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTIndex.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTSetIndex.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSVectorIndex.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntBitSet.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntHashSet.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntSet.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet_impl.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSBagIndex.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSBagIndex.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSBagIndex.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSBagIndex.java Wed Dec 17 14:46:43 2014
@@ -416,4 +416,15 @@ public class FSBagIndex extends FSLeafIn
throw new UnsupportedOperationException();
}
+ @Override
+ protected void bulkAddTo(IntVector v) {
+ if (USE_POSITIVE_INT_SET) {
+ indexP.bulkAddTo(v);
+ } else {
+ v.addBulk(index);
+ }
+
+
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIndexRepositoryImpl.java Wed Dec 17 14:46:43 2014
@@ -233,9 +233,11 @@ public class FSIndexRepositoryImpl imple
}
/**
- * The next two classes (PointerIterator, and LeafPointerIterator)
+ * The next 3 classes (PointerIterator, PointerIteratorForBag and LeafPointerIterator)
* implement iterators for particular indexes.
*
+ * PointerIteratorForBag is not yet done... (December 2014)
+ *
* This class handles the concepts involved with iterating over a type and
* all of its subtypes
*
@@ -283,7 +285,7 @@ public class FSIndexRepositoryImpl imple
@Override
public String toString() {
- StringBuilder sb = new StringBuilder("PointerIterator [iicp=" + iicp + ", indexes=\n");
+ StringBuilder sb = new StringBuilder(this.getClass().getSimpleName() + " [iicp=" + iicp + ", indexes=\n");
int i = 0;
for (ComparableIntPointerIterator item : indexes) {
sb.append(" ").append(i++).append(" ").append(item).append('\n');
@@ -721,6 +723,24 @@ public class FSIndexRepositoryImpl imple
}
} // end of class PointerIterator
+
+// /**
+// * Version of pointer iterator for bags
+// * Since bags have no order, simplify the iteration by just going thru sequentially
+// * all the subtypes
+// *
+// */
+// private class PointerIteratorForBag extends PointerIterator {
+//
+// private PointerIteratorForBag(final IndexIteratorCachePair iicp) {
+// super(iicp);
+// }
+//
+// private PointerIteratorForBag(final IndexIteratorCachePair iicp, int fs) {
+// super(iicp, fs);
+// }
+//
+// }
/**
* This class and the previous one (PointerIterator, and LeafPointerIterator)
@@ -1840,20 +1860,23 @@ public class FSIndexRepositoryImpl imple
// Note: This next loop removes duplicates (and also sorts
// the fs addrs associated with one type)
- // Duplicates arise from having multiple sets combined, and
- // also if a non-set index had the same identical FS added
+ // Duplicates arise from having an index having the same identical FS added
// multiple times.
- indexedFSs.removeAllElements();
- // get an iterator over just the leaf index for this type itself, excluding subtypes
- it = anIndex.index.refIterator();
- while (it.isValid()) {
- indexedFSs.add(it.get());
- it.inc();
+ if (IS_ALLOW_DUP_ADD_2_INDICES) {
+ indexedFSs.removeAllElements();
+ // get an iterator over just the leaf index for this type itself, excluding subtypes
+ it = anIndex.index.refIterator();
+ while (it.isValid()) {
+ indexedFSs.add(it.get());
+ it.inc();
+ }
+ // sort and remove duplicates
+ indexedFSs.sortDedup();
+ // add to previously collected types
+ v.add(indexedFSs.getArray(), 0, indexedFSs.size()); // bulk add of all elements
+ } else {
+ anIndex.index.bulkAddTo(v);
}
- // sort and remove duplicates
- indexedFSs.sortDedup();
- // add to previously collected types
- v.add(indexedFSs.getArray(), 0, indexedFSs.size()); // bulk add of all elements
} // loop to accumulate in v all for all types
return v.toArray();
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIntArrayIndex.java Wed Dec 17 14:46:43 2014
@@ -549,4 +549,9 @@ public class FSIntArrayIndex<T extends F
return true;
}
+ @Override
+ protected void bulkAddTo(IntVector v) {
+ v.addBulk(index);
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSLeafIndexImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSLeafIndexImpl.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSLeafIndexImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSLeafIndexImpl.java Wed Dec 17 14:46:43 2014
@@ -30,6 +30,7 @@ import org.apache.uima.cas.admin.LinearT
import org.apache.uima.internal.util.ComparableIntPointerIterator;
import org.apache.uima.internal.util.IntComparator;
import org.apache.uima.internal.util.IntPointerIterator;
+import org.apache.uima.internal.util.IntVector;
/**
* The common (among all index kinds - set, sorted, bag) info for an index
@@ -449,6 +450,12 @@ public abstract class FSLeafIndexImpl<T
return refIterator();
}
+ /**
+ * For serialization: get all the items in this index and bulk add to an IntVector
+ * @param v
+ */
+ protected abstract void bulkAddTo(IntVector v);
+
protected abstract IntPointerIterator refIterator(int fsCode);
// these next two are never called (maybe)
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTIndex.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTIndex.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTIndex.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTIndex.java Wed Dec 17 14:46:43 2014
@@ -26,6 +26,7 @@ import org.apache.uima.internal.util.Com
import org.apache.uima.internal.util.ComparableIntPointerIterator;
import org.apache.uima.internal.util.IntComparator;
import org.apache.uima.internal.util.IntPointerIterator;
+import org.apache.uima.internal.util.IntVector;
import org.apache.uima.internal.util.rb_trees.CompIntArrayRBT;
/**
@@ -142,4 +143,9 @@ class FSRBTIndex<T extends FeatureStruct
throw new UnsupportedOperationException();
}
+ @Override
+ protected void bulkAddTo(IntVector v) {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTSetIndex.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTSetIndex.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTSetIndex.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSRBTSetIndex.java Wed Dec 17 14:46:43 2014
@@ -26,6 +26,7 @@ import org.apache.uima.internal.util.Com
import org.apache.uima.internal.util.ComparableIntPointerIterator;
import org.apache.uima.internal.util.IntComparator;
import org.apache.uima.internal.util.IntPointerIterator;
+import org.apache.uima.internal.util.IntVector;
import org.apache.uima.internal.util.rb_trees.CompIntArrayRBT;
/**
@@ -148,4 +149,9 @@ class FSRBTSetIndex<T extends FeatureStr
return this.tree.deleteKey(fs);
}
+ @Override
+ protected void bulkAddTo(IntVector v) {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSVectorIndex.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSVectorIndex.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSVectorIndex.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSVectorIndex.java Wed Dec 17 14:46:43 2014
@@ -306,4 +306,9 @@ public class FSVectorIndex<T extends Fea
throw new UnsupportedOperationException();
}
+ @Override
+ protected void bulkAddTo(IntVector v) {
+ v.addBulk(index);
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntBitSet.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntBitSet.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntBitSet.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntBitSet.java Wed Dec 17 14:46:43 2014
@@ -271,4 +271,12 @@ public class IntBitSet implements Positi
return (position >= 0) && set.get(position);
}
+ @Override
+ public void bulkAddTo(IntVector v) {
+ int pos = -1;
+ while (-1 != (pos = set.nextSetBit(pos + 1))) {
+ v.add(pos + offset);
+ }
+ }
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntHashSet.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntHashSet.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntHashSet.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntHashSet.java Wed Dec 17 14:46:43 2014
@@ -642,4 +642,21 @@ public class IntHashSet implements Posit
public boolean isValid(int position) {
return (position >= 0) && (position < getCapacity());
}
+
+ @Override
+ public void bulkAddTo(IntVector v) {
+ if (null == keys4) {
+ for (int k : keys2) {
+ if (k != 0) {
+ v.add(k);
+ }
+ }
+ } else {
+ for (int k : keys4) {
+ if (k != 0) {
+ v.add(k);
+ }
+ }
+ }
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntSet.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntSet.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntSet.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntSet.java Wed Dec 17 14:46:43 2014
@@ -258,5 +258,10 @@ public class IntSet implements PositiveI
// TODO Auto-generated method stub
return (position >= 0) && (position < size());
}
+
+ @Override
+ public void bulkAddTo(IntVector v) {
+ v.addBulk(iVec);
+ }
}
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/IntVector.java Wed Dec 17 14:46:43 2014
@@ -128,6 +128,10 @@ public class IntVector implements Serial
add(elements, 0, elements.length);
}
+ public void addBulk(IntVector elements) {
+ add(elements.array, 0, elements.size());
+ }
+
/**
* Add a slice of elements to the end
* @param elements -
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet.java Wed Dec 17 14:46:43 2014
@@ -39,6 +39,11 @@ public interface PositiveIntSet {
boolean add(int key);
/**
+ * add all elements in this set to the IntVector v as a bulk operation
+ * @param v - to be added to
+ */
+ void bulkAddTo(IntVector v);
+ /**
*
* @param key -
* @return true if the set had this element before the remove
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet_impl.java?rev=1646270&r1=1646269&r2=1646270&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/PositiveIntSet_impl.java Wed Dec 17 14:46:43 2014
@@ -711,4 +711,10 @@ public class PositiveIntSet_impl impleme
return (null == intSet) ? false : intSet.isValid(position);
}
+ @Override
+ public void bulkAddTo(IntVector v) {
+ if (null != intSet) {
+ intSet.bulkAddTo(v);
+ }
+ }
}