aboutsummaryrefslogtreecommitdiff
path: root/libcxx/include/__iterator/reverse_iterator.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/include/__iterator/reverse_iterator.h')
-rw-r--r--libcxx/include/__iterator/reverse_iterator.h39
1 files changed, 7 insertions, 32 deletions
diff --git a/libcxx/include/__iterator/reverse_iterator.h b/libcxx/include/__iterator/reverse_iterator.h
index a915609dbe33..7f4ef3c3d503 100644
--- a/libcxx/include/__iterator/reverse_iterator.h
+++ b/libcxx/include/__iterator/reverse_iterator.h
@@ -332,41 +332,16 @@ using _ReverseWrapper = reverse_iterator<reverse_iterator<_Iter> >;
template <class _Iter, bool __b>
struct __unwrap_iter_impl<_ReverseWrapper<_Iter>, __b> {
- static _LIBCPP_CONSTEXPR decltype(std::__unwrap_iter(std::declval<_Iter>()))
- __apply(_ReverseWrapper<_Iter> __i) _NOEXCEPT {
- return std::__unwrap_iter(__i.base().base());
- }
-};
-
-template <class _OrigIter, class _UnwrappedIter>
-struct __rewrap_iter_impl<_ReverseWrapper<_OrigIter>, _UnwrappedIter> {
- template <class _Iter>
- struct _ReverseWrapperCount {
- static _LIBCPP_CONSTEXPR const size_t value = 1;
- };
-
- template <class _Iter>
- struct _ReverseWrapperCount<_ReverseWrapper<_Iter> > {
- static _LIBCPP_CONSTEXPR const size_t value = 1 + _ReverseWrapperCount<_Iter>::value;
- };
-
- template <size_t _RewrapCount, class _OIter, class _UIter, __enable_if_t<_RewrapCount != 0, int> = 0>
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR _ReverseWrapper<_OIter> __rewrap(_ReverseWrapper<_OIter> __iter1,
- _UIter __iter2) {
- return _ReverseWrapper<_OIter>(
- reverse_iterator<_OIter>(__rewrap<_RewrapCount - 1>(__iter1.base().base(), __iter2)));
- }
+ using _UnwrappedIter = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>()));
- template <size_t _RewrapCount, class _OIter, class _UIter, __enable_if_t<_RewrapCount == 0, int> = 0>
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR decltype(std::__rewrap_iter(std::declval<_OIter>(),
- std::declval<_UIter>()))
- __rewrap(_OIter __iter1, _UIter __iter2) {
- return std::__rewrap_iter(__iter1, __iter2);
+ static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ReverseWrapper<_Iter>
+ __rewrap(_ReverseWrapper<_Iter> __orig_iter, _UnwrappedIter __unwrapped_iter) {
+ return _ReverseWrapper<_Iter>(
+ reverse_iterator<_Iter>(__unwrap_iter_impl<_Iter>::__rewrap(__orig_iter.base().base(), __unwrapped_iter)));
}
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR _ReverseWrapper<_OrigIter> __apply(_ReverseWrapper<_OrigIter> __iter1,
- _UnwrappedIter __iter2) {
- return __rewrap<_ReverseWrapperCount<_OrigIter>::value>(__iter1, __iter2);
+ static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _UnwrappedIter __unwrap(_ReverseWrapper<_Iter> __i) _NOEXCEPT {
+ return __unwrap_iter_impl<_Iter>::__unwrap(__i.base().base());
}
};