173ebcabfSKonstantin Varlamov //===----------------------------------------------------------------------===// 273ebcabfSKonstantin Varlamov // 373ebcabfSKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 473ebcabfSKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information. 573ebcabfSKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 673ebcabfSKonstantin Varlamov // 773ebcabfSKonstantin Varlamov //===----------------------------------------------------------------------===// 873ebcabfSKonstantin Varlamov 973ebcabfSKonstantin Varlamov #ifndef _LIBCPP___ALGORITHM_RANGES_INCLUDES_H 1073ebcabfSKonstantin Varlamov #define _LIBCPP___ALGORITHM_RANGES_INCLUDES_H 1173ebcabfSKonstantin Varlamov 1273ebcabfSKonstantin Varlamov #include <__algorithm/includes.h> 13c559964dSHui Xie #include <__algorithm/make_projected.h> 1473ebcabfSKonstantin Varlamov #include <__config> 1573ebcabfSKonstantin Varlamov #include <__functional/identity.h> 1673ebcabfSKonstantin Varlamov #include <__functional/invoke.h> 1773ebcabfSKonstantin Varlamov #include <__functional/ranges_operations.h> 1873ebcabfSKonstantin Varlamov #include <__iterator/concepts.h> 1973ebcabfSKonstantin Varlamov #include <__iterator/iterator_traits.h> 2073ebcabfSKonstantin Varlamov #include <__iterator/projected.h> 2173ebcabfSKonstantin Varlamov #include <__ranges/access.h> 2273ebcabfSKonstantin Varlamov #include <__ranges/concepts.h> 2373ebcabfSKonstantin Varlamov #include <__utility/forward.h> 2473ebcabfSKonstantin Varlamov #include <__utility/move.h> 2573ebcabfSKonstantin Varlamov 2673ebcabfSKonstantin Varlamov #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2773ebcabfSKonstantin Varlamov # pragma GCC system_header 2873ebcabfSKonstantin Varlamov #endif 2973ebcabfSKonstantin Varlamov 307b462251SLouis Dionne _LIBCPP_PUSH_MACROS 317b462251SLouis Dionne #include <__undef_macros> 327b462251SLouis Dionne 334f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 3473ebcabfSKonstantin Varlamov 3573ebcabfSKonstantin Varlamov _LIBCPP_BEGIN_NAMESPACE_STD 3673ebcabfSKonstantin Varlamov 3773ebcabfSKonstantin Varlamov namespace ranges { 38*d10dc5a0SChristopher Di Bella struct __includes { 395aa03b64SLouis Dionne template <input_iterator _Iter1, 40c559964dSHui Xie sentinel_for<_Iter1> _Sent1, 41c559964dSHui Xie input_iterator _Iter2, 42c559964dSHui Xie sentinel_for<_Iter2> _Sent2, 43c559964dSHui Xie class _Proj1 = identity, 44c559964dSHui Xie class _Proj2 = identity, 4573ebcabfSKonstantin Varlamov indirect_strict_weak_order<projected<_Iter1, _Proj1>, projected<_Iter2, _Proj2>> _Comp = ranges::less> 4683bc7b57SNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( 47c559964dSHui Xie _Iter1 __first1, 48c559964dSHui Xie _Sent1 __last1, 49c559964dSHui Xie _Iter2 __first2, 50c559964dSHui Xie _Sent2 __last2, 51c559964dSHui Xie _Comp __comp = {}, 52c559964dSHui Xie _Proj1 __proj1 = {}, 53c559964dSHui Xie _Proj2 __proj2 = {}) const { 54c559964dSHui Xie return std::__includes( 55c559964dSHui Xie std::move(__first1), 56c559964dSHui Xie std::move(__last1), 57c559964dSHui Xie std::move(__first2), 58c559964dSHui Xie std::move(__last2), 59964aeb71SKonstantin Varlamov std::move(__comp), 60964aeb71SKonstantin Varlamov std::move(__proj1), 61964aeb71SKonstantin Varlamov std::move(__proj2)); 6273ebcabfSKonstantin Varlamov } 6373ebcabfSKonstantin Varlamov 645aa03b64SLouis Dionne template <input_range _Range1, 65c559964dSHui Xie input_range _Range2, 66c559964dSHui Xie class _Proj1 = identity, 67c559964dSHui Xie class _Proj2 = identity, 68c559964dSHui Xie indirect_strict_weak_order<projected<iterator_t<_Range1>, _Proj1>, projected<iterator_t<_Range2>, _Proj2>> 69c559964dSHui Xie _Comp = ranges::less> 7083bc7b57SNikolas Klauser [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( 71c559964dSHui Xie _Range1&& __range1, _Range2&& __range2, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { 72c559964dSHui Xie return std::__includes( 73c559964dSHui Xie ranges::begin(__range1), 74c559964dSHui Xie ranges::end(__range1), 75c559964dSHui Xie ranges::begin(__range2), 76c559964dSHui Xie ranges::end(__range2), 77964aeb71SKonstantin Varlamov std::move(__comp), 78964aeb71SKonstantin Varlamov std::move(__proj1), 79964aeb71SKonstantin Varlamov std::move(__proj2)); 8073ebcabfSKonstantin Varlamov } 8173ebcabfSKonstantin Varlamov }; 8273ebcabfSKonstantin Varlamov 8373ebcabfSKonstantin Varlamov inline namespace __cpo { 84*d10dc5a0SChristopher Di Bella inline constexpr auto includes = __includes{}; 8573ebcabfSKonstantin Varlamov } // namespace __cpo 8673ebcabfSKonstantin Varlamov } // namespace ranges 8773ebcabfSKonstantin Varlamov 8873ebcabfSKonstantin Varlamov _LIBCPP_END_NAMESPACE_STD 8973ebcabfSKonstantin Varlamov 904f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 9173ebcabfSKonstantin Varlamov 927b462251SLouis Dionne _LIBCPP_POP_MACROS 937b462251SLouis Dionne 9473ebcabfSKonstantin Varlamov #endif // _LIBCPP___ALGORITHM_RANGES_INCLUDES_H 95