From 48d204963411dc8720f2173bbe82d6c36c506a03 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Wed, 4 Jul 2012 10:32:51 +0000 Subject: [PATCH] tighten up FixedIntBlockIndexInput git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/pforcodec_3892@1357217 13f79535-47bb-0310-9956-ffa450edef68 --- .../intblock/FixedIntBlockIndexInput.java | 47 ++++++++----------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java b/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java index ef54792cb7a..aee5e075a04 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java @@ -77,19 +77,17 @@ public abstract class FixedIntBlockIndexInput extends IntIndexInput { private static class Reader extends IntIndexInput.Reader { private final IndexInput in; - - protected final int[] pending; - int upto; - - private boolean seekPending; - private long pendingFP; - private int pendingUpto; - private long lastBlockFP; private final BlockReader blockReader; private final int blockSize; + private final int[] pending; + + private int upto; + private boolean seekPending; + private long pendingFP; + private long lastBlockFP = -1; public Reader(final IndexInput in, final int[] pending, final BlockReader blockReader) - throws IOException { + throws IOException { this.in = in; this.pending = pending; this.blockSize = pending.length; @@ -98,33 +96,28 @@ public abstract class FixedIntBlockIndexInput extends IntIndexInput { } void seek(final long fp, final int upto) { - pendingFP = fp; - pendingUpto = upto; - seekPending = true; - } - - private void maybeSeek() throws IOException { - if (seekPending) { - if (pendingFP != lastBlockFP) { - // need new block - in.seek(pendingFP); - lastBlockFP = pendingFP; - blockReader.readBlock(); - } - upto = pendingUpto; - seekPending = false; + assert upto < blockSize; + if (seekPending || fp != lastBlockFP) { + pendingFP = fp; + seekPending = true; } + this.upto = upto; } @Override public int next() throws IOException { - this.maybeSeek(); - if (upto == blockSize) { + if (seekPending) { + // Seek & load new block + in.seek(pendingFP); + lastBlockFP = pendingFP; + blockReader.readBlock(); + seekPending = false; + } else if (upto == blockSize) { + // Load new block lastBlockFP = in.getFilePointer(); blockReader.readBlock(); upto = 0; } - return pending[upto++]; } }