Class AbstractBitVector
- All Implemented Interfaces:
BitVector
,BigList<Boolean>
,BooleanBigList
,BooleanCollection
,BooleanIterable
,BooleanStack
,Size64
,Stack<Boolean>
,Comparable<BigList<? extends Boolean>>
,Iterable<Boolean>
,Collection<Boolean>
,RandomAccess
- Direct Known Subclasses:
AbstractBitVector.SubBitVector
,BooleanListBitVector
,LongArrayBitVector
,LongBigArrayBitVector
BitVector
.
This abstract implementation provides almost all methods: you have to provide just
BooleanList.getBoolean(int)
and
BitVector.length()
. No attributes are defined.
Note that the integer-set view provided by asLongSet()
is not cached: if you
want to cache the result of the first call, you must do your own caching.
Warning: this class has several optimised methods
that assume that getLong(long, long)
is implemented efficiently when its
arguments are multiples of Long.SIZE
(see, e.g., the implementation
of compareTo(BitVector)
and longestCommonPrefixLength(BitVector)
).
If you want speed up the processing of your own BitVector
implementations,
just implement getLong(long, long)
so that it is fast under the above conditions.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
A list-of-integers view of a bit vector.static class
A view of a bit vector as a sorted set of long integers.static class
A subvector of a given bit vector, specified by an initial and a final bit.Nested classes/interfaces inherited from class it.unimi.dsi.fastutil.booleans.AbstractBooleanBigList
AbstractBooleanBigList.BooleanRandomAccessSubList, AbstractBooleanBigList.BooleanSubList
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
add
(boolean value) void
add
(int value) Adds a bit with specified value at the end of this bit vector.void
add
(int index, boolean value) void
add
(long index, boolean value) void
add
(long index, int value) Adds a bit with specified integer value at the specified index (optional operation).Performs a logical and between this bit vector and another one, leaving the result in this vector.append
(long value, int k) Appends the less significant bits of a long integer to this bit vector.Appends another bit vector to this bit vector.asLongBigList
(int width) Returns a view of this bit vector as a list of nonnegative integers of specified width.Returns a view of this bit vector as a sorted set of long integers.long[]
bits()
Returns the bits in this bit vector as an array of longs, not to be modified.void
clear()
void
clear
(int index) void
clear
(long index) Clears a bit in this bit vector (optional operation).int
Compares lexicographically this bit vector with another bit vector.int
copy()
Returns a copy of this bit vector.copy
(long from, long to) Returns a copy of a part of this bit vector.long
count()
Counts the number of bits set to true in this bit vector.protected void
ensureIndex
(long index) protected void
ensureRestrictedIndex
(long index) boolean
Checks for equality with a segment of another vector.boolean
fast()
Returns an instance ofLongArrayBitVector
containing a copy of this bit vector.void
fill
(boolean value) Sets all bits this bit vector to the given boolean value (optional operation).void
fill
(int value) Sets all bits this bit vector to the given integer value (optional operation).void
fill
(long from, long to, boolean value) Fills a range of bits in this bit vector (optional operation).void
fill
(long from, long to, int value) Clears a range of bits in this bit vector (optional operation).long
firstOne()
Returns the position of the first bit set in this bit vector.long
Returns the position of the first bit unset in this bit vector.void
flip()
Flips all bits in this bit vector (optional operation).void
flip
(int index) void
flip
(long index) Flips a bit in this bit vector (optional operation).void
flip
(long from, long to) Flips a range of bits in this bit vector (optional operation).boolean
getBoolean
(int index) int
getInt
(long index) Returns the value of the specified bit as an integer.long
getLong
(long from, long to) Returns the specified bit range as a long.int
hashCode()
Returns a hash code for this bit vector.boolean
Returns true if this bit vector is a prefix of the specified bit vector.boolean
Returns true if this bit vector is a proper prefix of the specified bit vector.long
lastOne()
Returns the position of the last bit set in this bit vector.long
lastZero()
Returns the position of the last bit unset in this bit vector.length
(long newLength) Sets the number of bits in this bit vector.long
Returns the length of the greatest common prefix between this and the specified bit vector.long
nextOne
(long index) Returns the position of the first bit set at of after the given position.long
nextZero
(long index) Returns the position of the first bit unset after the given position.Performs a logical or between this bit vector and another one, leaving the result in this bit vector.long
previousOne
(long index) Returns the position of the first bit set strictly before the given position.long
previousZero
(long index) Returns the position of the first bit unset before or at the given position.boolean
removeBoolean
(int index) boolean
removeBoolean
(long index) Replaces the content of this bit vector with another bit vector.void
set
(int index) boolean
set
(int index, boolean value) void
set
(long index) Sets a bit in this bit vector (optional operation).boolean
set
(long index, boolean value) void
set
(long index, int value) Sets the value of the specified bit as an integer (optional operation).int
size()
Deprecated.void
size
(long newSize) long
size64()
subVector
(long from) Returns a subvector view specified by initial index and running up to the end of this bit vector.subVector
(long from, long to) Returns a subvector view specified by initial and final index.toString()
Returns a string representation of this vector.Performs a logical xor between this bit vector and another one, leaving the result in this vector.Methods inherited from class it.unimi.dsi.fastutil.booleans.AbstractBooleanBigList
add, addAll, addAll, addAll, addAll, addElements, addElements, contains, forEach, get, getElements, indexOf, indexOf, iterator, lastIndexOf, lastIndexOf, listIterator, listIterator, peek, peekBoolean, pop, popBoolean, push, push, rem, remove, removeElements, set, setElements, subList, top, topBoolean
Methods inherited from class it.unimi.dsi.fastutil.booleans.AbstractBooleanCollection
add, contains, containsAll, containsAll, remove, removeAll, removeAll, retainAll, retainAll, toArray, toBooleanArray, toBooleanArray
Methods inherited from class java.util.AbstractCollection
isEmpty, toArray, toArray
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface it.unimi.dsi.fastutil.booleans.BooleanBigList
add, addAll, addAll, addAll, addAll, addAll, addElements, addElements, get, getBoolean, getElements, getElements, indexOf, indexOf, iterator, lastIndexOf, lastIndexOf, listIterator, listIterator, remove, removeElements, set, setElements, setElements, setElements, spliterator, subList
Methods inherited from interface it.unimi.dsi.fastutil.booleans.BooleanCollection
add, addAll, contains, contains, containsAll, rem, remove, removeAll, removeIf, removeIf, retainAll, toArray, toBooleanArray, toBooleanArray
Methods inherited from interface it.unimi.dsi.fastutil.booleans.BooleanIterable
forEach, forEach
Methods inherited from interface java.util.Collection
addAll, containsAll, isEmpty, parallelStream, removeAll, retainAll, stream, toArray, toArray, toArray
-
Constructor Details
-
AbstractBitVector
public AbstractBitVector()
-
-
Method Details
-
ensureRestrictedIndex
protected void ensureRestrictedIndex(long index) - Overrides:
ensureRestrictedIndex
in classAbstractBooleanBigList
-
ensureIndex
protected void ensureIndex(long index) - Overrides:
ensureIndex
in classAbstractBooleanBigList
-
set
public void set(int index) - Implementation Specification:
- This implementation delegates to
set(long, boolean)
.
-
clear
public void clear(int index) - Implementation Specification:
- This implementation delegates to
set(long, boolean)
.
-
flip
public void flip(int index) - Implementation Specification:
- This implementation delegates to
flip(long)
.
-
set
public void set(long index) Description copied from interface:BitVector
Sets a bit in this bit vector (optional operation). -
clear
public void clear(long index) Description copied from interface:BitVector
Clears a bit in this bit vector (optional operation). -
flip
public void flip(long index) Description copied from interface:BitVector
Flips a bit in this bit vector (optional operation). -
fill
public void fill(boolean value) Description copied from interface:BitVector
Sets all bits this bit vector to the given boolean value (optional operation). -
fill
public void fill(int value) Description copied from interface:BitVector
Sets all bits this bit vector to the given integer value (optional operation). -
flip
public void flip()Description copied from interface:BitVector
Flips all bits in this bit vector (optional operation). -
fill
public void fill(long from, long to, boolean value) Description copied from interface:BitVector
Fills a range of bits in this bit vector (optional operation). -
fill
public void fill(long from, long to, int value) Description copied from interface:BitVector
Clears a range of bits in this bit vector (optional operation). -
flip
public void flip(long from, long to) Description copied from interface:BitVector
Flips a range of bits in this bit vector (optional operation). -
getInt
public int getInt(long index) Description copied from interface:BitVector
Returns the value of the specified bit as an integer.This method is a useful synonym for
BooleanBigList.getBoolean(long)
. -
getLong
public long getLong(long from, long to) Description copied from interface:BitVector
Returns the specified bit range as a long.Note that bit 0 of the returned long will be bit
from
of this bit vector.Implementations are invited to provide high-speed implementations for the case in which
from
is a multiple ofLong.SIZE
andto
isfrom
+Long.SIZE
(or less, in case the vector length is exceeded). This behaviour make it possible to implement high-speed hashing, copies, etc. -
getBoolean
public boolean getBoolean(int index) - Implementation Specification:
- This implementation delegates to
BooleanBigList.getBoolean(long)
.
-
removeBoolean
public boolean removeBoolean(int index) - Implementation Specification:
- This implementation delegates to
removeBoolean(long)
.
-
set
public boolean set(int index, boolean value) - Implementation Specification:
- This implementation delegates to
set(long, boolean)
.
-
add
public void add(int index, boolean value) - Implementation Specification:
- This implementation delegates to
add(long, boolean)
.
-
removeBoolean
public boolean removeBoolean(long index) - Specified by:
removeBoolean
in interfaceBooleanBigList
- Overrides:
removeBoolean
in classAbstractBooleanBigList
-
set
public boolean set(long index, boolean value) - Specified by:
set
in interfaceBooleanBigList
- Overrides:
set
in classAbstractBooleanBigList
-
add
public void add(long index, boolean value) - Specified by:
add
in interfaceBooleanBigList
- Overrides:
add
in classAbstractBooleanBigList
-
set
public void set(long index, int value) Description copied from interface:BitVector
Sets the value of the specified bit as an integer (optional operation).This method is a useful synonym for
BooleanBigList.set(long, boolean)
. -
add
public void add(long index, int value) Description copied from interface:BitVector
Adds a bit with specified integer value at the specified index (optional operation).This method is a useful synonym for
BooleanBigList.add(long, boolean)
. -
add
public boolean add(boolean value) - Specified by:
add
in interfaceBooleanCollection
- Overrides:
add
in classAbstractBooleanBigList
-
add
public void add(int value) Description copied from interface:BitVector
Adds a bit with specified value at the end of this bit vector.This method is a useful synonym for
BooleanList.add(boolean)
. -
append
Description copied from interface:BitVector
Appends the less significant bits of a long integer to this bit vector. -
append
Description copied from interface:BitVector
Appends another bit vector to this bit vector. -
copy
Description copied from interface:BitVector
Returns a copy of this bit vector. -
copy
Description copied from interface:BitVector
Returns a copy of a part of this bit vector. -
fast
Returns an instance ofLongArrayBitVector
containing a copy of this bit vector.- Specified by:
fast
in interfaceBitVector
- Returns:
- an instance of
LongArrayBitVector
containing a copy of this bit vector.
-
count
public long count()Description copied from interface:BitVector
Counts the number of bits set to true in this bit vector. -
firstOne
public long firstOne()Description copied from interface:BitVector
Returns the position of the first bit set in this bit vector. -
lastOne
public long lastOne()Description copied from interface:BitVector
Returns the position of the last bit set in this bit vector. -
firstZero
public long firstZero()Description copied from interface:BitVector
Returns the position of the first bit unset in this bit vector. -
lastZero
public long lastZero()Description copied from interface:BitVector
Returns the position of the last bit unset in this bit vector. -
nextOne
public long nextOne(long index) Description copied from interface:BitVector
Returns the position of the first bit set at of after the given position. -
previousOne
public long previousOne(long index) Description copied from interface:BitVector
Returns the position of the first bit set strictly before the given position.- Specified by:
previousOne
in interfaceBitVector
- Parameters:
index
- a bit position.- Returns:
- the position of the first bit set strictly before position
index
, or -1 if no such bit exists.
-
nextZero
public long nextZero(long index) Description copied from interface:BitVector
Returns the position of the first bit unset after the given position. -
previousZero
public long previousZero(long index) Description copied from interface:BitVector
Returns the position of the first bit unset before or at the given position.- Specified by:
previousZero
in interfaceBitVector
- Parameters:
index
- a bit position.- Returns:
- the first bit unset before or at the given position, or -1 if no such bit exists.
-
longestCommonPrefixLength
Description copied from interface:BitVector
Returns the length of the greatest common prefix between this and the specified bit vector.- Specified by:
longestCommonPrefixLength
in interfaceBitVector
- Parameters:
v
- a bit vector.- Returns:
- the length of the greatest common prefix.
-
isPrefix
Description copied from interface:BitVector
Returns true if this bit vector is a prefix of the specified bit vector. -
isProperPrefix
Description copied from interface:BitVector
Returns true if this bit vector is a proper prefix of the specified bit vector.- Specified by:
isProperPrefix
in interfaceBitVector
- Parameters:
v
- a bit vector.- Returns:
- true if this bit vector is a proper prefix of
v
(i.e., it is a prefix but not equal).
-
and
Description copied from interface:BitVector
Performs a logical and between this bit vector and another one, leaving the result in this vector. -
or
Description copied from interface:BitVector
Performs a logical or between this bit vector and another one, leaving the result in this bit vector. -
xor
Description copied from interface:BitVector
Performs a logical xor between this bit vector and another one, leaving the result in this vector. -
size
Deprecated.Description copied from interface:BitVector
-
size64
public long size64()- Specified by:
size64
in interfaceSize64
- Implementation Specification:
- This implementation just returns
BitVector.length()
.
-
clear
public void clear()- Specified by:
clear
in interfaceCollection<Boolean>
- Overrides:
clear
in classAbstractBooleanBigList
-
replace
Replaces the content of this bit vector with another bit vector. -
equals
- Specified by:
equals
in interfaceCollection<Boolean>
- Overrides:
equals
in classAbstractBooleanBigList
-
equals
Description copied from interface:BitVector
Checks for equality with a segment of another vector. -
hashCode
public int hashCode()Description copied from interface:BitVector
Returns a hash code for this bit vector.Hash codes for bit vectors are defined as follows:
final long length = length(); long fullLength = length & -Long.SIZE; long h = 0x9e3779b97f4a7c13L ^ length; for(long i = 0; i < fullLength; i += Long.SIZE) h ^= (h << 5) + getLong(i, i + Long.SIZE) + (h >>> 2); if (length != fullLength) h ^= (h << 5) + getLong(fullLength, length) + (h >>> 2); (int)((h >>> 32) ^ h);
The last value is the hash code of the bit vector. This hashing is based on shift-add-xor hashing (M.V. Ramakrishna and Justin Zobel, “Performance in practice of string hashing functions”, Proc. of the Fifth International Conference on Database Systems for Advanced Applications, 1997, pages 215−223).
The returned value is not a high-quality hash such as Jenkins's, but it can be computed very quickly; in any case, 32 bits are too few for a high-quality hash to be used in large-scale applications.
Important: all bit vector implementations are required to return the value defined here. The simplest way to obtain this result is to subclass
AbstractBitVector
.- Specified by:
hashCode
in interfaceBitVector
- Specified by:
hashCode
in interfaceCollection<Boolean>
- Overrides:
hashCode
in classAbstractBooleanBigList
- Returns:
- a hash code for this bit vector.
-
bits
public long[] bits()Description copied from interface:BitVector
Returns the bits in this bit vector as an array of longs, not to be modified.- Specified by:
bits
in interfaceBitVector
- Returns:
- an array of longs whose first
BitVector.length()
bits contain the bits of this bit vector. The array cannot be modified.
-
length
Description copied from interface:BitVector
Sets the number of bits in this bit vector.It is expected that this method will try to allocate exactly the necessary space.
If the argument fits an integer, this method has the same side effects of
BooleanList.size(int)
. In any case, this method has the same side effects ofBigList.size(long)
, but it is preferred, as it has the advantage of returning this bit vector, thus making it possible to chain methods. -
size
public void size(long newSize) - Specified by:
size
in interfaceBigList<Boolean>
- Overrides:
size
in classAbstractBooleanBigList
-
asLongSet
Description copied from interface:BitVector
Returns a view of this bit vector as a sorted set of long integers.More formally, this bit vector is infinitely extended to the left with zeros (e.g., all bits beyond
BitVector.length(long)
are considered zeroes). The resulting infinite string is interpreted as the characteristic function of a set of integers.Note that, in particular, the resulting string representation is exactly that of a
BitSet
. -
asLongBigList
Description copied from interface:BitVector
Returns a view of this bit vector as a list of nonnegative integers of specified width.More formally,
getLong(p)
will return the nonnegative integer defined by the bits starting atp * width
(bit 0, inclusive) and ending at(p + 1) * width
(bitwidth
− 1, exclusive).- Specified by:
asLongBigList
in interfaceBitVector
- Parameters:
width
- a bit width.- Returns:
- a view of this bit vector as a list of nonnegative integers of specified width.
-
subVector
Description copied from interface:BitVector
Returns a subvector view specified by initial and final index.The object returned by this method is a bit vector representing a view of this bit vector restricted to the given indices. Changes to the subvector will be reflected in the main vector.
-
subVector
Description copied from interface:BitVector
Returns a subvector view specified by initial index and running up to the end of this bit vector. -
compareTo
- Specified by:
compareTo
in interfaceComparable<BigList<? extends Boolean>>
- Overrides:
compareTo
in classAbstractBooleanBigList
-
compareTo
Compares lexicographically this bit vector with another bit vector.- Parameters:
v
- another bit vector.- Returns:
- -1, 0, or 1, depending on the lexicographical order of the two vectors.
- Implementation Notes:
- This method compares the two bit vectors by extracting a 64-bit word at a time using
BitVector.getLong(long, long)
.
-
toString
Returns a string representation of this vector.Note that this string representation shows the bit of index 0 at the leftmost position.
- Overrides:
toString
in classAbstractBooleanBigList
- Returns:
- a string representation of this vector, with the bit of index 0 on the left.
-