Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__algorithm/set_symmetric_difference.h
Show All 35 Lines | |||||
}; | }; | ||||
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_symmetric_difference_result<_InIter1, _InIter2, _OutIter> | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter> | ||||
__set_symmetric_difference( | __set_symmetric_difference( | ||||
_InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { | _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { | ||||
while (__first1 != __last1) { | while (__first1 != __last1) { | ||||
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_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( | return __set_symmetric_difference_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(*__first1, *__first2)) { | if (__comp(*__first1, *__first2)) { | ||||
*__result = *__first1; | *__result = *__first1; | ||||
++__result; | ++__result; | ||||
++__first1; | ++__first1; | ||||
} else { | } else { | ||||
if (__comp(*__first2, *__first1)) { | if (__comp(*__first2, *__first1)) { | ||||
*__result = *__first2; | *__result = *__first2; | ||||
++__result; | ++__result; | ||||
} else { | } else { | ||||
++__first1; | ++__first1; | ||||
} | } | ||||
++__first2; | ++__first2; | ||||
} | } | ||||
} | } | ||||
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_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( | return __set_symmetric_difference_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_symmetric_difference( | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_symmetric_difference( | ||||
_InputIterator1 __first1, | _InputIterator1 __first1, | ||||
_InputIterator1 __last1, | _InputIterator1 __last1, | ||||
Show All 34 Lines |