xref: /openbsd-src/gnu/llvm/libcxx/include/__algorithm/mismatch.h (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
176d0caaeSpatrick // -*- C++ -*-
276d0caaeSpatrick //===----------------------------------------------------------------------===//
376d0caaeSpatrick //
476d0caaeSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
576d0caaeSpatrick // See https://llvm.org/LICENSE.txt for license information.
676d0caaeSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
776d0caaeSpatrick //
876d0caaeSpatrick //===----------------------------------------------------------------------===//
976d0caaeSpatrick 
1076d0caaeSpatrick #ifndef _LIBCPP___ALGORITHM_MISMATCH_H
1176d0caaeSpatrick #define _LIBCPP___ALGORITHM_MISMATCH_H
1276d0caaeSpatrick 
1376d0caaeSpatrick #include <__algorithm/comp.h>
14*4bdff4beSrobert #include <__config>
1576d0caaeSpatrick #include <__iterator/iterator_traits.h>
16*4bdff4beSrobert #include <__utility/pair.h>
1776d0caaeSpatrick 
1876d0caaeSpatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1976d0caaeSpatrick #  pragma GCC system_header
2076d0caaeSpatrick #endif
2176d0caaeSpatrick 
2276d0caaeSpatrick _LIBCPP_BEGIN_NAMESPACE_STD
2376d0caaeSpatrick 
2476d0caaeSpatrick template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
2576d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY
26*4bdff4beSrobert     _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1,_InputIterator1 __last1,_InputIterator2 __first2,_BinaryPredicate __pred)2776d0caaeSpatrick     mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) {
2876d0caaeSpatrick   for (; __first1 != __last1; ++__first1, (void)++__first2)
2976d0caaeSpatrick     if (!__pred(*__first1, *__first2))
3076d0caaeSpatrick       break;
3176d0caaeSpatrick   return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
3276d0caaeSpatrick }
3376d0caaeSpatrick 
3476d0caaeSpatrick template <class _InputIterator1, class _InputIterator2>
3576d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY
36*4bdff4beSrobert     _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1,_InputIterator1 __last1,_InputIterator2 __first2)3776d0caaeSpatrick     mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) {
38*4bdff4beSrobert   return std::mismatch(__first1, __last1, __first2, __equal_to());
3976d0caaeSpatrick }
4076d0caaeSpatrick 
4176d0caaeSpatrick #if _LIBCPP_STD_VER > 11
4276d0caaeSpatrick template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
4376d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY
44*4bdff4beSrobert     _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1,_InputIterator1 __last1,_InputIterator2 __first2,_InputIterator2 __last2,_BinaryPredicate __pred)4576d0caaeSpatrick     mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2,
4676d0caaeSpatrick              _BinaryPredicate __pred) {
4776d0caaeSpatrick   for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2)
4876d0caaeSpatrick     if (!__pred(*__first1, *__first2))
4976d0caaeSpatrick       break;
5076d0caaeSpatrick   return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
5176d0caaeSpatrick }
5276d0caaeSpatrick 
5376d0caaeSpatrick template <class _InputIterator1, class _InputIterator2>
5476d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY
55*4bdff4beSrobert     _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1,_InputIterator1 __last1,_InputIterator2 __first2,_InputIterator2 __last2)5676d0caaeSpatrick     mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) {
57*4bdff4beSrobert   return std::mismatch(__first1, __last1, __first2, __last2, __equal_to());
5876d0caaeSpatrick }
5976d0caaeSpatrick #endif
6076d0caaeSpatrick 
6176d0caaeSpatrick _LIBCPP_END_NAMESPACE_STD
6276d0caaeSpatrick 
6376d0caaeSpatrick #endif // _LIBCPP___ALGORITHM_MISMATCH_H
64