56 #ifndef _STL_TEMPBUF_H
57 #define _STL_TEMPBUF_H 1
64 _GLIBCXX_BEGIN_NAMESPACE_VERSION
83 template<
typename _Tp>
85 get_temporary_buffer(
ptrdiff_t __len) _GLIBCXX_NOEXCEPT
88 __gnu_cxx::__numeric_traits<ptrdiff_t>::__max /
sizeof(_Tp);
94 _Tp* __tmp =
static_cast<_Tp*
>(::operator
new(__len *
sizeof(_Tp),
97 return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
100 return std::pair<_Tp*, ptrdiff_t>(
static_cast<_Tp*
>(0), 0);
110 template<
typename _Tp>
112 return_temporary_buffer(_Tp* __p)
113 { ::operator
delete(__p, std::nothrow); }
121 template<
typename _ForwardIterator,
typename _Tp>
122 class _Temporary_buffer
128 typedef _Tp value_type;
129 typedef value_type* pointer;
130 typedef pointer iterator;
134 size_type _M_original_len;
146 requested_size()
const
147 {
return _M_original_len; }
152 {
return _M_buffer; }
157 {
return _M_buffer + _M_len; }
163 _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);
167 std::_Destroy(_M_buffer, _M_buffer + _M_len);
168 std::return_temporary_buffer(_M_buffer);
173 _Temporary_buffer(
const _Temporary_buffer&);
176 operator=(
const _Temporary_buffer&);
181 struct __uninitialized_construct_buf_dispatch
183 template<
typename _Po
inter,
typename _ForwardIterator>
185 __ucr(_Pointer __first, _Pointer __last,
186 _ForwardIterator __seed)
188 if(__first == __last)
191 _Pointer __cur = __first;
194 std::_Construct(std::__addressof(*__first),
196 _Pointer __prev = __cur;
198 for(; __cur != __last; ++__cur, ++__prev)
199 std::_Construct(std::__addressof(*__cur),
205 std::_Destroy(__first, __cur);
212 struct __uninitialized_construct_buf_dispatch<true>
214 template<
typename _Po
inter,
typename _ForwardIterator>
216 __ucr(_Pointer, _Pointer, _ForwardIterator) { }
229 template<
typename _Po
inter,
typename _ForwardIterator>
231 __uninitialized_construct_buf(_Pointer __first, _Pointer __last,
232 _ForwardIterator __seed)
234 typedef typename std::iterator_traits<_Pointer>::value_type
237 std::__uninitialized_construct_buf_dispatch<
238 __has_trivial_constructor(_ValueType)>::
239 __ucr(__first, __last, __seed);
242 template<
typename _ForwardIterator,
typename _Tp>
243 _Temporary_buffer<_ForwardIterator, _Tp>::
244 _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
245 : _M_original_len(std::distance(__first, __last)),
246 _M_len(0), _M_buffer(0)
250 std::pair<pointer, size_type> __p(std::get_temporary_buffer<
251 value_type>(_M_original_len));
252 _M_buffer = __p.first;
255 std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
260 std::return_temporary_buffer(_M_buffer);
267 _GLIBCXX_END_NAMESPACE_VERSION
#define _GLIBCXX_MOVE(__val)
Definition: move.h:145
#define __try
Definition: exception_defines.h:35
#define __throw_exception_again
Definition: exception_defines.h:37
#define __glibcxx_class_requires(_a, _b)
Definition: concept_check.h:48
#define __catch(X)
Definition: exception_defines.h:36
__PTRDIFF_TYPE__ ptrdiff_t
Definition: stddef.h:147
namespace std _GLIBCXX_VISIBILITY(default)
Definition: stl_tempbuf.h:62