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) {