Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__algorithm/set_union.h
Show All 34 Lines | __set_union_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) | ||||
: __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} | : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} | ||||
}; | }; | ||||
template <class _Compare, class _InIter1, class _Sent1, class _InIter2, class _Sent2, class _OutIter> | template <class _Compare, class _InIter1, class _Sent1, class _InIter2, class _Sent2, class _OutIter> | ||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __set_union_result<_InIter1, _InIter2, _OutIter> __set_union( | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __set_union_result<_InIter1, _InIter2, _OutIter> __set_union( | ||||
_InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { | _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { | ||||
for (; __first1 != __last1; ++__result) { | for (; __first1 != __last1; ++__result) { | ||||
if (__first2 == __last2) { | if (__first2 == __last2) { | ||||
auto __ret1 = std::__copy_impl(std::move(__first1), std::move(__last1), std::move(__result)); | auto __ret1 = std::__copy(std::move(__first1), std::move(__last1), std::move(__result)); | ||||
return __set_union_result<_InIter1, _InIter2, _OutIter>( | return __set_union_result<_InIter1, _InIter2, _OutIter>( | ||||
std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); | std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); | ||||
} | } | ||||
if (__comp(*__first2, *__first1)) { | if (__comp(*__first2, *__first1)) { | ||||
*__result = *__first2; | *__result = *__first2; | ||||
++__first2; | ++__first2; | ||||
} else { | } else { | ||||
if (!__comp(*__first1, *__first2)) { | if (!__comp(*__first1, *__first2)) { | ||||
++__first2; | ++__first2; | ||||
} | } | ||||
*__result = *__first1; | *__result = *__first1; | ||||
++__first1; | ++__first1; | ||||
} | } | ||||
} | } | ||||
auto __ret2 = std::__copy_impl(std::move(__first2), std::move(__last2), std::move(__result)); | auto __ret2 = std::__copy(std::move(__first2), std::move(__last2), std::move(__result)); | ||||
return __set_union_result<_InIter1, _InIter2, _OutIter>( | return __set_union_result<_InIter1, _InIter2, _OutIter>( | ||||
std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); | std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); | ||||
} | } | ||||
template <class _InputIterator1, class _InputIterator2, class _OutputIterator, class _Compare> | template <class _InputIterator1, class _InputIterator2, class _OutputIterator, class _Compare> | ||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_union( | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_union( | ||||
_InputIterator1 __first1, | _InputIterator1 __first1, | ||||
_InputIterator1 __last1, | _InputIterator1 __last1, | ||||
Show All 34 Lines |