32#ifndef _RWSTD_RW_ARRAY_H_INCLUDED
33#define _RWSTD_RW_ARRAY_H_INCLUDED
35#ifndef _RWSTD_RW_SPECIALIZED_H_INCLUDED
43template <
class _TypeT>
48 typedef _RWSTD_SIZE_T size_type;
49 typedef _TypeT value_type;
50 typedef value_type* pointer;
51 typedef value_type& reference;
52 typedef const value_type* const_pointer;
53 typedef const value_type& const_reference;
60 __rw_array (size_type);
63 __rw_array (const_reference, size_type);
66 __rw_array (const_pointer, size_type);
68 __rw_array (
const __rw_array&);
72 __rw_array& operator= (
const __rw_array&);
74 size_type
size ()
const {
78 const_reference operator[] (size_type __inx)
const {
80 return _C_data [__inx];
83 reference operator[] (size_type __inx) {
85 return _C_data [__inx];
88 void swap (__rw_array&);
94 const_pointer begin ()
const {
99 return _C_data + _C_size;
102 const_pointer
end ()
const {
103 return _C_data + _C_size;
106 void resize (size_type, const_reference = value_type ());
114template <
class _TypeT>
115inline __rw_array<_TypeT>::__rw_array (size_type __n)
119 ::operator
new (__n *
sizeof *_C_data));
127template <
class _TypeT>
128inline __rw_array<_TypeT>::__rw_array (const_reference __val, size_type __n)
132 ::operator
new (__n *
sizeof *_C_data));
133 _STD::uninitialized_fill_n (_C_data, __n, __val);
142template <
class _TypeT>
143inline __rw_array<_TypeT>::__rw_array (const_pointer __data, size_type __n)
147 ::operator
new (__n *
sizeof *_C_data));
148 _STD::uninitialized_copy (__data, __data + __n, _C_data);
157template <
class _TypeT>
158inline __rw_array<_TypeT>::__rw_array (
const __rw_array<_TypeT> &__rhs)
159 : _C_size (__rhs.size ())
163 ::operator
new (_C_size *
sizeof *_C_data));
164 _STD::uninitialized_copy (__rhs.begin (), __rhs.end (), begin ());
171template <
class _TypeT>
172inline __rw_array<_TypeT>&
173__rw_array<_TypeT>::operator= (
const __rw_array<_TypeT> &__rhs)
175 if (__rhs.size () ==
size ())
177 _STD::copy (__rhs.begin (), __rhs.end (), begin ());
180 __rw_array <_TypeT> (__rhs).swap (*
this);
186template <
class _TypeT>
191 __rw_destroy (_C_data, _C_data + _C_size);
192 ::operator
delete (_C_data);
196template <
class _TypeT>
197inline void __rw_array<_TypeT>::swap (__rw_array<_TypeT> &__rhs)
199 pointer __tmp_data = begin ();
200 size_type __tmp_size =
size ();
202 _C_data = __rhs.begin ();
203 _C_size = __rhs.size ();
204 __rhs._C_data = __tmp_data;
205 __rhs._C_size = __tmp_size;
209template <
class _TypeT>
210inline void __rw_array<_TypeT>::
211resize (size_type __size, const_reference __val )
214 __rw_destroy (_C_data, _C_data + _C_size);
215 ::operator
delete (_C_data);
219 if ((_C_size = __size)) {
221 ::operator
new (_C_size *
sizeof *_C_data));
222 _STD::uninitialized_fill_n (_C_data, _C_size, __val);
#define _RWSTD_STATIC_CAST(T, x)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_ASSERT(ignore)