You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by yo...@apache.org on 2006/11/28 19:17:57 UTC

svn commit: r480147 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/index/MultiReader.java

Author: yonik
Date: Tue Nov 28 10:17:56 2006
New Revision: 480147

URL: http://svn.apache.org/viewvc?view=rev&rev=480147
Log:
non-recursive MultiTermDocs.next,skipTo: LUCENE-729

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=diff&rev=480147&r1=480146&r2=480147
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Tue Nov 28 10:17:56 2006
@@ -275,6 +275,10 @@
      with calls to System.arraycopy instead, in DocumentWriter.java.
      (Nicolas Lalevee via Mike McCandless)
 
+ 13. LUCENE-729: Non-recursive skipTo and next implementation of
+     TermDocs for a MultiReader.  The old implementation could
+     recurse up to the number of segments in the index. (Yonik Seeley)
+
 Test Cases
   1. Added TestTermScorer.java (Grant Ingersoll)
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java?view=diff&rev=480147&r1=480146&r2=480147
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java Tue Nov 28 10:17:56 2006
@@ -352,14 +352,17 @@
   }
 
   public boolean next() throws IOException {
-    if (current != null && current.next()) {
-      return true;
-    } else if (pointer < readers.length) {
-      base = starts[pointer];
-      current = termDocs(pointer++);
-      return next();
-    } else
-      return false;
+    for(;;) {
+      if (current!=null && current.next()) {
+        return true;
+      }
+      else if (pointer < readers.length) {
+        base = starts[pointer];
+        current = termDocs(pointer++);
+      } else {
+        return false;
+      }
+    }
   }
 
   /** Optimized implementation. */
@@ -385,16 +388,17 @@
     }
   }
 
- /* A Possible future optimization could skip entire segments */
+ /* A Possible future optimization could skip entire segments */ 
   public boolean skipTo(int target) throws IOException {
-    if (current != null && current.skipTo(target-base)) {
-      return true;
-    } else if (pointer < readers.length) {
-      base = starts[pointer];
-      current = termDocs(pointer++);
-      return skipTo(target);
-    } else
-      return false;
+    for(;;) {
+      if (current != null && current.skipTo(target-base)) {
+        return true;
+      } else if (pointer < readers.length) {
+        base = starts[pointer];
+        current = termDocs(pointer++);
+      } else
+        return false;
+    }
   }
 
   private TermDocs termDocs(int i) throws IOException {