map/multi_fixed: add erase_keys
This commit is contained in:
parent
24d31b216b
commit
b4eea9f1fe
@ -236,6 +236,19 @@ namespace cruft::map {
|
||||
m_store.data[m_size].~value_type ();
|
||||
}
|
||||
|
||||
template <typename IteratorT>
|
||||
void
|
||||
erase_keys (IteratorT first, IteratorT last)
|
||||
{
|
||||
CHECK (std::is_sorted (first, last));
|
||||
|
||||
// HACK: This is hopelessly naive, but it works.
|
||||
for (auto cursor = first; cursor != last; ++cursor)
|
||||
if (auto pos = find (*cursor); pos != end ())
|
||||
erase (pos);
|
||||
}
|
||||
|
||||
|
||||
std::size_t erase (key_type const&);
|
||||
|
||||
bool empty (void) const { return m_size == 0; }
|
||||
|
@ -87,6 +87,15 @@ int main ()
|
||||
tap.expect_eq (init, expected, "erase of last element");
|
||||
}
|
||||
|
||||
{
|
||||
cruft::map::multi_fixed<4, int, int> init {{ {0,0}, {1,1}, {2,2}, {3,3} }};
|
||||
static constexpr int keys[] = { 1, 3 };
|
||||
init.erase_keys (std::begin (keys), std::end (keys));
|
||||
cruft::map::multi_fixed<4, int, int> expected {{ {0,0}, {2,2} }};
|
||||
tap.expect_eq (init, expected, "erase_keys");
|
||||
}
|
||||
|
||||
|
||||
test_sorted_iterators (tap);
|
||||
test_bad_alloc (tap);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user