/* * Mirai. Copyright (C) 2024 Vyn * This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only) * The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt */ #ifndef CPP_UTILS_VECTOR_H #define CPP_UTILS_VECTOR_H #include #include namespace cpputils::vector { template concept AnyIterable = std::same_as && requires(C c) { { c.begin() } -> std::forward_iterator; { c.end() } -> std::forward_iterator; { const_cast(c).begin() } -> std::forward_iterator; { const_cast(c).end() } -> std::forward_iterator; }; template bool contains(const std::vector &vec, const T &value) { return std::ranges::find(vec, value) != vec.end(); } template bool containsAll(const std::vector &vec, const AnyIterable auto vec2) { for (auto &elem : vec) { if (!contains(vec2, elem)) { return false; } } return true; } } // namespace cpputils::vector #endif