00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #ifndef _EXT_MEMORY
00062 #define _EXT_MEMORY 1
00063
00064 #pragma GCC system_header
00065
00066 #include <memory>
00067 #include <bits/stl_tempbuf.h>
00068
00069 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
00070
00071 using std::ptrdiff_t;
00072 using std::pair;
00073 using std::__iterator_category;
00074 using std::_Temporary_buffer;
00075
00076 template<typename _InputIter, typename _Size, typename _ForwardIter>
00077 pair<_InputIter, _ForwardIter>
00078 __uninitialized_copy_n(_InputIter __first, _Size __count,
00079 _ForwardIter __result, std::input_iterator_tag)
00080 {
00081 _ForwardIter __cur = __result;
00082 try
00083 {
00084 for (; __count > 0 ; --__count, ++__first, ++__cur)
00085 std::_Construct(&*__cur, *__first);
00086 return pair<_InputIter, _ForwardIter>(__first, __cur);
00087 }
00088 catch(...)
00089 {
00090 std::_Destroy(__result, __cur);
00091 __throw_exception_again;
00092 }
00093 }
00094
00095 template<typename _RandomAccessIter, typename _Size, typename _ForwardIter>
00096 inline pair<_RandomAccessIter, _ForwardIter>
00097 __uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
00098 _ForwardIter __result,
00099 std::random_access_iterator_tag)
00100 {
00101 _RandomAccessIter __last = __first + __count;
00102 return (pair<_RandomAccessIter, _ForwardIter>
00103 (__last, std::uninitialized_copy(__first, __last, __result)));
00104 }
00105
00106 template<typename _InputIter, typename _Size, typename _ForwardIter>
00107 inline pair<_InputIter, _ForwardIter>
00108 __uninitialized_copy_n(_InputIter __first, _Size __count,
00109 _ForwardIter __result)
00110 { return __uninitialized_copy_n(__first, __count, __result,
00111 __iterator_category(__first)); }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 template<typename _InputIter, typename _Size, typename _ForwardIter>
00124 inline pair<_InputIter, _ForwardIter>
00125 uninitialized_copy_n(_InputIter __first, _Size __count,
00126 _ForwardIter __result)
00127 { return __uninitialized_copy_n(__first, __count, __result,
00128 __iterator_category(__first)); }
00129
00130
00131
00132
00133 template<typename _InputIter, typename _Size, typename _ForwardIter,
00134 typename _Allocator>
00135 pair<_InputIter, _ForwardIter>
00136 __uninitialized_copy_n_a(_InputIter __first, _Size __count,
00137 _ForwardIter __result,
00138 _Allocator __alloc)
00139 {
00140 _ForwardIter __cur = __result;
00141 try
00142 {
00143 for (; __count > 0 ; --__count, ++__first, ++__cur)
00144 __alloc.construct(&*__cur, *__first);
00145 return pair<_InputIter, _ForwardIter>(__first, __cur);
00146 }
00147 catch(...)
00148 {
00149 std::_Destroy(__result, __cur, __alloc);
00150 __throw_exception_again;
00151 }
00152 }
00153
00154 template<typename _InputIter, typename _Size, typename _ForwardIter,
00155 typename _Tp>
00156 inline pair<_InputIter, _ForwardIter>
00157 __uninitialized_copy_n_a(_InputIter __first, _Size __count,
00158 _ForwardIter __result,
00159 std::allocator<_Tp>)
00160 {
00161 return uninitialized_copy_n(__first, __count, __result);
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 template <class _ForwardIterator, class _Tp
00185 = typename std::iterator_traits<_ForwardIterator>::value_type >
00186 struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
00187 {
00188
00189 temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
00190 : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) { }
00191
00192
00193 ~temporary_buffer() { }
00194 };
00195
00196 _GLIBCXX_END_NAMESPACE
00197
00198 #endif
00199