| 783 | } |
| 784 | |
| 785 | void set(unsigned Idx) |
| 786 | { |
| 787 | unsigned ElementIndex = Idx / ElementSize; |
| 788 | ElementListIter ElementIter; |
| 789 | if (Elements.empty()) |
| 790 | { |
| 791 | ElementIter = Elements.emplace(Elements.end(), ElementIndex); |
| 792 | } |
| 793 | else |
| 794 | { |
| 795 | ElementIter = FindLowerBound(ElementIndex); |
| 796 | |
| 797 | if (ElementIter == Elements.end() || |
| 798 | ElementIter->index() != ElementIndex) |
| 799 | { |
| 800 | // We may have hit the beginning of our SparseBitVector, in which case, |
| 801 | // we may need to insert right after this element, which requires moving |
| 802 | // the current iterator forward one, because insert does insert before. |
| 803 | if (ElementIter != Elements.end() && |
| 804 | ElementIter->index() < ElementIndex) |
| 805 | ++ElementIter; |
| 806 | ElementIter = Elements.emplace(ElementIter, ElementIndex); |
| 807 | } |
| 808 | } |
| 809 | CurrElementIter = ElementIter; |
| 810 | |
| 811 | ElementIter->set(Idx % ElementSize); |
| 812 | } |
| 813 | |
| 814 | bool test_and_set(unsigned Idx) |
| 815 | { |
no test coverage detected