/* * Copyright (c) 2021, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace AK { template TIterator, typename TUnaryPredicate> [[nodiscard]] constexpr TIterator find_if(TIterator first, TEndIterator last, TUnaryPredicate&& pred) { for (; first != last; ++first) { if (pred(*first)) { return first; } } return last; } template TIterator, typename T> [[nodiscard]] constexpr TIterator find(TIterator first, TEndIterator last, T const& value) { return find_if(first, last, [&](auto const& v) { return Traits::equals(value, v); }); } template TIterator, typename T> [[nodiscard]] constexpr size_t find_index(TIterator first, TEndIterator last, T const& value) requires(requires(TIterator it) { it.index(); }) { return find_if(first, last, [&](auto const& v) { return Traits::equals(value, v); }).index(); } }