diff options
author | Zoe Carver <z.zoelec2@gmail.com> | 2019-09-11 17:39:24 +0000 |
---|---|---|
committer | Zoe Carver <z.zoelec2@gmail.com> | 2019-09-11 17:39:24 +0000 |
commit | b51d5605b1817fdce33c5f30316b0b5a5aef5116 (patch) | |
tree | d2e1139d3931eb5b64e897d24c8df12f4dc7987f /libcxx/include | |
parent | 340b72520292d649fdbb0d5bcf78575870f302fc (diff) | |
download | bcm5719-llvm-b51d5605b1817fdce33c5f30316b0b5a5aef5116.tar.gz bcm5719-llvm-b51d5605b1817fdce33c5f30316b0b5a5aef5116.zip |
Consolidate swap, swap_ranges, and iter_swap in <type_traits>.
NFC. Thanks to @Quuxplusone (Arthur O'Dwyer) for this change.
llvm-svn: 371639
Diffstat (limited to 'libcxx/include')
-rw-r--r-- | libcxx/include/type_traits | 24 | ||||
-rw-r--r-- | libcxx/include/utility | 24 |
2 files changed, 26 insertions, 22 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 657c0d568dd..03e8bba5ec8 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -3652,6 +3652,13 @@ _LIBCPP_INLINE_VAR constexpr bool is_nothrow_invocable_r_v template <class _Tp> struct __is_swappable; template <class _Tp> struct __is_nothrow_swappable; +// swap, swap_ranges + +template <class _ForwardIterator1, class _ForwardIterator2> +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 +_ForwardIterator2 +swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2); + template <class _Tp> inline _LIBCPP_INLINE_VISIBILITY #ifndef _LIBCPP_CXX03_LANG @@ -3677,7 +3684,22 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 typename enable_if< __is_swappable<_Tp>::value >::type -swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value); +swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value) +{ + _VSTD::swap_ranges(__a, __a + _Np, __b); +} + +template <class _ForwardIterator1, class _ForwardIterator2> +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 +_ForwardIterator2 +swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) +{ + for(; __first1 != __last1; ++__first1, (void) ++__first2) + swap(*__first1, *__first2); + return __first2; +} + +// iter_swap template <class _ForwardIterator1, class _ForwardIterator2> inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 diff --git a/libcxx/include/utility b/libcxx/include/utility index a185818b6fc..64599c8d55d 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -248,29 +248,11 @@ operator>=(const _Tp& __x, const _Tp& __y) } // rel_ops -// swap_ranges +// swap_ranges is defined in <type_traits>` +// swap is defined in <type_traits> -template <class _ForwardIterator1, class _ForwardIterator2> -inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 -_ForwardIterator2 -swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) -{ - for(; __first1 != __last1; ++__first1, (void) ++__first2) - swap(*__first1, *__first2); - return __first2; -} - -// forward declared in <type_traits> -template<class _Tp, size_t _Np> -inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 -typename enable_if< - __is_swappable<_Tp>::value ->::type -swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value) -{ - _VSTD::swap_ranges(__a, __a + _Np, __b); -} +// move_if_noexcept template <class _Tp> inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 |