You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2011/11/21 10:46:30 UTC
svn commit: r1204416 -
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java
Author: uschindler
Date: Mon Nov 21 09:46:30 2011
New Revision: 1204416
URL: http://svn.apache.org/viewvc?rev=1204416&view=rev
Log:
LUCENE-3448: Make optimization for OpenBitSetIterator correctly exhaust iterator
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java?rev=1204416&r1=1204415&r2=1204416&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/FixedBitSet.java Mon Nov 21 09:46:30 2011
@@ -192,6 +192,9 @@ public final class FixedBitSet extends D
if (iter instanceof OpenBitSetIterator && iter.docID() == -1) {
final OpenBitSetIterator obs = (OpenBitSetIterator) iter;
or(obs.arr, obs.words);
+ // advance after last doc that would be accepted if standard
+ // iteration is used (to exhaust it):
+ obs.advance(numBits);
} else {
int doc;
while ((doc = iter.nextDoc()) < numBits) {
@@ -219,6 +222,9 @@ public final class FixedBitSet extends D
if (iter instanceof OpenBitSetIterator && iter.docID() == -1) {
final OpenBitSetIterator obs = (OpenBitSetIterator) iter;
and(obs.arr, obs.words);
+ // advance after last doc that would be accepted if standard
+ // iteration is used (to exhaust it):
+ obs.advance(numBits);
} else {
if (numBits == 0) return;
int disiDoc, bitSetDoc = nextSetBit(0);
@@ -255,6 +261,9 @@ public final class FixedBitSet extends D
if (iter instanceof OpenBitSetIterator && iter.docID() == -1) {
final OpenBitSetIterator obs = (OpenBitSetIterator) iter;
andNot(obs.arr, obs.words);
+ // advance after last doc that would be accepted if standard
+ // iteration is used (to exhaust it):
+ obs.advance(numBits);
} else {
int doc;
while ((doc = iter.nextDoc()) < numBits) {