|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.cassandra.utils.obs.OpenBitSet
public class OpenBitSet
An "open" BitSet implementation that allows direct access to the array of words storing the bits.
Unlike java.util.bitset, the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats.OpenBitSet
is faster than java.util.BitSet
in most operations
and *much* faster at calculating cardinality of sets and results of set operations.
It can also handle sets of larger cardinality (up to 64 * 2**32-1)
The goals of OpenBitSet
are the fastest implementation possible, and
maximum code reuse. Extra safety and encapsulation
may always be built on top, but if that's built in, the cost can never be removed (and
hence people re-implement their own version in order to get better performance).
If you want a "safe", totally encapsulated (and slower and limited) BitSet
class, use java.util.BitSet
.
cardinality | intersect_count | union | nextSetBit | get | iterator | |
---|---|---|---|---|---|---|
50% full | 3.36 | 3.96 | 1.44 | 1.46 | 1.99 | 1.58 |
1% full | 3.31 | 3.90 | 1.04 | 0.99 |
cardinality | intersect_count | union | nextSetBit | get | iterator | |
---|---|---|---|---|---|---|
50% full | 2.50 | 3.50 | 1.00 | 1.03 | 1.12 | 1.25 |
1% full | 2.51 | 3.49 | 1.00 | 1.02 |
Field Summary | |
---|---|
protected long[][] |
bits
|
protected static int |
PAGE_SIZE
length of bits[][] page in long[] elements. |
protected int |
wlen
|
Constructor Summary | |
---|---|
OpenBitSet()
|
|
OpenBitSet(java.util.BitSet bits)
Contructs an OpenBitset from a BitSet |
|
OpenBitSet(long numBits)
Constructs an OpenBitSet large enough to hold numBits. |
|
OpenBitSet(long numBits,
boolean allocatePages)
|
Method Summary | |
---|---|
void |
and(OpenBitSet other)
|
static int |
bits2words(long numBits)
returns the number of 64 bit words it would take to hold numBits |
long |
capacity()
Returns the current capacity in bits (1 greater than the index of the last bit) |
long |
cardinality()
|
void |
clear(int startIndex,
int endIndex)
Clears a range of bits. |
void |
clear(long index)
clears a bit, allowing access beyond the current set size without changing the size. |
void |
clear(long startIndex,
long endIndex)
Clears a range of bits. |
void |
ensureCapacity(long numBits)
Ensure that the long[] is big enough to hold numBits, expanding it if necessary. |
void |
ensureCapacityWords(int numWords)
Expand the long[] with the size given as a number of words (64 bit longs). |
boolean |
equals(java.lang.Object o)
returns true if both sets have the same bits set |
protected int |
expandingWordNum(long index)
|
void |
fastClear(int index)
clears a bit. |
void |
fastClear(long index)
clears a bit. |
void |
fastFlip(int index)
flips a bit. |
void |
fastFlip(long index)
flips a bit. |
boolean |
fastGet(int index)
Returns true or false for the specified bit index. |
boolean |
fastGet(long index)
Returns true or false for the specified bit index. |
void |
fastSet(int index)
Sets the bit at the specified index. |
void |
fastSet(long index)
Sets the bit at the specified index. |
void |
flip(long index)
flips a bit, expanding the set size if necessary |
void |
flip(long startIndex,
long endIndex)
Flips a range of bits, expanding the set size if necessary |
boolean |
flipAndGet(int index)
flips a bit and returns the resulting bit value. |
boolean |
flipAndGet(long index)
flips a bit and returns the resulting bit value. |
boolean |
get(int index)
Returns true or false for the specified bit index. |
boolean |
get(long index)
Returns true or false for the specified bit index |
boolean |
getAndSet(int index)
Sets a bit and returns the previous value. |
boolean |
getAndSet(long index)
Sets a bit and returns the previous value. |
int |
getBit(int index)
returns 1 if the bit is set, 0 if not. |
int |
getNumWords()
Expert: gets the number of longs in the array that are in use |
long[] |
getPage(int pageIdx)
|
int |
getPageCount()
|
int |
getPageSize()
|
int |
hashCode()
|
void |
intersect(OpenBitSet other)
this = this AND other |
boolean |
isEmpty()
Returns true if there are no set bits |
long |
length()
|
int |
nextSetBit(int index)
Returns the index of the first set bit starting at the index specified. |
long |
nextSetBit(long index)
Returns the index of the first set bit starting at the index specified. |
void |
set(long index)
sets a bit, expanding the set size if necessary |
void |
set(long startIndex,
long endIndex)
Sets a range of bits, expanding the set size if necessary |
long |
size()
Returns the current capacity of this set. |
void |
trimTrailingZeros()
Lowers numWords, the number of words in use, by checking for trailing zero words. |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected long[][] bits
protected int wlen
protected static final int PAGE_SIZE
Constructor Detail |
---|
public OpenBitSet(long numBits)
numBits
- public OpenBitSet(long numBits, boolean allocatePages)
public OpenBitSet()
public OpenBitSet(java.util.BitSet bits)
Method Detail |
---|
public int getPageSize()
public int getPageCount()
public long[] getPage(int pageIdx)
public long capacity()
public long size()
cardinality()
public long length()
public boolean isEmpty()
public int getNumWords()
public boolean get(int index)
public boolean fastGet(int index)
public boolean get(long index)
public boolean fastGet(long index)
public int getBit(int index)
public void set(long index)
public void fastSet(int index)
public void fastSet(long index)
public void set(long startIndex, long endIndex)
startIndex
- lower indexendIndex
- one-past the last bit to setprotected int expandingWordNum(long index)
public void fastClear(int index)
public void fastClear(long index)
public void clear(long index)
public void clear(int startIndex, int endIndex)
startIndex
- lower indexendIndex
- one-past the last bit to clearpublic void clear(long startIndex, long endIndex)
startIndex
- lower indexendIndex
- one-past the last bit to clearpublic boolean getAndSet(int index)
public boolean getAndSet(long index)
public void fastFlip(int index)
public void fastFlip(long index)
public void flip(long index)
public boolean flipAndGet(int index)
public boolean flipAndGet(long index)
public void flip(long startIndex, long endIndex)
startIndex
- lower indexendIndex
- one-past the last bit to flippublic long cardinality()
public int nextSetBit(int index)
public long nextSetBit(long index)
public void intersect(OpenBitSet other)
public void and(OpenBitSet other)
public void ensureCapacityWords(int numWords)
public void ensureCapacity(long numBits)
public void trimTrailingZeros()
public static int bits2words(long numBits)
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |