forked from OSchip/llvm-project
Make SparseBitVector::set actually work properly when sets are not in ascending or descending order.
llvm-svn: 42604
This commit is contained in:
parent
01d7f489a9
commit
2738730c0f
|
@ -334,9 +334,8 @@ class SparseBitVector {
|
|||
--ElementIter;
|
||||
} else {
|
||||
while (ElementIter != Elements.end() &&
|
||||
ElementIter->index() <= ElementIndex)
|
||||
ElementIter->index() < ElementIndex)
|
||||
++ElementIter;
|
||||
--ElementIter;
|
||||
}
|
||||
CurrElementIter = ElementIter;
|
||||
return ElementIter;
|
||||
|
@ -536,10 +535,17 @@ public:
|
|||
if (ElementIter == Elements.end() ||
|
||||
ElementIter->index() != ElementIndex) {
|
||||
Element = new SparseBitVectorElement<ElementSize>(ElementIndex);
|
||||
// Insert does insert before, and lower bound gives the one before.
|
||||
ElementIter = Elements.insert(++ElementIter, Element);
|
||||
// We may have hit the beginning of our SparseBitVector, in which case,
|
||||
// we may need to insert right after this element, which requires moving
|
||||
// the current iterator forward one, because insert does insert before.
|
||||
if (ElementIter->index() < ElementIndex)
|
||||
ElementIter = Elements.insert(++ElementIter, Element);
|
||||
else
|
||||
ElementIter = Elements.insert(ElementIter, Element);
|
||||
}
|
||||
}
|
||||
CurrElementIter = ElementIter;
|
||||
|
||||
ElementIter->set(Idx % ElementSize);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue