package org.limewire.collection;
/**
* Defines the interface to manipulate a fixed size field of bits.
* <code>BitField</code> declares methods to return the location where a bit
* is either set (equal to 1) or clear (equal to 0). The <code>BitField</code>
* interface has a methods for returning the bit value at a particular location
* and the maximum size of the field of bits.
*
* Also, <code>BitField</code> has a <a href="http://en.wikipedia.org/wiki/Cardinality">
* cardinality</a> method for working with sets.
* <p>
* {@link BitFieldSet}, {@link AndView}, {@link OrView}, {@link XorView} and
* {@link NotView} implement <code>BitField</code>. The subclasses perform
* various operations on the bits.
* <p>
<pre>
void sampleCodeBitField(){
BitSet bs = new BitSet();
bs.set(3);
bs.set(1);
BitField completed = new BitFieldSet(bs, 64);
NotView uncompleted = new NotView(completed);
printBitField(completed, " completed");
printBitField(uncompleted, "uncompleted");
System.out.println("Completed " + completed.cardinality() + " out of " + completed.maxSize() + " tasks.");
System.out.println("Uncompleted tasks: " + new NotView(completed).cardinality() + ".");
}
void printBitField(BitField bf, String bfName){
System.out.print(bfName + ": ");
for(int i = 0; i < bf.maxSize(); i++){
int j = 0;
if(bf.get(i))
j = 1;
System.out.print(j);
}
System.out.println("");
}
Output:
completed: 0101000000000000000000000000000000000000000000000000000000000000
uncompleted: 1010111111111111111111111111111111111111111111111111111111111111
Completed 2 out of 64 tasks.
Uncompleted tasks: 62.
</pre>
*/
public interface BitField {
public boolean get(int i);
/**
* @return index of next set bit from index <code>i</code> or -1 if there is no bit left
*/
public int nextSetBit(int i);
public int nextClearBit(int i);
public int cardinality();
public int maxSize();
}