File indexing completed on 2026-05-03 08:13:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _LIBCPP___ITERATOR_ACCESS_H
0011 #define _LIBCPP___ITERATOR_ACCESS_H
0012
0013 #include <__config>
0014 #include <__cstddef/size_t.h>
0015
0016 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0017 # pragma GCC system_header
0018 #endif
0019
0020 _LIBCPP_BEGIN_NAMESPACE_STD
0021
0022 template <class _Tp, size_t _Np>
0023 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* begin(_Tp (&__array)[_Np]) _NOEXCEPT {
0024 return __array;
0025 }
0026
0027 template <class _Tp, size_t _Np>
0028 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp* end(_Tp (&__array)[_Np]) _NOEXCEPT {
0029 return __array + _Np;
0030 }
0031
0032 #if !defined(_LIBCPP_CXX03_LANG)
0033
0034 template <class _Cp>
0035 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(_Cp& __c) -> decltype(__c.begin()) {
0036 return __c.begin();
0037 }
0038
0039 template <class _Cp>
0040 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto begin(const _Cp& __c) -> decltype(__c.begin()) {
0041 return __c.begin();
0042 }
0043
0044 template <class _Cp>
0045 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(_Cp& __c) -> decltype(__c.end()) {
0046 return __c.end();
0047 }
0048
0049 template <class _Cp>
0050 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto end(const _Cp& __c) -> decltype(__c.end()) {
0051 return __c.end();
0052 }
0053
0054 # if _LIBCPP_STD_VER >= 14
0055
0056 template <class _Cp>
0057 _LIBCPP_HIDE_FROM_ABI constexpr auto
0058 cbegin(const _Cp& __c) noexcept(noexcept(std::begin(__c))) -> decltype(std::begin(__c)) {
0059 return std::begin(__c);
0060 }
0061
0062 template <class _Cp>
0063 _LIBCPP_HIDE_FROM_ABI constexpr auto cend(const _Cp& __c) noexcept(noexcept(std::end(__c))) -> decltype(std::end(__c)) {
0064 return std::end(__c);
0065 }
0066
0067 # endif
0068
0069 #else
0070
0071 template <class _Cp>
0072 _LIBCPP_HIDE_FROM_ABI typename _Cp::iterator begin(_Cp& __c) {
0073 return __c.begin();
0074 }
0075
0076 template <class _Cp>
0077 _LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator begin(const _Cp& __c) {
0078 return __c.begin();
0079 }
0080
0081 template <class _Cp>
0082 _LIBCPP_HIDE_FROM_ABI typename _Cp::iterator end(_Cp& __c) {
0083 return __c.end();
0084 }
0085
0086 template <class _Cp>
0087 _LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator end(const _Cp& __c) {
0088 return __c.end();
0089 }
0090
0091 #endif
0092
0093 _LIBCPP_END_NAMESPACE_STD
0094
0095 #endif