| 505 | } |
| 506 | |
| 507 | void set(unsigned Idx) { |
| 508 | unsigned ElementIndex = Idx / ElementSize; |
| 509 | ElementListIter ElementIter; |
| 510 | if (Elements.empty()) { |
| 511 | ElementIter = Elements.emplace(Elements.end(), ElementIndex); |
| 512 | } else { |
| 513 | ElementIter = FindLowerBound(ElementIndex); |
| 514 | |
| 515 | if (ElementIter == Elements.end() || |
| 516 | ElementIter->index() != ElementIndex) { |
| 517 | // We may have hit the beginning of our SparseBitVector, in which case, |
| 518 | // we may need to insert right after this element, which requires moving |
| 519 | // the current iterator forward one, because insert does insert before. |
| 520 | if (ElementIter != Elements.end() && |
| 521 | ElementIter->index() < ElementIndex) |
| 522 | ++ElementIter; |
| 523 | ElementIter = Elements.emplace(ElementIter, ElementIndex); |
| 524 | } |
| 525 | } |
| 526 | CurrElementIter = ElementIter; |
| 527 | |
| 528 | ElementIter->set(Idx % ElementSize); |
| 529 | } |
| 530 | |
| 531 | bool test_and_set(unsigned Idx) { |
| 532 | bool old = test(Idx); |