epoc32/include/stdapis/stlport/stl/_uninitialized.h
branchSymbian3
changeset 4 837f303aceeb
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/stdapis/stlport/stl/_uninitialized.h	Wed Mar 31 12:33:34 2010 +0100
     1.3 @@ -0,0 +1,291 @@
     1.4 +/*
     1.5 + *
     1.6 + * Copyright (c) 1994
     1.7 + * Hewlett-Packard Company
     1.8 + *
     1.9 + * Copyright (c) 1996,1997
    1.10 + * Silicon Graphics Computer Systems, Inc.
    1.11 + *
    1.12 + * Copyright (c) 1997
    1.13 + * Moscow Center for SPARC Technology
    1.14 + *
    1.15 + * Copyright (c) 1999 
    1.16 + * Boris Fomitchev
    1.17 + *
    1.18 + * This material is provided "as is", with absolutely no warranty expressed
    1.19 + * or implied. Any use is at your own risk.
    1.20 + *
    1.21 + * Permission to use or copy this software for any purpose is hereby granted 
    1.22 + * without fee, provided the above notices are retained on all copies.
    1.23 + * Permission to modify the code and to distribute modified code is granted,
    1.24 + * provided the above notices are retained, and a notice that the code was
    1.25 + * modified is included with the above copyright notice.
    1.26 + *
    1.27 + */
    1.28 +
    1.29 +/* NOTE: This is an internal header file, included by other STL headers.
    1.30 + *   You should not attempt to use it directly.
    1.31 + */
    1.32 +
    1.33 +#ifndef _STLP_INTERNAL_UNINITIALIZED_H
    1.34 +#define _STLP_INTERNAL_UNINITIALIZED_H
    1.35 +
    1.36 +# ifndef _STLP_CSTRING
    1.37 +#  include <cstring>
    1.38 +# endif
    1.39 +
    1.40 +# ifndef _STLP_INTERNAL_ALGOBASE_H
    1.41 +#  include <stl/_algobase.h>
    1.42 +# endif
    1.43 +
    1.44 +# ifndef _STLP_INTERNAL_CONSTRUCT_H
    1.45 +#  include <stl/_construct.h>
    1.46 +# endif
    1.47 +
    1.48 +_STLP_BEGIN_NAMESPACE
    1.49 +
    1.50 +// uninitialized_copy
    1.51 +
    1.52 +// Valid if copy construction is equivalent to assignment, and if the
    1.53 +//  destructor is trivial.
    1.54 +template <class _InputIter, class _ForwardIter>
    1.55 +inline _ForwardIter 
    1.56 +__uninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result,
    1.57 +                     const __true_type&) {
    1.58 +  return __copy_aux(__first, __last, __result, _BothPtrType< _InputIter, _ForwardIter> :: _Ret());
    1.59 +}
    1.60 +
    1.61 +template <class _InputIter, class _ForwardIter>
    1.62 +// _STLP_INLINE_LOOP
    1.63 +_ForwardIter 
    1.64 +__uninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result,
    1.65 +                     const __false_type&)
    1.66 +{
    1.67 +  _STLP_LEAVE_VOLATILE _ForwardIter __cur = __result;
    1.68 +  _STLP_TRY  {
    1.69 +    for ( ; __first != __last; ++__first, ++__cur)
    1.70 +      _Construct(&*__cur, *__first);
    1.71 +    //    return __cur;
    1.72 +  }
    1.73 +  _STLP_UNWIND (_STLP_STD::_Destroy(__result, __cur)); 
    1.74 +  return __cur;
    1.75 +}
    1.76 +
    1.77 +template <class _InputIter, class _ForwardIter>
    1.78 +inline _ForwardIter
    1.79 +uninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result) {
    1.80 +  return __uninitialized_copy(__first, __last, __result,  _IS_POD_ITER(__result, _ForwardIter));
    1.81 +}
    1.82 +
    1.83 +inline char* 
    1.84 +uninitialized_copy(const char* __first, const char* __last, char* __result) {
    1.85 +  return  (char*)__copy_trivial (__first, __last, __result);
    1.86 +}
    1.87 +
    1.88 +#  ifdef _STLP_HAS_WCHAR_T // dwa 8/15/97
    1.89 +inline wchar_t* 
    1.90 +uninitialized_copy(const wchar_t* __first, const wchar_t* __last, wchar_t* __result) {
    1.91 +  return  (wchar_t*)__copy_trivial (__first, __last, __result);
    1.92 +}
    1.93 +#  endif /* _STLP_HAS_WCHAR_T */
    1.94 +
    1.95 +# ifndef _STLP_NO_EXTENSIONS
    1.96 +// uninitialized_copy_n (not part of the C++ standard)
    1.97 +
    1.98 +template <class _InputIter, class _Size, class _ForwardIter>
    1.99 +// _STLP_INLINE_LOOP 
   1.100 +pair<_InputIter, _ForwardIter>
   1.101 +__uninitialized_copy_n(_InputIter __first, _Size __count,
   1.102 +                       _ForwardIter __result,
   1.103 +                       const input_iterator_tag &)
   1.104 +{
   1.105 +  _STLP_LEAVE_VOLATILE  _ForwardIter __cur = __result;
   1.106 +  _STLP_TRY {
   1.107 +    for ( ; __count > 0 ; --__count, ++__first, ++__cur) 
   1.108 +      _Construct(&*__cur, *__first);
   1.109 +    //    return pair<_InputIter, _ForwardIter>(__first, __cur);
   1.110 +  }
   1.111 +  _STLP_UNWIND(_STLP_STD::_Destroy(__result, __cur));
   1.112 +
   1.113 +  return pair<_InputIter, _ForwardIter>(__first, __cur);
   1.114 +
   1.115 +}
   1.116 +
   1.117 +# if defined(_STLP_NONTEMPL_BASE_MATCH_BUG) 
   1.118 +template <class _InputIterator, class _Size, class _ForwardIterator>
   1.119 +inline pair<_InputIterator, _ForwardIterator>
   1.120 +__uninitialized_copy_n(_InputIterator __first, _Size __count,
   1.121 +                       _ForwardIterator __result,
   1.122 +                       const forward_iterator_tag &) {
   1.123 +  return __uninitialized_copy_n(__first, __count, __result, input_iterator_tag());
   1.124 +}
   1.125 +
   1.126 +template <class _InputIterator, class _Size, class _ForwardIterator>
   1.127 +inline pair<_InputIterator, _ForwardIterator>
   1.128 +__uninitialized_copy_n(_InputIterator __first, _Size __count,
   1.129 +                       _ForwardIterator __result,
   1.130 +                       const bidirectional_iterator_tag &) {
   1.131 +  return __uninitialized_copy_n(__first, __count, __result, input_iterator_tag());
   1.132 +}
   1.133 +# endif
   1.134 +
   1.135 +
   1.136 +template <class _RandomAccessIter, class _Size, class _ForwardIter>
   1.137 +inline pair<_RandomAccessIter, _ForwardIter>
   1.138 +__uninitialized_copy_n(_RandomAccessIter __first, _Size __count, _ForwardIter __result, const random_access_iterator_tag &) {
   1.139 +  _RandomAccessIter __last = __first + __count;
   1.140 +  return pair<_RandomAccessIter, _ForwardIter>( __last, __uninitialized_copy(__first, __last, __result, 
   1.141 +                                                                             _IS_POD_ITER(__result, _ForwardIter)));
   1.142 +}
   1.143 +
   1.144 +// this is used internally in <rope> , which is extension itself.
   1.145 +template <class _InputIter, class _Size, class _ForwardIter>
   1.146 +inline pair<_InputIter, _ForwardIter>
   1.147 +uninitialized_copy_n(_InputIter __first, _Size __count,
   1.148 +                     _ForwardIter __result) {
   1.149 +  return __uninitialized_copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter));
   1.150 +}
   1.151 +# endif /* _STLP_NO_EXTENSIONS */
   1.152 +
   1.153 +// Valid if copy construction is equivalent to assignment, and if the
   1.154 +// destructor is trivial.
   1.155 +template <class _ForwardIter, class _Tp>
   1.156 +inline void
   1.157 +__uninitialized_fill(_ForwardIter __first, _ForwardIter __last, 
   1.158 +                     const _Tp& __x, const __true_type&) {
   1.159 +  _STLP_STD::fill(__first, __last, __x);
   1.160 +}
   1.161 +
   1.162 +template <class _ForwardIter, class _Tp>
   1.163 +// _STLP_INLINE_LOOP 
   1.164 +void
   1.165 +__uninitialized_fill(_ForwardIter __first, _ForwardIter __last, 
   1.166 +                     const _Tp& __x, const __false_type&)
   1.167 +{
   1.168 +  _STLP_LEAVE_VOLATILE  _ForwardIter __cur = __first;
   1.169 +  _STLP_TRY {
   1.170 +    for ( ; __cur != __last; ++__cur)
   1.171 +      _Construct(&*__cur, __x);
   1.172 +  }
   1.173 +  _STLP_UNWIND(_STLP_STD::_Destroy(__first, __cur));
   1.174 +}
   1.175 +
   1.176 +template <class _ForwardIter, class _Tp>
   1.177 +inline void uninitialized_fill(_ForwardIter __first, _ForwardIter __last,  const _Tp& __x) {
   1.178 +  __uninitialized_fill(__first, __last, __x, _IS_POD_ITER(__first, _ForwardIter));
   1.179 +}
   1.180 +
   1.181 +// Valid if copy construction is equivalent to assignment, and if the
   1.182 +//  destructor is trivial.
   1.183 +template <class _ForwardIter, class _Size, class _Tp>
   1.184 +inline _ForwardIter
   1.185 +__uninitialized_fill_n(_ForwardIter __first, _Size __n,
   1.186 +                       const _Tp& __x, const __true_type&) {
   1.187 +  return _STLP_STD::fill_n(__first, __n, __x);
   1.188 +}
   1.189 +
   1.190 +template <class _ForwardIter, class _Size, class _Tp>
   1.191 +//_STLP_INLINE_LOOP 
   1.192 +_ForwardIter
   1.193 +__uninitialized_fill_n(_ForwardIter __first, _Size __n,
   1.194 +                       const _Tp& __x, const __false_type&)
   1.195 +{
   1.196 +  _STLP_LEAVE_VOLATILE  _ForwardIter __cur = __first;
   1.197 +  _STLP_TRY {
   1.198 +    for ( ; __n > 0; --__n, ++__cur)
   1.199 +      _Construct(&*__cur, __x);
   1.200 +    //    return __cur;
   1.201 +  }
   1.202 +  _STLP_UNWIND(_STLP_STD::_Destroy(__first, __cur));
   1.203 +  // # ifdef _STLP_THROW_RETURN_BUG
   1.204 +  return __cur;
   1.205 +  //# endif
   1.206 +}
   1.207 +
   1.208 +template <class _ForwardIter, class _Size, class _Tp>
   1.209 +inline _ForwardIter 
   1.210 +uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x) {
   1.211 +  return __uninitialized_fill_n(__first, __n, __x, _IS_POD_ITER(__first, _ForwardIter));
   1.212 +}
   1.213 +
   1.214 +// Extensions: __uninitialized_copy_copy, __uninitialized_copy_fill, 
   1.215 +// __uninitialized_fill_copy.
   1.216 +
   1.217 +// __uninitialized_copy_copy
   1.218 +// Copies [first1, last1) into [result, result + (last1 - first1)), and
   1.219 +//  copies [first2, last2) into
   1.220 +//  [result, result + (last1 - first1) + (last2 - first2)).
   1.221 +
   1.222 +template <class _InputIter1, class _InputIter2, class _ForwardIter>
   1.223 +inline _ForwardIter
   1.224 +__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
   1.225 +                          _InputIter2 __first2, _InputIter2 __last2,
   1.226 +                          _ForwardIter __result, __true_type)
   1.227 +{
   1.228 +  return __uninitialized_copy(__first2, __last2, 
   1.229 +                              __uninitialized_copy(__first1, __last1, __result, __true_type()), __true_type());
   1.230 +}
   1.231 +
   1.232 +template <class _InputIter1, class _InputIter2, class _ForwardIter>
   1.233 +// inline 
   1.234 +_ForwardIter
   1.235 +__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
   1.236 +                          _InputIter2 __first2, _InputIter2 __last2,
   1.237 +                          _ForwardIter __result, __false_type)
   1.238 +{
   1.239 +   _STLP_LEAVE_VOLATILE _ForwardIter __mid = __uninitialized_copy(__first1, __last1, __result, _IS_POD_ITER(__result, _ForwardIter));
   1.240 +
   1.241 +  _STLP_TRY {
   1.242 +    return __uninitialized_copy(__first2, __last2, __mid , _IS_POD_ITER(__result, _ForwardIter));
   1.243 +  }
   1.244 +  _STLP_UNWIND (_STLP_STD::_Destroy(__result, __mid));
   1.245 +# ifdef _STLP_THROW_RETURN_BUG
   1.246 +  return __mid;
   1.247 +# endif
   1.248 +}
   1.249 +
   1.250 +// __uninitialized_fill_copy
   1.251 +// Fills [result, mid) with x, and copies [first, last) into
   1.252 +//  [mid, mid + (last - first)).
   1.253 +template <class _ForwardIter, class _Tp, class _InputIter>
   1.254 +// inline 
   1.255 +_ForwardIter 
   1.256 +__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid, const _Tp& __x,
   1.257 +                          _InputIter __first, _InputIter __last)
   1.258 +{
   1.259 +  typedef typename __type_traits<_Tp>::is_POD_type _I_POD;
   1.260 +  __uninitialized_fill(__result, __mid, __x, _I_POD());
   1.261 +  _STLP_TRY {
   1.262 +    return __uninitialized_copy(__first, __last, __mid, _I_POD());
   1.263 +  }
   1.264 +  _STLP_UNWIND (_STLP_STD::_Destroy(__result, __mid));
   1.265 +# ifdef _STLP_THROW_RETURN_BUG
   1.266 +  return __result;
   1.267 +# endif
   1.268 +}
   1.269 +
   1.270 +// __uninitialized_copy_fill
   1.271 +// Copies [first1, last1) into [first2, first2 + (last1 - first1)), and
   1.272 +//  fills [first2 + (last1 - first1), last2) with x.
   1.273 +template <class _InputIter, class _ForwardIter, class _Tp>
   1.274 +// inline 
   1.275 +void
   1.276 +__uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
   1.277 +                          _ForwardIter __first2, _ForwardIter __last2,
   1.278 +                          const _Tp& __x)
   1.279 +{
   1.280 +  typedef typename __type_traits<_Tp>::is_POD_type _I_POD;
   1.281 +  _ForwardIter __mid2 = __uninitialized_copy(__first1, __last1, __first2, _I_POD());
   1.282 +  _STLP_TRY {
   1.283 +    __uninitialized_fill(__mid2, __last2, __x, _I_POD());
   1.284 +  }
   1.285 +  _STLP_UNWIND(_STLP_STD::_Destroy(__first2, __mid2));
   1.286 +}
   1.287 +
   1.288 +_STLP_END_NAMESPACE
   1.289 +
   1.290 +#endif /* _STLP_INTERNAL_UNINITIALIZED_H */
   1.291 +
   1.292 +// Local Variables:
   1.293 +// mode:C++
   1.294 +// End: