[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();