1fe6060f1SDimitry Andric // -*- C++ -*- 2fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 3fe6060f1SDimitry Andric // 4fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 6fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7fe6060f1SDimitry Andric // 8fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 9fe6060f1SDimitry Andric 10fe6060f1SDimitry Andric #ifndef _LIBCPP___FUNCTIONAL_DEFAULT_SEARCHER_H 11fe6060f1SDimitry Andric #define _LIBCPP___FUNCTIONAL_DEFAULT_SEARCHER_H 12fe6060f1SDimitry Andric 13fe6060f1SDimitry Andric #include <__algorithm/search.h> 14fe6060f1SDimitry Andric #include <__config> 15753f127fSDimitry Andric #include <__functional/identity.h> 16fe6060f1SDimitry Andric #include <__functional/operations.h> 17fe6060f1SDimitry Andric #include <__iterator/iterator_traits.h> 1881ad6265SDimitry Andric #include <__utility/pair.h> 19fe6060f1SDimitry Andric 20fe6060f1SDimitry Andric #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 21fe6060f1SDimitry Andric # pragma GCC system_header 22fe6060f1SDimitry Andric #endif 23fe6060f1SDimitry Andric 24fe6060f1SDimitry Andric _LIBCPP_BEGIN_NAMESPACE_STD 25fe6060f1SDimitry Andric 2606c3fb27SDimitry Andric #if _LIBCPP_STD_VER >= 17 27fe6060f1SDimitry Andric 28fe6060f1SDimitry Andric // default searcher 29fe6060f1SDimitry Andric template <class _ForwardIterator, class _BinaryPredicate = equal_to<>> 30fe6060f1SDimitry Andric class _LIBCPP_TEMPLATE_VIS default_searcher { 31fe6060f1SDimitry Andric public: 325f757f3fSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 33*cb14a3feSDimitry Andric default_searcher(_ForwardIterator __f, _ForwardIterator __l, _BinaryPredicate __p = _BinaryPredicate()) __first_(__f)34fe6060f1SDimitry Andric : __first_(__f), __last_(__l), __pred_(__p) {} 35fe6060f1SDimitry Andric 36fe6060f1SDimitry Andric template <typename _ForwardIterator2> 37*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_ForwardIterator2, _ForwardIterator2> operator()38*cb14a3feSDimitry Andric operator()(_ForwardIterator2 __f, _ForwardIterator2 __l) const { 39753f127fSDimitry Andric auto __proj = __identity(); 40753f127fSDimitry Andric return std::__search_impl(__f, __l, __first_, __last_, __pred_, __proj, __proj); 41fe6060f1SDimitry Andric } 42fe6060f1SDimitry Andric 43fe6060f1SDimitry Andric private: 44fe6060f1SDimitry Andric _ForwardIterator __first_; 45fe6060f1SDimitry Andric _ForwardIterator __last_; 46fe6060f1SDimitry Andric _BinaryPredicate __pred_; 47fe6060f1SDimitry Andric }; 48bdd1243dSDimitry Andric _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(default_searcher); 49fe6060f1SDimitry Andric 5006c3fb27SDimitry Andric #endif // _LIBCPP_STD_VER >= 17 51fe6060f1SDimitry Andric 52fe6060f1SDimitry Andric _LIBCPP_END_NAMESPACE_STD 53fe6060f1SDimitry Andric 54fe6060f1SDimitry Andric #endif // _LIBCPP___FUNCTIONAL_DEFAULT_SEARCHER_H 55