xref: /openbsd-src/gnu/llvm/libcxx/include/__iterator/reverse_access.h (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
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])2876d0caaeSpatrick reverse_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])3576d0caaeSpatrick reverse_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)4276d0caaeSpatrick reverse_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)4976d0caaeSpatrick reverse_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