29 #ifndef _GLIBCXX_ARRAY
30 #define _GLIBCXX_ARRAY 1
32 #pragma GCC system_header
34 #ifndef __GXX_EXPERIMENTAL_CXX0X__
41 namespace std _GLIBCXX_VISIBILITY(default)
43 _GLIBCXX_BEGIN_NAMESPACE_VERSION
59 template<
typename _Tp, std::
size_t _Nm>
62 typedef _Tp value_type;
64 typedef const _Tp* const_pointer;
65 typedef value_type& reference;
66 typedef const value_type& const_reference;
67 typedef value_type* iterator;
68 typedef const value_type* const_iterator;
69 typedef std::size_t size_type;
70 typedef std::ptrdiff_t difference_type;
75 value_type _M_instance[_Nm ? _Nm : 1];
81 fill(
const value_type& __u)
91 {
return iterator(std::__addressof(_M_instance[0])); }
95 {
return const_iterator(std::__addressof(_M_instance[0])); }
99 {
return iterator(std::__addressof(_M_instance[_Nm])); }
103 {
return const_iterator(std::__addressof(_M_instance[_Nm])); }
123 {
return const_iterator(std::__addressof(_M_instance[0])); }
127 {
return const_iterator(std::__addressof(_M_instance[_Nm])); }
139 size()
const {
return _Nm; }
142 max_size()
const {
return _Nm; }
145 empty()
const {
return size() == 0; }
149 operator[](size_type __n)
150 {
return _M_instance[__n]; }
153 operator[](size_type __n)
const
154 {
return _M_instance[__n]; }
160 std::__throw_out_of_range(__N(
"array::at"));
161 return _M_instance[__n];
165 at(size_type __n)
const
168 std::__throw_out_of_range(__N(
"array::at"));
169 return _M_instance[__n];
182 {
return _Nm ? *(end() - 1) : *end(); }
186 {
return _Nm ? *(end() - 1) : *end(); }
190 {
return std::__addressof(_M_instance[0]); }
194 {
return std::__addressof(_M_instance[0]); }
198 template<
typename _Tp, std::
size_t _Nm>
201 {
return std::equal(__one.begin(), __one.end(), __two.begin()); }
203 template<
typename _Tp, std::
size_t _Nm>
205 operator!=(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
206 {
return !(__one == __two); }
208 template<
typename _Tp, std::
size_t _Nm>
210 operator<(const array<_Tp, _Nm>& __a,
const array<_Tp, _Nm>& __b)
213 __b.begin(), __b.end());
216 template<
typename _Tp, std::
size_t _Nm>
218 operator>(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
219 {
return __two < __one; }
221 template<
typename _Tp, std::
size_t _Nm>
223 operator<=(const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
224 {
return !(__one > __two); }
226 template<
typename _Tp, std::
size_t _Nm>
228 operator>=(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
229 {
return !(__one < __two); }
232 template<
typename _Tp, std::
size_t _Nm>
234 swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
235 { __one.swap(__two); }
240 template<
typename _Tp>
244 template<std::
size_t _Int,
typename _Tp>
247 template<
typename _Tp, std::
size_t _Nm>
249 {
static const std::size_t value = _Nm; };
251 template<
typename _Tp, std::
size_t _Nm>
255 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
257 {
typedef _Tp type; };
259 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
261 get(array<_Tp, _Nm>& __arr)
262 {
return __arr[_Int]; }
264 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
266 get(
const array<_Tp, _Nm>& __arr)
267 {
return __arr[_Int]; }
269 _GLIBCXX_END_NAMESPACE_VERSION
272 #endif // __GXX_EXPERIMENTAL_CXX0X__
274 #endif // _GLIBCXX_ARRAY