Author: rec
Date: Mon Feb  6 13:45:08 2017
New Revision: 1781899

URL: http://svn.apache.org/viewvc?rev=1781899&view=rev
Log:
[UIMA-5046] Faster indexCovered implementation
- Seems to work all ok - no problems found anymore
- Removed debug code and alternative purge
- Reduced iterations in random unit-test again

Modified:
    
uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
    
uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java

Modified: 
uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
URL: 
http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java?rev=1781899&r1=1781898&r2=1781899&view=diff
==============================================================================
--- 
uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
 (original)
+++ 
uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
 Mon Feb  6 13:45:08 2017
@@ -799,16 +799,10 @@ public final class CasUtil {
     int o = 0;
     int i = 0;
     
-    // Whether to log debug information
-    boolean debug = false;
-    
     while ((o < typeArray.length || !memory.isEmpty()) && i < 
coveredTypeArray.length) {
       // Always make sure the memory contains at least one covering annotation 
to compare against
       if (memory.isEmpty()) {
         memory.push(typeArray[o]);
-        if (debug) {
-          System.out.printf("NEXT OUTER%n");
-        }
         o++;
       }
       AnnotationFS bottom = memory.peek();
@@ -817,9 +811,6 @@ public final class CasUtil {
       // start earlier.
       AnnotationFS iFS = coveredTypeArray[i];
       while (i < coveredTypeArray.length-1 && iFS.getBegin() < 
bottom.getBegin()) {
-        if (debug) {
-          System.out.printf("Skipping inner: %d %d%n", iFS.getBegin(), 
iFS.getEnd());
-        }
         i++;
         iFS = coveredTypeArray[i];
       }
@@ -838,15 +829,6 @@ public final class CasUtil {
           o++;
         }
         
-        if (debug) {
-          StringBuilder sb2 = new StringBuilder();
-          for (AnnotationFS f : memory) {
-            sb2.append(f.getBegin()).append("-").append(f.getEnd()).append(" 
");
-          }
-          System.out.printf("OUTER 1: %s%n", sb2);
-          System.out.printf("INNER  : %d-%d%n", iFSbegin, iFSend);
-        }
-        
         // Record covered annotations
         for (AnnotationFS covering : memory) {
           if (covering.getBegin() <= iFSbegin && iFS.getEnd() <= 
covering.getEnd()) {
@@ -856,82 +838,25 @@ public final class CasUtil {
               index.put(covering, c);
             }
             c.add(iFS);
-            if (debug) {
-              System.out.printf("-- %d-%d covers %d-%d%n", 
covering.getBegin(), covering.getEnd(),
-                      iFSbegin, iFSend);
-            }
-          }
-          else {
-            if (debug) {
-              System.out.printf("-- %d-%d NOT covers %d-%d%n", 
covering.getBegin(),
-                      covering.getEnd(), iFSbegin, iFSend);
-            }
           }
         }
         
-        if (debug) {
-          System.out.printf("NEXT INNER 1%n");
-        }
         i++;
       }
       else {
-        if (debug) {
-          StringBuilder sb = new StringBuilder();
-          for (AnnotationFS f : memory) {
-            sb.append(f.getBegin()).append("-").append(f.getEnd()).append(" ");
-          }
-          System.out.printf("OUTER 2: %s%n", sb);
-          System.out.printf("INNER  : %d-%d%n", iFSbegin, iFS.getEnd());
-          System.out.printf("HOPELESS!%n");
-          
-          System.out.printf("NEXT INNER 2%n");
-        }
         i++;
       }
         
       // Purge covering annotations from memory that cannot match anymore 
given the currently
-      int purgeImpl = 0;
       // exampled covered annotation
-      if (purgeImpl == 0) {
-        // Alternative implementation: re-uses memory
-        Iterator<AnnotationFS> purgeIterator = memory.iterator();
-        while (purgeIterator.hasNext()) {
-          AnnotationFS purgeCandidate = purgeIterator.next();
-          if (purgeCandidate.getEnd() < iFS.getBegin()) {
-            if (debug) {
-              System.out.printf("Dropping: %d-%d%n", purgeCandidate.getBegin(),
-                      purgeCandidate.getEnd());
-            }
-            purgeIterator.remove();
-          }
+      // Alternative implementation: re-uses memory
+      Iterator<AnnotationFS> purgeIterator = memory.iterator();
+      while (purgeIterator.hasNext()) {
+        AnnotationFS purgeCandidate = purgeIterator.next();
+        if (purgeCandidate.getEnd() < iFS.getBegin()) {
+          purgeIterator.remove();
         }
       }
-      
-      // Alternative implementation: uses more memory but faster?
-      if (purgeImpl == 1) {
-        memory2.clear();
-        for (AnnotationFS purgeCandidate : memory) {
-          if (purgeCandidate.getEnd() < iFS.getBegin()) {
-            if (debug) {
-              System.out.printf("Dropping: %d-%d%n", purgeCandidate.getBegin(),
-                      purgeCandidate.getEnd());
-            }
-          }
-          else {
-            memory2.add(purgeCandidate);
-          }
-        }
-        
-        // Swap
-        Deque<AnnotationFS> buf = memory;
-        memory = memory2;
-        memory2 = buf;
-      }
-      
-      if (debug) {
-        System.out.printf("outer: %d/%d  inner: %d/%d%n", o, typeArray.length, 
i,
-                coveredTypeArray.length);
-      }
     }
 
     return unmodifiableMap(index);

Modified: 
uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
URL: 
http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java?rev=1781899&r1=1781898&r2=1781899&view=diff
==============================================================================
--- 
uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
 (original)
+++ 
uima/uimafit/trunk/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
 Mon Feb  6 13:45:08 2017
@@ -125,7 +125,7 @@ public class JCasUtilTest extends Compon
 
   @Test
   public void testSelectCoverRandom() throws Exception {
-    final int ITERATIONS = 25;
+    final int ITERATIONS = 10;
 
     for (int i = 0; i < ITERATIONS; i++) {
       CAS cas = jCas.getCas();


Reply via email to