176d0caaeSpatrick // -*- C++ -*- 276d0caaeSpatrick //===----------------------------------------------------------------------===// 376d0caaeSpatrick // 476d0caaeSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 576d0caaeSpatrick // See https://llvm.org/LICENSE.txt for license information. 676d0caaeSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 776d0caaeSpatrick // 876d0caaeSpatrick //===----------------------------------------------------------------------===// 976d0caaeSpatrick 1076d0caaeSpatrick #ifndef _LIBCPP___ITERATOR_REVERSE_ACCESS_H 1176d0caaeSpatrick #define _LIBCPP___ITERATOR_REVERSE_ACCESS_H 1276d0caaeSpatrick 1376d0caaeSpatrick #include <__config> 1476d0caaeSpatrick #include <__iterator/reverse_iterator.h> 1576d0caaeSpatrick #include <cstddef> 1676d0caaeSpatrick #include <initializer_list> 1776d0caaeSpatrick 1876d0caaeSpatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1976d0caaeSpatrick # pragma GCC system_header 2076d0caaeSpatrick #endif 2176d0caaeSpatrick 2276d0caaeSpatrick _LIBCPP_BEGIN_NAMESPACE_STD 2376d0caaeSpatrick 2476d0caaeSpatrick #if _LIBCPP_STD_VER > 11 2576d0caaeSpatrick 2676d0caaeSpatrick template <class _Tp, size_t _Np> 27*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 rbegin(_Tp (& __array)[_Np])2876d0caaeSpatrickreverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np]) 2976d0caaeSpatrick { 3076d0caaeSpatrick return reverse_iterator<_Tp*>(__array + _Np); 3176d0caaeSpatrick } 3276d0caaeSpatrick 3376d0caaeSpatrick template <class _Tp, size_t _Np> 34*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 rend(_Tp (& __array)[_Np])3576d0caaeSpatrickreverse_iterator<_Tp*> rend(_Tp (&__array)[_Np]) 3676d0caaeSpatrick { 3776d0caaeSpatrick return reverse_iterator<_Tp*>(__array); 3876d0caaeSpatrick } 3976d0caaeSpatrick 4076d0caaeSpatrick template <class _Ep> 41*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 rbegin(initializer_list<_Ep> __il)4276d0caaeSpatrickreverse_iterator<const _Ep*> rbegin(initializer_list<_Ep> __il) 4376d0caaeSpatrick { 4476d0caaeSpatrick return reverse_iterator<const _Ep*>(__il.end()); 4576d0caaeSpatrick } 4676d0caaeSpatrick 4776d0caaeSpatrick template <class _Ep> 48*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 rend(initializer_list<_Ep> __il)4976d0caaeSpatrickreverse_iterator<const _Ep*> rend(initializer_list<_Ep> __il) 5076d0caaeSpatrick { 5176d0caaeSpatrick return reverse_iterator<const _Ep*>(__il.begin()); 5276d0caaeSpatrick } 5376d0caaeSpatrick 5476d0caaeSpatrick template <class _Cp> 55*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 5676d0caaeSpatrick auto rbegin(_Cp& __c) -> decltype(__c.rbegin()) 5776d0caaeSpatrick { 5876d0caaeSpatrick return __c.rbegin(); 5976d0caaeSpatrick } 6076d0caaeSpatrick 6176d0caaeSpatrick template <class _Cp> 62*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 6376d0caaeSpatrick auto rbegin(const _Cp& __c) -> decltype(__c.rbegin()) 6476d0caaeSpatrick { 6576d0caaeSpatrick return __c.rbegin(); 6676d0caaeSpatrick } 6776d0caaeSpatrick 6876d0caaeSpatrick template <class _Cp> 69*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 7076d0caaeSpatrick auto rend(_Cp& __c) -> decltype(__c.rend()) 7176d0caaeSpatrick { 7276d0caaeSpatrick return __c.rend(); 7376d0caaeSpatrick } 7476d0caaeSpatrick 7576d0caaeSpatrick template <class _Cp> 76*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 7776d0caaeSpatrick auto rend(const _Cp& __c) -> decltype(__c.rend()) 7876d0caaeSpatrick { 7976d0caaeSpatrick return __c.rend(); 8076d0caaeSpatrick } 8176d0caaeSpatrick 8276d0caaeSpatrick template <class _Cp> 83*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 8476d0caaeSpatrick auto crbegin(const _Cp& __c) -> decltype(_VSTD::rbegin(__c)) 8576d0caaeSpatrick { 8676d0caaeSpatrick return _VSTD::rbegin(__c); 8776d0caaeSpatrick } 8876d0caaeSpatrick 8976d0caaeSpatrick template <class _Cp> 90*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX17 9176d0caaeSpatrick auto crend(const _Cp& __c) -> decltype(_VSTD::rend(__c)) 9276d0caaeSpatrick { 9376d0caaeSpatrick return _VSTD::rend(__c); 9476d0caaeSpatrick } 9576d0caaeSpatrick 96*4bdff4beSrobert #endif // _LIBCPP_STD_VER > 11 9776d0caaeSpatrick 9876d0caaeSpatrick _LIBCPP_END_NAMESPACE_STD 9976d0caaeSpatrick 10076d0caaeSpatrick #endif // _LIBCPP___ITERATOR_REVERSE_ACCESS_H 101