--ElementIter;
} else {
while (ElementIter != Elements.end() &&
- ElementIter->index() <= ElementIndex)
+ ElementIter->index() < ElementIndex)
++ElementIter;
- --ElementIter;
}
CurrElementIter = ElementIter;
return ElementIter;
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);
}