xref: /llvm-project/libcxx/include/__algorithm/find_first_of.h (revision b905bcc5090cde734e8b7bbceae13bd5a606cc14)
1134723edSLouis Dionne // -*- C++ -*-
2134723edSLouis Dionne //===----------------------------------------------------------------------===//
3134723edSLouis Dionne //
4134723edSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5134723edSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
6134723edSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7134723edSLouis Dionne //
8134723edSLouis Dionne //===----------------------------------------------------------------------===//
9134723edSLouis Dionne 
10134723edSLouis Dionne #ifndef _LIBCPP___ALGORITHM_FIND_FIRST_OF_H
11134723edSLouis Dionne #define _LIBCPP___ALGORITHM_FIND_FIRST_OF_H
12134723edSLouis Dionne 
13134723edSLouis Dionne #include <__algorithm/comp.h>
144d81a46fSArthur O'Dwyer #include <__config>
15134723edSLouis Dionne 
16134723edSLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
17134723edSLouis Dionne #  pragma GCC system_header
18134723edSLouis Dionne #endif
19134723edSLouis Dionne 
20134723edSLouis Dionne _LIBCPP_BEGIN_NAMESPACE_STD
21134723edSLouis Dionne 
22134723edSLouis Dionne template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
239783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator1 __find_first_of_ce(
249783f28cSLouis Dionne     _ForwardIterator1 __first1,
25134723edSLouis Dionne     _ForwardIterator1 __last1,
26134723edSLouis Dionne     _ForwardIterator2 __first2,
278ac015caSKonstantin Varlamov     _ForwardIterator2 __last2,
288ac015caSKonstantin Varlamov     _BinaryPredicate&& __pred) {
29134723edSLouis Dionne   for (; __first1 != __last1; ++__first1)
30134723edSLouis Dionne     for (_ForwardIterator2 __j = __first2; __j != __last2; ++__j)
31134723edSLouis Dionne       if (__pred(*__first1, *__j))
32134723edSLouis Dionne         return __first1;
33134723edSLouis Dionne   return __last1;
34134723edSLouis Dionne }
35134723edSLouis Dionne 
36134723edSLouis Dionne template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
37*17e0686aSNikolas Klauser [[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 find_first_of(
389783f28cSLouis Dionne     _ForwardIterator1 __first1,
399783f28cSLouis Dionne     _ForwardIterator1 __last1,
409783f28cSLouis Dionne     _ForwardIterator2 __first2,
419783f28cSLouis Dionne     _ForwardIterator2 __last2,
429783f28cSLouis Dionne     _BinaryPredicate __pred) {
4377a00c0dSLouis Dionne   return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __pred);
44134723edSLouis Dionne }
45134723edSLouis Dionne 
46134723edSLouis Dionne template <class _ForwardIterator1, class _ForwardIterator2>
47*17e0686aSNikolas Klauser [[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 find_first_of(
48134723edSLouis Dionne     _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) {
49e07ca2aeSAlvin Wong   return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __equal_to());
50134723edSLouis Dionne }
51134723edSLouis Dionne 
52134723edSLouis Dionne _LIBCPP_END_NAMESPACE_STD
53134723edSLouis Dionne 
54134723edSLouis Dionne #endif // _LIBCPP___ALGORITHM_FIND_FIRST_OF_H
55