5 #ifndef UTIL_SPARSE_SET_H_
6 #define UTIL_SPARSE_SET_H_
52 #define __has_feature(x) 0
57 #if __has_feature(memory_sanitizer)
58 #include <sanitizer/msan_interface.h>
68 template<
typename Value>
105 void resize(
int new_max_size);
128 static bool less(
int a,
int b);
146 assert(
false &&
"illegal index");
152 if (!allow_existing) {
176 #if __has_feature(memory_sanitizer)
178 #elif defined(RE2_ON_VALGRIND)
190 template<
typename Value>
195 template<
typename Value>
197 DebugCheckInvariants();
198 if (new_max_size > max_size()) {
199 const int old_max_size = max_size();
205 std::copy_n(sparse_.data(), old_max_size,
a.data());
206 std::copy_n(dense_.data(), old_max_size,
b.data());
211 MaybeInitializeMemory(old_max_size, new_max_size);
213 if (
size_ > new_max_size)
214 size_ = new_max_size;
215 DebugCheckInvariants();
219 template<
typename Value>
222 assert(
i < max_size());
228 dense_[sparse_[
i]] ==
i;
231 template<
typename Value>
234 assert(
size_ < max_size());
241 sparse_(max_size), dense_(max_size) {
247 DebugCheckInvariants();
252 assert(
size_ <= max_size());
264 #endif // UTIL_SPARSE_SET_H_