Fix the previous bug a slightly different way (by modifying how find_next works)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42613 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Berlin 2007-10-04 21:27:17 +00:00
parent 9d03724c8c
commit 08bb699843

View File

@ -168,15 +168,14 @@ public:
assert(0 && "Illegal empty element");
}
/// find_next - Returns the index of the next set bit following the
/// "Prev" bit. Returns -1 if the next set bit is not found.
int find_next(unsigned Prev) const {
++Prev;
if (Prev >= BITS_PER_ELEMENT)
/// 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.
int find_next(unsigned Curr) const {
if (Curr >= BITS_PER_ELEMENT)
return -1;
unsigned WordPos = Prev / BITWORD_SIZE;
unsigned BitPos = Prev % BITWORD_SIZE;
unsigned WordPos = Curr / BITWORD_SIZE;
unsigned BitPos = Curr % BITWORD_SIZE;
BitWord Copy = Bits[WordPos];
assert (WordPos <= BITWORDS_PER_ELEMENT
&& "Word Position outside of element");
@ -390,7 +389,7 @@ class SparseBitVector {
// See if we ran out of Bits in this word.
if (!Bits) {
int NextSetBitNumber = Iter->find_next((BitNumber - 1) % ElementSize) ;
int NextSetBitNumber = Iter->find_next(BitNumber % ElementSize) ;
// If we ran out of set bits in this element, move to next element.
if (NextSetBitNumber == -1 || (BitNumber % ElementSize == 0)) {
++Iter;
@ -546,7 +545,7 @@ public:
}
}
CurrElementIter = ElementIter;
ElementIter->set(Idx % ElementSize);
}