You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2011/08/02 20:00:59 UTC

svn commit: r1153227 - /lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java

Author: mikemccand
Date: Tue Aug  2 18:00:58 2011
New Revision: 1153227

URL: http://svn.apache.org/viewvc?rev=1153227&view=rev
Log:
LUCENE-3030: also skip floor blocks when loading next floor block not just initial floor block

Modified:
    lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java

Modified: lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java?rev=1153227&r1=1153226&r2=1153227&view=diff
==============================================================================
--- lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java (original)
+++ lucene/dev/branches/blocktree_3030/lucene/src/java/org/apache/lucene/index/codecs/BlockTreeTermsReader.java Tue Aug  2 18:00:58 2011
@@ -602,23 +602,22 @@ public class BlockTreeTermsReader extend
         // current transition is after current floor block
 
         void loadNextFloorBlock() throws IOException {
-          if (DEBUG) System.out.println("    loadNextFoorBlock");
-          fp = fpEnd;
+          assert numFollowFloorBlocks > 0;
+          if (DEBUG) System.out.println("    loadNextFoorBlock trans=" + transitions[transitionIndex]);
 
-          // Redundant check:
-          final long code = floorDataReader.readVLong();
-          final long newFP = fpOrig + (code >>> 1);
-          assert newFP == fpEnd: "newFP=" + newFP + " fpEnd=" + fpEnd;
+          do {
+            final long code = floorDataReader.readVLong();
+            fp = fpOrig + (code >>> 1);
+            numFollowFloorBlocks--;
+            if (DEBUG) System.out.println("    skip floor block2!  nextFloorLabel=" + (char) nextFloorLabel + " vs target=" + (char) transitions[transitionIndex].getMin() + " newFP=" + fp + " numFollowFloorBlocks=" + numFollowFloorBlocks);
+            if (numFollowFloorBlocks != 0) {
+              nextFloorLabel = floorDataReader.readByte() & 0xff;
+            } else {
+              nextFloorLabel = 256;
+            }
+            if (DEBUG) System.out.println("    nextFloorLabel=" + (char) nextFloorLabel);
+          } while (numFollowFloorBlocks != 0 && nextFloorLabel <= transitions[transitionIndex].getMin());
 
-          // nocommit -- skip floor blocks here too!
-          assert numFollowFloorBlocks > 0;
-          numFollowFloorBlocks--;
-          if (numFollowFloorBlocks == 0) {
-            nextFloorLabel = 256;
-          } else {
-            nextFloorLabel = floorDataReader.readByte() & 0xFF;
-          }
-          if (DEBUG) System.out.println("    nextFloorLabel=" + nextFloorLabel);
           load(null);
         }
 
@@ -652,6 +651,8 @@ public class BlockTreeTermsReader extend
               nextFloorLabel = floorDataReader.readByte() & 0xff;
               if (DEBUG) System.out.println("    numFollowFloorBlocks=" + numFollowFloorBlocks + " nextFloorLabel=" + nextFloorLabel);
 
+              // If current state is accept, we must process
+              // first block in case it has empty suffix:
               if (!runAutomaton.isAccept(state)) {
                 // Maybe skip floor blocks:
                 // nocommit