diff options
Diffstat (limited to 'contrib/libstdc++/stl/stl_uninitialized.h')
| -rw-r--r-- | contrib/libstdc++/stl/stl_uninitialized.h | 295 | 
1 files changed, 166 insertions, 129 deletions
diff --git a/contrib/libstdc++/stl/stl_uninitialized.h b/contrib/libstdc++/stl/stl_uninitialized.h index 661bbe998e48..3146c82a71c9 100644 --- a/contrib/libstdc++/stl/stl_uninitialized.h +++ b/contrib/libstdc++/stl/stl_uninitialized.h @@ -33,204 +33,241 @@  __STL_BEGIN_NAMESPACE +// uninitialized_copy +  // Valid if copy construction is equivalent to assignment, and if the  //  destructor is trivial. -template <class InputIterator, class ForwardIterator> -inline ForwardIterator  -__uninitialized_copy_aux(InputIterator first, InputIterator last, -                         ForwardIterator result, -                         __true_type) { -  return copy(first, last, result); -} - -template <class InputIterator, class ForwardIterator> -ForwardIterator  -__uninitialized_copy_aux(InputIterator first, InputIterator last, -                         ForwardIterator result, -                         __false_type) { -  ForwardIterator cur = result; +template <class _InputIter, class _ForwardIter> +inline _ForwardIter  +__uninitialized_copy_aux(_InputIter __first, _InputIter __last, +                         _ForwardIter __result, +                         __true_type) +{ +  return copy(__first, __last, __result); +} + +template <class _InputIter, class _ForwardIter> +_ForwardIter  +__uninitialized_copy_aux(_InputIter __first, _InputIter __last, +                         _ForwardIter __result, +                         __false_type) +{ +  _ForwardIter __cur = __result;    __STL_TRY { -    for ( ; first != last; ++first, ++cur) -      construct(&*cur, *first); -    return cur; +    for ( ; __first != __last; ++__first, ++__cur) +      construct(&*__cur, *__first); +    return __cur;    } -  __STL_UNWIND(destroy(result, cur)); +  __STL_UNWIND(destroy(__result, __cur));  } -template <class InputIterator, class ForwardIterator, class T> -inline ForwardIterator -__uninitialized_copy(InputIterator first, InputIterator last, -                     ForwardIterator result, T*) { -  typedef typename __type_traits<T>::is_POD_type is_POD; -  return __uninitialized_copy_aux(first, last, result, is_POD()); +template <class _InputIter, class _ForwardIter, class _Tp> +inline _ForwardIter +__uninitialized_copy(_InputIter __first, _InputIter __last, +                     _ForwardIter __result, _Tp*) +{ +  typedef typename __type_traits<_Tp>::is_POD_type _Is_POD; +  return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());  } -template <class InputIterator, class ForwardIterator> -inline ForwardIterator -  uninitialized_copy(InputIterator first, InputIterator last, -                     ForwardIterator result) { -  return __uninitialized_copy(first, last, result, value_type(result)); +template <class _InputIter, class _ForwardIter> +inline _ForwardIter +  uninitialized_copy(_InputIter __first, _InputIter __last, +                     _ForwardIter __result) +{ +  return __uninitialized_copy(__first, __last, __result, +                              __VALUE_TYPE(__result));  } -inline char* uninitialized_copy(const char* first, const char* last, -                                char* result) { -  memmove(result, first, last - first); -  return result + (last - first); +inline char* uninitialized_copy(const char* __first, const char* __last, +                                char* __result) { +  memmove(__result, __first, __last - __first); +  return __result + (__last - __first);  } -inline wchar_t* uninitialized_copy(const wchar_t* first, const wchar_t* last, -                                   wchar_t* result) { -  memmove(result, first, sizeof(wchar_t) * (last - first)); -  return result + (last - first); +inline wchar_t*  +uninitialized_copy(const wchar_t* __first, const wchar_t* __last, +                   wchar_t* __result) +{ +  memmove(__result, __first, sizeof(wchar_t) * (__last - __first)); +  return __result + (__last - __first);  } -template <class InputIterator, class Size, class ForwardIterator> -pair<InputIterator, ForwardIterator> -__uninitialized_copy_n(InputIterator first, Size count, -                       ForwardIterator result, -                       input_iterator_tag) { -  ForwardIterator cur = result; +// uninitialized_copy_n (not part of the C++ standard) + +template <class _InputIter, class _Size, class _ForwardIter> +pair<_InputIter, _ForwardIter> +__uninitialized_copy_n(_InputIter __first, _Size __count, +                       _ForwardIter __result, +                       input_iterator_tag) +{ +  _ForwardIter __cur = __result;    __STL_TRY { -    for ( ; count > 0 ; --count, ++first, ++cur)  -      construct(&*cur, *first); -    return pair<InputIterator, ForwardIterator>(first, cur); +    for ( ; __count > 0 ; --__count, ++__first, ++__cur)  +      construct(&*__cur, *__first); +    return pair<_InputIter, _ForwardIter>(__first, __cur);    } -  __STL_UNWIND(destroy(result, cur)); +  __STL_UNWIND(destroy(__result, __cur));  } -template <class RandomAccessIterator, class Size, class ForwardIterator> -inline pair<RandomAccessIterator, ForwardIterator> -__uninitialized_copy_n(RandomAccessIterator first, Size count, -                       ForwardIterator result, +template <class _RandomAccessIter, class _Size, class _ForwardIter> +inline pair<_RandomAccessIter, _ForwardIter> +__uninitialized_copy_n(_RandomAccessIter __first, _Size __count, +                       _ForwardIter __result,                         random_access_iterator_tag) { -  RandomAccessIterator last = first + count; -  return make_pair(last, uninitialized_copy(first, last, result)); +  _RandomAccessIter __last = __first + __count; +  return pair<_RandomAccessIter, _ForwardIter>( +                 __last, +                 uninitialized_copy(__first, __last, __result));  } -template <class InputIterator, class Size, class ForwardIterator> -inline pair<InputIterator, ForwardIterator> -uninitialized_copy_n(InputIterator first, Size count, -                     ForwardIterator result) { -  return __uninitialized_copy_n(first, count, result, -                                iterator_category(first)); +template <class _InputIter, class _Size, class _ForwardIter> +inline pair<_InputIter, _ForwardIter> +__uninitialized_copy_n(_InputIter __first, _Size __count, +                     _ForwardIter __result) { +  return __uninitialized_copy_n(__first, __count, __result, +                                __ITERATOR_CATEGORY(__first)); +} + +template <class _InputIter, class _Size, class _ForwardIter> +inline pair<_InputIter, _ForwardIter> +uninitialized_copy_n(_InputIter __first, _Size __count, +                     _ForwardIter __result) { +  return __uninitialized_copy_n(__first, __count, __result, +                                __ITERATOR_CATEGORY(__first));  }  // Valid if copy construction is equivalent to assignment, and if the -//  destructor is trivial. -template <class ForwardIterator, class T> +// destructor is trivial. +template <class _ForwardIter, class _Tp>  inline void -__uninitialized_fill_aux(ForwardIterator first, ForwardIterator last,  -                         const T& x, __true_type) +__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,  +                         const _Tp& __x, __true_type)  { -  fill(first, last, x); +  fill(__first, __last, __x);  } -template <class ForwardIterator, class T> +template <class _ForwardIter, class _Tp>  void -__uninitialized_fill_aux(ForwardIterator first, ForwardIterator last,  -                         const T& x, __false_type) +__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,  +                         const _Tp& __x, __false_type)  { -  ForwardIterator cur = first; +  _ForwardIter __cur = __first;    __STL_TRY { -    for ( ; cur != last; ++cur) -      construct(&*cur, x); +    for ( ; __cur != __last; ++__cur) +      construct(&*__cur, __x);    } -  __STL_UNWIND(destroy(first, cur)); +  __STL_UNWIND(destroy(__first, __cur));  } -template <class ForwardIterator, class T, class T1> -inline void __uninitialized_fill(ForwardIterator first, ForwardIterator last,  -                                 const T& x, T1*) { -  typedef typename __type_traits<T1>::is_POD_type is_POD; -  __uninitialized_fill_aux(first, last, x, is_POD()); +template <class _ForwardIter, class _Tp, class _Tp1> +inline void __uninitialized_fill(_ForwardIter __first,  +                                 _ForwardIter __last, const _Tp& __x, _Tp1*) +{ +  typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD; +  __uninitialized_fill_aux(__first, __last, __x, _Is_POD());  } -template <class ForwardIterator, class T> -inline void uninitialized_fill(ForwardIterator first, ForwardIterator last,  -                               const T& x) { -  __uninitialized_fill(first, last, x, value_type(first)); +template <class _ForwardIter, class _Tp> +inline void uninitialized_fill(_ForwardIter __first, +                               _ForwardIter __last,  +                               const _Tp& __x) +{ +  __uninitialized_fill(__first, __last, __x, __VALUE_TYPE(__first));  }  // Valid if copy construction is equivalent to assignment, and if the  //  destructor is trivial. -template <class ForwardIterator, class Size, class T> -inline ForwardIterator -__uninitialized_fill_n_aux(ForwardIterator first, Size n, -                           const T& x, __true_type) { -  return fill_n(first, n, x); -} - -template <class ForwardIterator, class Size, class T> -ForwardIterator -__uninitialized_fill_n_aux(ForwardIterator first, Size n, -                           const T& x, __false_type) { -  ForwardIterator cur = first; +template <class _ForwardIter, class _Size, class _Tp> +inline _ForwardIter +__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n, +                           const _Tp& __x, __true_type) +{ +  return fill_n(__first, __n, __x); +} + +template <class _ForwardIter, class _Size, class _Tp> +_ForwardIter +__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n, +                           const _Tp& __x, __false_type) +{ +  _ForwardIter __cur = __first;    __STL_TRY { -    for ( ; n > 0; --n, ++cur) -      construct(&*cur, x); -    return cur; +    for ( ; __n > 0; --__n, ++__cur) +      construct(&*__cur, __x); +    return __cur;    } -  __STL_UNWIND(destroy(first, cur)); +  __STL_UNWIND(destroy(__first, __cur));  } -template <class ForwardIterator, class Size, class T, class T1> -inline ForwardIterator __uninitialized_fill_n(ForwardIterator first, Size n, -                                              const T& x, T1*) { -  typedef typename __type_traits<T1>::is_POD_type is_POD; -  return __uninitialized_fill_n_aux(first, n, x, is_POD()); -                                     +template <class _ForwardIter, class _Size, class _Tp, class _Tp1> +inline _ForwardIter  +__uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x, _Tp1*) +{ +  typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD; +  return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());  } -template <class ForwardIterator, class Size, class T> -inline ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, -                                            const T& x) { -  return __uninitialized_fill_n(first, n, x, value_type(first)); +template <class _ForwardIter, class _Size, class _Tp> +inline _ForwardIter  +uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x) +{ +  return __uninitialized_fill_n(__first, __n, __x, __VALUE_TYPE(__first));  } +// Extensions: __uninitialized_copy_copy, __uninitialized_copy_fill,  +// __uninitialized_fill_copy. + +// __uninitialized_copy_copy  // Copies [first1, last1) into [result, result + (last1 - first1)), and  //  copies [first2, last2) into  //  [result, result + (last1 - first1) + (last2 - first2)). -template <class InputIterator1, class InputIterator2, class ForwardIterator> -inline ForwardIterator -__uninitialized_copy_copy(InputIterator1 first1, InputIterator1 last1, -                          InputIterator2 first2, InputIterator2 last2, -                          ForwardIterator result) { -  ForwardIterator mid = uninitialized_copy(first1, last1, result); +template <class _InputIter1, class _InputIter2, class _ForwardIter> +inline _ForwardIter +__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1, +                          _InputIter2 __first2, _InputIter2 __last2, +                          _ForwardIter __result) +{ +  _ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);    __STL_TRY { -    return uninitialized_copy(first2, last2, mid); +    return uninitialized_copy(__first2, __last2, __mid);    } -  __STL_UNWIND(destroy(result, mid)); +  __STL_UNWIND(destroy(__result, __mid));  } +// __uninitialized_fill_copy  // Fills [result, mid) with x, and copies [first, last) into  //  [mid, mid + (last - first)). -template <class ForwardIterator, class T, class InputIterator> -inline ForwardIterator  -__uninitialized_fill_copy(ForwardIterator result, ForwardIterator mid, -                          const T& x, -                          InputIterator first, InputIterator last) { -  uninitialized_fill(result, mid, x); +template <class _ForwardIter, class _Tp, class _InputIter> +inline _ForwardIter  +__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid, +                          const _Tp& __x, +                          _InputIter __first, _InputIter __last) +{ +  uninitialized_fill(__result, __mid, __x);    __STL_TRY { -    return uninitialized_copy(first, last, mid); +    return uninitialized_copy(__first, __last, __mid);    } -  __STL_UNWIND(destroy(result, mid)); +  __STL_UNWIND(destroy(__result, __mid));  } +// __uninitialized_copy_fill  // Copies [first1, last1) into [first2, first2 + (last1 - first1)), and  //  fills [first2 + (last1 - first1), last2) with x. -template <class InputIterator, class ForwardIterator, class T> +template <class _InputIter, class _ForwardIter, class _Tp>  inline void -__uninitialized_copy_fill(InputIterator first1, InputIterator last1, -                          ForwardIterator first2, ForwardIterator last2, -                          const T& x) { -  ForwardIterator mid2 = uninitialized_copy(first1, last1, first2); +__uninitialized_copy_fill(_InputIter __first1, _InputIter __last1, +                          _ForwardIter __first2, _ForwardIter __last2, +                          const _Tp& __x) +{ +  _ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);    __STL_TRY { -    uninitialized_fill(mid2, last2, x); +    uninitialized_fill(__mid2, __last2, __x);    } -  __STL_UNWIND(destroy(first2, mid2)); +  __STL_UNWIND(destroy(__first2, __mid2));  }  __STL_END_NAMESPACE  | 
