32 _GLIBCXX_BEGIN_NAMESPACE_TR1
48 template<
typename _Tp, std::
size_t _Nm>
51 typedef _Tp value_type;
52 typedef value_type& reference;
53 typedef const value_type& const_reference;
54 typedef value_type* iterator;
55 typedef const value_type* const_iterator;
56 typedef std::size_t size_type;
57 typedef std::ptrdiff_t difference_type;
62 value_type _M_instance[_Nm ? _Nm : 1];
67 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
69 fill(
const value_type& __u)
71 assign(
const value_type& __u)
82 {
return iterator(&_M_instance[0]); }
86 {
return const_iterator(&_M_instance[0]); }
90 {
return iterator(&_M_instance[_Nm]); }
94 {
return const_iterator(&_M_instance[_Nm]); }
112 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
115 {
return const_iterator(&_M_instance[0]); }
119 {
return const_iterator(&_M_instance[_Nm]); }
132 size()
const {
return _Nm; }
135 max_size()
const {
return _Nm; }
138 empty()
const {
return size() == 0; }
142 operator[](size_type __n)
143 {
return _M_instance[__n]; }
146 operator[](size_type __n)
const
147 {
return _M_instance[__n]; }
152 if (__builtin_expect(__n >= _Nm,
false))
153 std::__throw_out_of_range(__N(
"array::at"));
154 return _M_instance[__n];
158 at(size_type __n)
const
160 if (__builtin_expect(__n >= _Nm,
false))
161 std::__throw_out_of_range(__N(
"array::at"));
162 return _M_instance[__n];
175 {
return _Nm ? *(end() - 1) : *end(); }
179 {
return _Nm ? *(end() - 1) : *end(); }
183 {
return &_M_instance[0]; }
187 {
return &_M_instance[0]; }
191 template<
typename _Tp, std::
size_t _Nm>
194 {
return std::equal(__one.begin(), __one.end(), __two.begin()); }
196 template<
typename _Tp, std::
size_t _Nm>
198 operator!=(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
199 {
return !(__one == __two); }
201 template<
typename _Tp, std::
size_t _Nm>
203 operator<(const array<_Tp, _Nm>& __a,
const array<_Tp, _Nm>& __b)
206 __b.begin(), __b.end());
209 template<
typename _Tp, std::
size_t _Nm>
211 operator>(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
212 {
return __two < __one; }
214 template<
typename _Tp, std::
size_t _Nm>
216 operator<=(const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
217 {
return !(__one > __two); }
219 template<
typename _Tp, std::
size_t _Nm>
221 operator>=(
const array<_Tp, _Nm>& __one,
const array<_Tp, _Nm>& __two)
222 {
return !(__one < __two); }
225 template<
typename _Tp, std::
size_t _Nm>
227 swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
233 template<
typename _Tp>
237 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
238 template<std::
size_t _Int,
typename _Tp>
240 template<
int _Int,
typename _Tp>
244 template<
typename _Tp, std::
size_t _Nm>
245 struct tuple_size<array<_Tp, _Nm> >
246 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
247 {
static const std::size_t value = _Nm; };
249 {
static const int value = _Nm; };
252 template<
typename _Tp, std::
size_t _Nm>
253 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
258 tuple_size<array<_Tp, _Nm> >::value;
260 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
261 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
263 template<
int _Int,
typename _Tp, std::
size_t _Nm>
265 struct tuple_element<_Int, array<_Tp, _Nm> >
266 {
typedef _Tp type; };
268 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
269 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
271 template<
int _Int,
typename _Tp, std::
size_t _Nm>
274 get(array<_Tp, _Nm>& __arr)
275 {
return __arr[_Int]; }
277 #ifdef _GLIBCXX_INCLUDE_AS_CXX0X
278 template<std::
size_t _Int,
typename _Tp, std::
size_t _Nm>
280 template<
int _Int,
typename _Tp, std::
size_t _Nm>
283 get(
const array<_Tp, _Nm>& __arr)
284 {
return __arr[_Int]; }
286 _GLIBCXX_END_NAMESPACE_TR1