Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__algorithm/ranges_set_union.h
Show All 36 Lines | |||||
namespace ranges { | namespace ranges { | ||||
template <class _InIter1, class _InIter2, class _OutIter> | template <class _InIter1, class _InIter2, class _OutIter> | ||||
using set_union_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; | using set_union_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; | ||||
namespace __set_union { | namespace __set_union { | ||||
struct __fn { | struct __fn { | ||||
template < | |||||
template <input_iterator _InIter1, sentinel_for<_InIter1> _Sent1, | input_iterator _InIter1, | ||||
input_iterator _InIter2, sentinel_for<_InIter2> _Sent2, | sentinel_for<_InIter1> _Sent1, | ||||
weakly_incrementable _OutIter, class _Comp = ranges::less, | input_iterator _InIter2, | ||||
class _Proj1 = identity, class _Proj2 = identity> | sentinel_for<_InIter2> _Sent2, | ||||
weakly_incrementable _OutIter, | |||||
class _Comp = ranges::less, | |||||
class _Proj1 = identity, | |||||
class _Proj2 = identity> | |||||
requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> | requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> | ||||
_LIBCPP_HIDE_FROM_ABI constexpr | _LIBCPP_HIDE_FROM_ABI constexpr set_union_result<_InIter1, _InIter2, _OutIter> operator()( | ||||
set_union_result<_InIter1, _InIter2, _OutIter> | _InIter1 __first1, | ||||
operator()(_InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Comp __comp = {}, | _Sent1 __last1, | ||||
_Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { | _InIter2 __first2, | ||||
// TODO: implement | _Sent2 __last2, | ||||
(void)__first1; (void)__last1; (void)__first2; (void)__last2; (void)__result; (void)__comp; (void)__proj1; | _OutIter __result, | ||||
(void)__proj2; | _Comp __comp = {}, | ||||
return {}; | _Proj1 __proj1 = {}, | ||||
_Proj2 __proj2 = {}) const { | |||||
auto __ret = std::__set_union( | |||||
std::move(__first1), | |||||
std::move(__last1), | |||||
std::move(__first2), | |||||
std::move(__last2), | |||||
std::move(__result), | |||||
ranges::__make_projected_comp(__comp, __proj1, __proj2)); | |||||
return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; | |||||
} | } | ||||
template <input_range _Range1, input_range _Range2, weakly_incrementable _OutIter, | template < | ||||
class _Comp = ranges::less, class _Proj1 = identity, class _Proj2 = identity> | input_range _Range1, | ||||
requires mergeable<iterator_t<_Range1>, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> | input_range _Range2, | ||||
_LIBCPP_HIDE_FROM_ABI constexpr | weakly_incrementable _OutIter, | ||||
set_union_result<borrowed_iterator_t<_Range1>, borrowed_iterator_t<_Range2>, _OutIter> | class _Comp = ranges::less, | ||||
operator()(_Range1&& __range1, _Range2&& __range2, _OutIter __result, _Comp __comp = {}, | class _Proj1 = identity, | ||||
_Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { | class _Proj2 = identity> | ||||
// TODO: implement | requires mergeable< | ||||
(void)__range1; (void)__range2; (void)__result; (void)__comp; (void)__proj1; (void)__proj2; | iterator_t<_Range1>, | ||||
return {}; | iterator_t<_Range2>, | ||||
_OutIter, | |||||
_Comp, | |||||
_Proj1, | |||||
_Proj2> | |||||
_LIBCPP_HIDE_FROM_ABI constexpr set_union_result<borrowed_iterator_t<_Range1>, | |||||
borrowed_iterator_t<_Range2>, | |||||
_OutIter> | |||||
operator()( | |||||
_Range1&& __range1, | |||||
_Range2&& __range2, | |||||
_OutIter __result, | |||||
_Comp __comp = {}, | |||||
_Proj1 __proj1 = {}, | |||||
_Proj2 __proj2 = {}) const { | |||||
auto __ret = std::__set_union( | |||||
ranges::begin(__range1), | |||||
ranges::end(__range1), | |||||
ranges::begin(__range2), | |||||
ranges::end(__range2), | |||||
std::move(__result), | |||||
ranges::__make_projected_comp(__comp, __proj1, __proj2)); | |||||
return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; | |||||
} | } | ||||
}; | }; | ||||
} // namespace __set_union | } // namespace __set_union | ||||
inline namespace __cpo { | inline namespace __cpo { | ||||
inline constexpr auto set_union = __set_union::__fn{}; | inline constexpr auto set_union = __set_union::__fn{}; | ||||
} // namespace __cpo | } // namespace __cpo | ||||
} // namespace ranges | } // namespace ranges | ||||
_LIBCPP_END_NAMESPACE_STD | _LIBCPP_END_NAMESPACE_STD | ||||
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES) | #endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES) | ||||
#endif // _LIBCPP___ALGORITHM_RANGES_SET_UNION_H | #endif // _LIBCPP___ALGORITHM_RANGES_SET_UNION_H |