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;
|
--ElementIter;
|
||||||
} else {
|
} else {
|
||||||
while (ElementIter != Elements.end() &&
|
while (ElementIter != Elements.end() &&
|
||||||
ElementIter->index() <= ElementIndex)
|
ElementIter->index() < ElementIndex)
|
||||||
++ElementIter;
|
++ElementIter;
|
||||||
--ElementIter;
|
|
||||||
}
|
}
|
||||||
CurrElementIter = ElementIter;
|
CurrElementIter = ElementIter;
|
||||||
return ElementIter;
|
return ElementIter;
|
||||||
|
@ -536,10 +535,17 @@ public:
|
||||||
if (ElementIter == Elements.end() ||
|
if (ElementIter == Elements.end() ||
|
||||||
ElementIter->index() != ElementIndex) {
|
ElementIter->index() != ElementIndex) {
|
||||||
Element = new SparseBitVectorElement<ElementSize>(ElementIndex);
|
Element = new SparseBitVectorElement<ElementSize>(ElementIndex);
|
||||||
// Insert does insert before, and lower bound gives the one before.
|
// We may have hit the beginning of our SparseBitVector, in which case,
|
||||||
ElementIter = Elements.insert(++ElementIter, Element);
|
// 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);
|
ElementIter->set(Idx % ElementSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue