public class

OpenBitSetIterator

extends DocIdSetIterator
java.lang.Object
   ↳ org.apache.lucene.search.DocIdSetIterator
     ↳ org.apache.lucene.util.OpenBitSetIterator

Class Overview

An iterator to iterate over set bits in an OpenBitSet. This is faster than nextSetBit() for iterating over the complete set of bits, especially when the density of the bits set is high.

Summary

[Expand]
Inherited Constants
From class org.apache.lucene.search.DocIdSetIterator
Fields
protected static final int[] bitlist
Public Constructors
OpenBitSetIterator(OpenBitSet obs)
OpenBitSetIterator(long[] bits, int numWords)
Public Methods
int advance(int target)
Advances to the first beyond the current whose document number is greater than or equal to target.
int docID()
Returns the following:
int nextDoc()
alternate shift implementations // 32 bit shifts, but a long shift needed at the end private void shift2() { int y = (int)word; if (y==0) {wordShift +=32; y = (int)(word >>>32); } if ((y & 0x0000FFFF) == 0) { wordShift +=16; y>>>=16; } if ((y & 0x000000FF) == 0) { wordShift +=8; y>>>=8; } indexArray = bitlist[y & 0xff]; word >>>= (wordShift +1); } private void shift3() { int lower = (int)word; int lowByte = lower & 0xff; if (lowByte != 0) { indexArray=bitlist[lowByte]; return; } shift(); }
[Expand]
Inherited Methods
From class org.apache.lucene.search.DocIdSetIterator
From class java.lang.Object

Fields

protected static final int[] bitlist

Public Constructors

public OpenBitSetIterator (OpenBitSet obs)

public OpenBitSetIterator (long[] bits, int numWords)

Public Methods

public int advance (int target)

Advances to the first beyond the current whose document number is greater than or equal to target. Returns the current document number or NO_MORE_DOCS if there are no more docs in the set.

Behaves as if written:

 int advance(int target) {
   int doc;
   while ((doc = nextDoc()) < target) {
   }
   return doc;
 }
 
Some implementations are considerably more efficient than that.

NOTE: certain implementations may return a different value (each time) if called several times in a row with the same target.

NOTE: this method may be called with {@value #NO_MORE_DOCS} for efficiency by some Scorers. If your implementation cannot efficiently determine that it should exhaust, it is recommended that you check for that value in each call to this method.

NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior.

public int docID ()

Returns the following:

public int nextDoc ()

alternate shift implementations // 32 bit shifts, but a long shift needed at the end private void shift2() { int y = (int)word; if (y==0) {wordShift +=32; y = (int)(word >>>32); } if ((y & 0x0000FFFF) == 0) { wordShift +=16; y>>>=16; } if ((y & 0x000000FF) == 0) { wordShift +=8; y>>>=8; } indexArray = bitlist[y & 0xff]; word >>>= (wordShift +1); } private void shift3() { int lower = (int)word; int lowByte = lower & 0xff; if (lowByte != 0) { indexArray=bitlist[lowByte]; return; } shift(); }