1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:58:11 +00:00

Vector: Implement find, find_if, find_first_matching in terms of AK::find*

Problem:
- The implementation of `find` is coupled to the implementation of `Vector`.
- `Vector::find` takes the predicate by value which might be expensive.

Solution:
- Decouple the implementation of `find` from `Vector` by using a
  generic `find` algorithm.
- Change the name of `find` with a predicate to `find_if` so that a
  binding reference can be used and the predicate can be forwarded to
  avoid copies.
- Change all the `find(pred)` call sites to use `find_if`.
This commit is contained in:
Lenny Maiorani 2020-12-23 11:35:20 -07:00 committed by Andreas Kling
parent 4333a9a8d6
commit f99d1d3bd7
10 changed files with 48 additions and 29 deletions

View file

@ -187,7 +187,7 @@ void Cell::reference_from(Cell* other)
if (!other || other == this)
return;
if (!m_referencing_cells.find([other](auto& ptr) { return ptr.ptr() == other; }).is_end())
if (!m_referencing_cells.find_if([other](const auto& ptr) { return ptr.ptr() == other; }).is_end())
return;
m_referencing_cells.append(other->make_weak_ptr());