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);
+    }
+  }
 }