[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


git-svn-id: https://svn.apache.org/repos/asf/uima/uimafit/trunk@1781899 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java b/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
index 009ba75..218a42c 100644
--- a/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
+++ b/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
@@ -799,16 +799,10 @@
     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 @@
       // 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 @@
           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 @@
               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);
diff --git a/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java b/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
index 806f9d5..c071714 100644
--- a/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
+++ b/uimafit-core/src/test/java/org/apache/uima/fit/util/JCasUtilTest.java
@@ -125,7 +125,7 @@
 
   @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();