32#ifndef _RWSTD_PODARRAY_H_INCLUDED
33#define _RWSTD_PODARRAY_H_INCLUDED
37# pragma GCC system_header
52template <
class _TypeT>
53struct __rw_aligned_buffer
56#ifndef _RWSTD_NO_LONG_DOUBLE
63 char _C_data [
sizeof (_TypeT)];
67 return _C_buf._C_data;
77typedef _RWSTD_SIZE_T _SizeT;
79_EXPORT template <
class _TypeT, _SizeT _Size>
84 _TypeT _C_buffer [_Size];
88 __rw_pod_array (): _C_len (0), _C_pbuf (_C_buffer) {
92 explicit __rw_pod_array (
const _TypeT *__a)
93 : _C_len (_C_length (__a))
101 _C_pbuf =
new _TypeT [_C_len + 1];
102 memcpy (_C_pbuf, __a, (_C_len + 1) *
sizeof *__a);
105 __rw_pod_array (
const _TypeT *__a, _SizeT __len)
112 _C_pbuf =
new _TypeT [__len + 1];
113 memcpy (_C_pbuf, __a, __len *
sizeof *__a);
114 _C_pbuf [_C_len] = _TypeT ();
117 __rw_pod_array (
const __rw_pod_array &__rhs)
118 : _C_len (__rhs._C_len) {
124 _C_pbuf =
new _TypeT [_C_len + 1];
125 memcpy (_C_pbuf, __rhs._C_pbuf,
126 (_C_len + !!__rhs._C_pbuf) *
sizeof *_C_pbuf);
130 if (_C_pbuf != _C_buffer)
138 const _TypeT*
data ()
const {
142 _TypeT* acquire (_TypeT *__a, _SizeT __len) {
143 _TypeT *__pbuf = _C_pbuf;
149 _TypeT* acquire (_TypeT *__a) {
150 return acquire (__a, _C_length (__a));
154 _TypeT*
const __pbuf = _C_pbuf;
159 static _SizeT max_size () {
163 _SizeT
size ()
const {
167 __rw_pod_array&
append (
const _TypeT*, _SizeT);
169 __rw_pod_array&
append (
const _TypeT *__a) {
171 return append (__a, _C_length (__a));
174 __rw_pod_array& operator+= (
const _TypeT *__a) {
180 __rw_pod_array&
assign (
const _TypeT *__a, _SizeT __len) {
181 return (_C_len = 0),
append (__a, __len);
184 __rw_pod_array&
assign (
const _TypeT *__a) {
186 return assign (__a, _C_length (__a));
189 __rw_pod_array& operator= (
const _TypeT *__a) {
194 __rw_pod_array& operator= (
const __rw_pod_array &__rhs) {
195 return assign (__rhs._C_pbuf, __rhs._C_len);
200 static _RWSTD_SIZE_T _C_length (
const _TypeT *__a) {
201#ifndef _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
202 return _STD::char_traits<_TypeT>::length (__a);
204 _RWSTD_SIZE_T __len = 0;
205 for (; _TypeT () != *__a; ++__a, ++__len) ;
212typedef __rw_pod_array<char, 256> __rw_chararray;
218#if _RWSTD_DEFINE_TEMPLATE_FIRST (_POD_ARRAY)
225#if _RWSTD_INSTANTIATE (_POD_ARRAY, _CHAR)
232#if _RWSTD_INSTANTIATE (_POD_ARRAY, _UINT)
242#if _RWSTD_DEFINE_TEMPLATE_LAST (_POD_ARRAY)
char * append(char *dst, const char *src)
#define _RWSTD_INSTANTIATE_2(a1, a2)
#define _RWSTD_REINTERPRET_CAST(T, x)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_ASSERT(ignore)