LLVM 20.0.0git
|
SparseBitVector is an implementation of a bitvector that is sparse by only storing the elements that have non-zero bits set. More...
#include "llvm/ADT/SparseBitVector.h"
Public Types | |
enum | { BITWORD_SIZE = sizeof(BitWord) * CHAR_BIT , BITWORDS_PER_ELEMENT = (ElementSize + BITWORD_SIZE - 1) / BITWORD_SIZE , BITS_PER_ELEMENT = ElementSize } |
using | BitWord = unsigned long |
using | size_type = unsigned |
SparseBitVector is an implementation of a bitvector that is sparse by only storing the elements that have non-zero bits set.
In order to make this fast for the most common cases, SparseBitVector is implemented as a linked list of SparseBitVectorElements. We maintain a pointer to the last SparseBitVectorElement accessed (in the form of a list iterator), in order to make multiple in-order test/set constant time after the first one is executed. Note that using vectors to store SparseBitVectorElement's does not work out very well because it causes insertion in the middle to take enormous amounts of time with a large amount of bits. Other structures that have better worst cases for insertion in the middle (various balanced trees, etc) do not perform as well in practice as a linked list with this iterator kept up to date. They are also significantly more memory intensive.
Definition at line 42 of file SparseBitVector.h.
using llvm::SparseBitVectorElement< ElementSize >::BitWord = unsigned long |
Definition at line 44 of file SparseBitVector.h.
using llvm::SparseBitVectorElement< ElementSize >::size_type = unsigned |
Definition at line 45 of file SparseBitVector.h.
anonymous enum |
Enumerator | |
---|---|
BITWORD_SIZE | |
BITWORDS_PER_ELEMENT | |
BITS_PER_ELEMENT |
Definition at line 46 of file SparseBitVector.h.
|
inlineexplicit |
Definition at line 63 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and Idx.
|
inline |
Definition at line 120 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and llvm::popcount().
|
inline |
Definition at line 92 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT.
|
inline |
find_first - Returns the index of the first set bit.
Definition at line 128 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, llvm::countr_zero(), and llvm_unreachable.
|
inline |
find_last - Returns the index of the last set bit.
Definition at line 136 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, llvm::countl_zero(), I, Idx, and llvm_unreachable.
|
inline |
find_next - Returns the index of the next set bit starting from the "Curr" bit.
Returns -1 if the next set bit is not found.
Definition at line 148 of file SparseBitVector.h.
References assert(), llvm::SparseBitVectorElement< ElementSize >::BITS_PER_ELEMENT, llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and llvm::countr_zero().
|
inline |
Definition at line 88 of file SparseBitVector.h.
|
inline |
Definition at line 185 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and RHS.
|
inline |
Definition at line 195 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and RHS.
|
inline |
Definition at line 218 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT.
|
inline |
Definition at line 240 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT.
|
inline |
Definition at line 78 of file SparseBitVector.h.
References RHS.
|
inline |
Definition at line 69 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and RHS.
|
inline |
Definition at line 112 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, and Idx.
|
inline |
Definition at line 99 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, and Idx.
Referenced by llvm::SparseBitVectorElement< ElementSize >::test_and_set().
|
inline |
Definition at line 116 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORD_SIZE, and Idx.
|
inline |
Definition at line 103 of file SparseBitVector.h.
References Idx, llvm::SparseBitVectorElement< ElementSize >::set(), and test.
|
inline |
Definition at line 172 of file SparseBitVector.h.
References llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and RHS.
|
inline |
Definition at line 83 of file SparseBitVector.h.
References assert(), llvm::SparseBitVectorElement< ElementSize >::BITWORDS_PER_ELEMENT, and Idx.