org.apache.lucene.util
Class OpenBitSetIterator

java.lang.Object
  extended by org.apache.lucene.search.DocIdSetIterator
      extended by org.apache.lucene.util.OpenBitSetIterator

public class OpenBitSetIterator
extends DocIdSetIterator

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.

Version:
$Id$

Field Summary
protected static int[] bitlist
           
 
Constructor Summary
OpenBitSetIterator(long[] bits, int numWords)
           
OpenBitSetIterator(OpenBitSet obs)
           
 
Method Summary
 int doc()
          Returns the current document number.
 boolean next()
          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(); }
 boolean skipTo(int target)
          Skips entries to the first beyond the current whose document number is greater than or equal to target.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

bitlist

protected static final int[] bitlist
Constructor Detail

OpenBitSetIterator

public OpenBitSetIterator(OpenBitSet obs)

OpenBitSetIterator

public OpenBitSetIterator(long[] bits,
                          int numWords)
Method Detail

next

public boolean next()
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(); }

Specified by:
next in class DocIdSetIterator

skipTo

public boolean skipTo(int target)
Description copied from class: DocIdSetIterator
Skips entries to the first beyond the current whose document number is greater than or equal to target.

Returns true iff there is such an entry.

Behaves as if written:

   boolean skipTo(int target) {
     do {
       if (!next())
         return false;
     } while (target > doc());
     return true;
   }
 
Some implementations are considerably more efficient than that.

Specified by:
skipTo in class DocIdSetIterator

doc

public int doc()
Description copied from class: DocIdSetIterator
Returns the current document number.

This is invalid until DocIdSetIterator.next() is called for the first time.

Specified by:
doc in class DocIdSetIterator


Copyright © 2000-2008 Apache Software Foundation. All Rights Reserved.