Commit d31238cf by François Dumont

2018-06-05 François Dumont <fdumont@gcc.gnu.org>

	* include/bits/stl_tempbuf.h
	(_Temporary_buffer(_FwdIte, _FwdIte)): Delete, replaced by...
	(_Temporary_buffer(_FwdIte, size_type)): ...this, new.
	* include/ext/memory (temporary_buffer<>(_FwdIte, _FwdIte)): Adapt.
	* include/bits/stl_algo.h (__stable_partition): Adapt.
	(__inplace_merge): Adapt.
	(__stable_sort): Adapt.

From-SVN: r261181
parent ca6f2936
2018-06-05 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_tempbuf.h
(_Temporary_buffer(_FwdIte, _FwdIte)): Delete, replaced by...
(_Temporary_buffer(_FwdIte, size_type)): ...this, new.
* include/ext/memory (temporary_buffer<>(_FwdIte, _FwdIte)): Adapt.
* include/bits/stl_algo.h (__stable_partition): Adapt.
(__inplace_merge): Adapt.
(__stable_sort): Adapt.
2018-06-04 Jonathan Wakely <jwakely@redhat.com> 2018-06-04 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/85930 PR libstdc++/85930
......
...@@ -1621,7 +1621,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -1621,7 +1621,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef typename iterator_traits<_ForwardIterator>::difference_type typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType; _DistanceType;
_Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last); _Temporary_buffer<_ForwardIterator, _ValueType>
__buf(__first, std::distance(__first, __last));
return return
std::__stable_partition_adaptive(__first, __last, __pred, std::__stable_partition_adaptive(__first, __last, __pred,
_DistanceType(__buf.requested_size()), _DistanceType(__buf.requested_size()),
...@@ -2540,7 +2541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -2540,7 +2541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _DistanceType __len2 = std::distance(__middle, __last); const _DistanceType __len2 = std::distance(__middle, __last);
typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;
_TmpBuf __buf(__first, __last); _TmpBuf __buf(__first, __len1 + __len2);
if (__buf.begin() == 0) if (__buf.begin() == 0)
std::__merge_without_buffer std::__merge_without_buffer
...@@ -4998,7 +4999,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO ...@@ -4998,7 +4999,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
_DistanceType; _DistanceType;
typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;
_TmpBuf __buf(__first, __last); _TmpBuf __buf(__first, std::distance(__first, __last));
if (__buf.begin() == 0) if (__buf.begin() == 0)
std::__inplace_stable_sort(__first, __last, __comp); std::__inplace_stable_sort(__first, __last, __comp);
......
...@@ -158,9 +158,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -158,9 +158,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/** /**
* Constructs a temporary buffer of a size somewhere between * Constructs a temporary buffer of a size somewhere between
* zero and the size of the given range. * zero and the given length.
*/ */
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last); _Temporary_buffer(_ForwardIterator __seed, size_type __original_len);
~_Temporary_buffer() ~_Temporary_buffer()
{ {
...@@ -241,9 +241,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -241,9 +241,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ForwardIterator, typename _Tp> template<typename _ForwardIterator, typename _Tp>
_Temporary_buffer<_ForwardIterator, _Tp>:: _Temporary_buffer<_ForwardIterator, _Tp>::
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) _Temporary_buffer(_ForwardIterator __seed, size_type __original_len)
: _M_original_len(std::distance(__first, __last)), : _M_original_len(__original_len), _M_len(0), _M_buffer(0)
_M_len(0), _M_buffer(0)
{ {
__try __try
{ {
...@@ -253,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -253,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_len = __p.second; _M_len = __p.second;
if (_M_buffer) if (_M_buffer)
std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len, std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
__first); __seed);
} }
__catch(...) __catch(...)
{ {
...@@ -268,4 +267,3 @@ _GLIBCXX_END_NAMESPACE_VERSION ...@@ -268,4 +267,3 @@ _GLIBCXX_END_NAMESPACE_VERSION
} // namespace } // namespace
#endif /* _STL_TEMPBUF_H */ #endif /* _STL_TEMPBUF_H */
...@@ -184,7 +184,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -184,7 +184,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
/// Requests storage large enough to hold a copy of [first,last). /// Requests storage large enough to hold a copy of [first,last).
temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
: _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) { } : _Temporary_buffer<_ForwardIterator, _Tp>(__first,
std::distance(__first, __last))
{ }
/// Destroys objects and frees storage. /// Destroys objects and frees storage.
~temporary_buffer() { } ~temporary_buffer() { }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment