diff options
author | François Dumont <fdumont@gcc.gnu.org> | 2018-06-05 05:47:44 +0000 |
---|---|---|
committer | François Dumont <fdumont@gcc.gnu.org> | 2018-06-05 05:47:44 +0000 |
commit | d31238cfde0b9e89a4b24e5d37c81aa55d54494b (patch) | |
tree | 84c1cab69826e9e457f2c0e0adec851039f3544a | |
parent | ca6f2936ccd5da3efe5b387fbfc2d51a7b3d0364 (diff) | |
download | gcc-d31238cfde0b9e89a4b24e5d37c81aa55d54494b.zip gcc-d31238cfde0b9e89a4b24e5d37c81aa55d54494b.tar.gz gcc-d31238cfde0b9e89a4b24e5d37c81aa55d54494b.tar.bz2 |
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_algo.h | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_tempbuf.h | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/memory | 4 |
4 files changed, 22 insertions, 11 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2a201ae..0fa14c1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +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> PR libstdc++/85930 diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 753ebb7..e68ba7c 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -1621,7 +1621,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; - _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last); + _Temporary_buffer<_ForwardIterator, _ValueType> + __buf(__first, std::distance(__first, __last)); return std::__stable_partition_adaptive(__first, __last, __pred, _DistanceType(__buf.requested_size()), @@ -2540,7 +2541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const _DistanceType __len2 = std::distance(__middle, __last); typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; - _TmpBuf __buf(__first, __last); + _TmpBuf __buf(__first, __len1 + __len2); if (__buf.begin() == 0) std::__merge_without_buffer @@ -4998,7 +4999,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO _DistanceType; typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; - _TmpBuf __buf(__first, __last); + _TmpBuf __buf(__first, std::distance(__first, __last)); if (__buf.begin() == 0) std::__inplace_stable_sort(__first, __last, __comp); diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h index 56c4ac5..159ee27 100644 --- a/libstdc++-v3/include/bits/stl_tempbuf.h +++ b/libstdc++-v3/include/bits/stl_tempbuf.h @@ -158,9 +158,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * 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() { @@ -241,9 +241,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _ForwardIterator, typename _Tp> _Temporary_buffer<_ForwardIterator, _Tp>:: - _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) - : _M_original_len(std::distance(__first, __last)), - _M_len(0), _M_buffer(0) + _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) + : _M_original_len(__original_len), _M_len(0), _M_buffer(0) { __try { @@ -253,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_len = __p.second; if (_M_buffer) std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len, - __first); + __seed); } __catch(...) { @@ -268,4 +267,3 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace #endif /* _STL_TEMPBUF_H */ - diff --git a/libstdc++-v3/include/ext/memory b/libstdc++-v3/include/ext/memory index c5d526e..fcc4948 100644 --- a/libstdc++-v3/include/ext/memory +++ b/libstdc++-v3/include/ext/memory @@ -184,7 +184,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { /// Requests storage large enough to hold a copy of [first,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. ~temporary_buffer() { } |