Skip to content

Commit 3e38d12

Browse files
authoredDec 13, 2023
Avoid false-positive warnings in stim::SparseXorVec::xor_item (#680)
1 parent 65677df commit 3e38d12

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed
 

‎src/stim/mem/sparse_xor_vec.h

+11-14
Original file line numberDiff line numberDiff line change
@@ -147,22 +147,19 @@ struct SparseXorVec {
147147
void xor_item(const T &item) {
148148
// Just do a linear scan to find the insertion point, instead of a binary search.
149149
// This is faster at small sizes, and complexity is linear anyways due to the shifting of later items.
150-
auto it = sorted_items.begin();
151-
while (true) {
152-
if (it == sorted_items.end()) {
153-
sorted_items.push_back(item);
154-
break;
150+
for (size_t k = 0; k < sorted_items.size(); k++) {
151+
const auto &v = sorted_items[k];
152+
if (v < item) {
153+
continue;
154+
} else if (v == item) {
155+
sorted_items.erase(sorted_items.begin() + k);
156+
return;
157+
} else {
158+
sorted_items.insert(sorted_items.begin() + k, item);
159+
return;
155160
}
156-
if (!(*it < item)) {
157-
if (*it == item) {
158-
sorted_items.erase(it);
159-
} else {
160-
sorted_items.insert(it, item);
161-
}
162-
break;
163-
}
164-
it++;
165161
}
162+
sorted_items.push_back(item);
166163
}
167164

168165
SparseXorVec &operator^=(const SparseXorVec<T> &other) {

0 commit comments

Comments
 (0)