34 lines
946 B
C++
34 lines
946 B
C++
// Copyright 2021 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_CONTAINERS_CXX20_ERASE_INTERNAL_H_
|
|
#define BASE_CONTAINERS_CXX20_ERASE_INTERNAL_H_
|
|
|
|
// Internal portion of base/containers/cxx20_erase_*.h. Please include those
|
|
// headers instead of including this directly.
|
|
|
|
namespace base {
|
|
|
|
namespace internal {
|
|
|
|
// Calls erase on iterators of matching elements and returns the number of
|
|
// removed elements.
|
|
template <typename Container, typename Predicate>
|
|
size_t IterateAndEraseIf(Container& container, Predicate pred) {
|
|
size_t old_size = container.size();
|
|
for (auto it = container.begin(), last = container.end(); it != last;) {
|
|
if (pred(*it))
|
|
it = container.erase(it);
|
|
else
|
|
++it;
|
|
}
|
|
return old_size - container.size();
|
|
}
|
|
|
|
} // namespace internal
|
|
|
|
} // namespace base
|
|
|
|
#endif // BASE_CONTAINERS_CXX20_ERASE_INTERNAL_H_
|