diff options
author | Nikolas Klauser <nikolasklauser@berlin.de> | 2022-06-17 15:59:53 +0200 |
---|---|---|
committer | Nikolas Klauser <nikolasklauser@berlin.de> | 2022-06-17 18:47:18 +0200 |
commit | fb3477a4dab0fb75c4bac858c33e6006dcc173ea (patch) | |
tree | 2258c8edb3bc18a5ed5bb9e0a33a7aea5f22d205 /libcxx/include/__algorithm/copy.h | |
parent | 5fb67e32f8fdcbe8d140440c6d20a5dd219dba86 (diff) | |
download | llvm-fb3477a4dab0fb75c4bac858c33e6006dcc173ea.zip llvm-fb3477a4dab0fb75c4bac858c33e6006dcc173ea.tar.gz llvm-fb3477a4dab0fb75c4bac858c33e6006dcc173ea.tar.bz2 |
[libc++] Unwrap reverse_iterator<reverse_iterator<Iter>> in __unwrap_iter
Simplify the implementation of `std::copy` and `std::move` by using `__unwrap_iter` and `__rewrap_iter` to unwrap and rewrap `reverse_iterator<reverse_iterator<Iter>>` instead of specializing `__copy_impl` and `__move_impl`.
Reviewed By: ldionne, #libc
Spies: wenlei, libcxx-commits
Differential Revision: https://reviews.llvm.org/D127049
Diffstat (limited to 'libcxx/include/__algorithm/copy.h')
-rw-r--r-- | libcxx/include/__algorithm/copy.h | 19 |
1 files changed, 0 insertions, 19 deletions
diff --git a/libcxx/include/__algorithm/copy.h b/libcxx/include/__algorithm/copy.h index 2a4e535..886a1ac 100644 --- a/libcxx/include/__algorithm/copy.h +++ b/libcxx/include/__algorithm/copy.h @@ -74,13 +74,6 @@ __copy_impl(reverse_iterator<_InIter> __first, return std::make_pair(__last, reverse_iterator<_OutIter>(std::__rewrap_iter(__result.base(), __result_first))); } -template <class _InIter, class _Sent, class _OutIter> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX11 -pair<reverse_iterator<reverse_iterator<_InIter> >, reverse_iterator<reverse_iterator<_OutIter> > > -__copy_impl(reverse_iterator<reverse_iterator<_InIter> > __first, - reverse_iterator<reverse_iterator<_Sent> > __last, - reverse_iterator<reverse_iterator<_OutIter> > __result); - template <class _InIter, class _Sent, class _OutIter, __enable_if_t<!(is_copy_constructible<_InIter>::value && is_copy_constructible<_Sent>::value @@ -101,18 +94,6 @@ __copy(_InIter __first, _Sent __last, _OutIter __result) { return std::make_pair(std::__rewrap_iter(__first, __ret.first), std::__rewrap_iter(__result, __ret.second)); } -// __unwrap_iter can't unwrap random_access_iterators, so we need to unwrap two reverse_iterators manually -template <class _InIter, class _Sent, class _OutIter> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX11 -pair<reverse_iterator<reverse_iterator<_InIter> >, reverse_iterator<reverse_iterator<_OutIter> > > -__copy_impl(reverse_iterator<reverse_iterator<_InIter> > __first, - reverse_iterator<reverse_iterator<_Sent> > __last, - reverse_iterator<reverse_iterator<_OutIter> > __result) { - auto __ret = std::__copy(__first.base().base(), __last.base().base(), __result.base().base()); - return std::make_pair(reverse_iterator<reverse_iterator<_InIter> >(reverse_iterator<_InIter>(__ret.first)), - reverse_iterator<reverse_iterator<_OutIter> >(reverse_iterator<_OutIter>(__ret.second))); -} - template <class _InputIterator, class _OutputIterator> inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _OutputIterator |