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