From: Chris Jefferson Date: Thu, 11 Oct 2007 17:56:31 +0000 (+0000) Subject: stl_heap.h (__push_heap, [...]): Use _GLIBCXX_MOVE. X-Git-Tag: releases/gcc-4.3.0~2100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d70e9d81564c69dbcf03ea1539df7b416a2de4c1;p=thirdparty%2Fgcc.git stl_heap.h (__push_heap, [...]): Use _GLIBCXX_MOVE. 2007-10-11 Chris Jefferson Paolo Carlini * include/bits/stl_heap.h (__push_heap, push_heap, __adjust_heap, make_heap): Use _GLIBCXX_MOVE. (__pop_heap): Likewise, adjust signature. (pop_heap): Adjust __pop_heap call. * include/bits/stl_algo.h (__heap_select): Likewise. * testsuite/25_algorithms/heap/moveable.cc: Remove dg-require-rvalref. * testsuite/25_algorithms/partial_sort/moveable.cc: Likewise. Co-Authored-By: Paolo Carlini From-SVN: r129237 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9dc29aeea47f..34c00f7c270a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2007-10-11 Chris Jefferson + Paolo Carlini + + * include/bits/stl_heap.h (__push_heap, push_heap, __adjust_heap, + make_heap): Use _GLIBCXX_MOVE. + (__pop_heap): Likewise, adjust signature. + (pop_heap): Adjust __pop_heap call. + * include/bits/stl_algo.h (__heap_select): Likewise. + * testsuite/25_algorithms/heap/moveable.cc: Remove dg-require-rvalref. + * testsuite/25_algorithms/partial_sort/moveable.cc: Likewise. + 2007-10-11 Paolo Carlini PR libstdc++/33734 diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 4f5bc2764b21..1b1d214964b3 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -1628,13 +1628,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _RandomAccessIterator __middle, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type - _ValueType; - std::make_heap(__first, __middle); for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) if (*__i < *__first) - std::__pop_heap(__first, __middle, __i, _ValueType(*__i)); + std::__pop_heap(__first, __middle, __i); } /** @@ -1648,13 +1645,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _RandomAccessIterator __middle, _RandomAccessIterator __last, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type - _ValueType; - std::make_heap(__first, __middle, __comp); for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) if (__comp(*__i, *__first)) - std::__pop_heap(__first, __middle, __i, _ValueType(*__i), __comp); + std::__pop_heap(__first, __middle, __i, __comp); } // partial_sort diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index 2965a12e8ace..1fd9f7a11605 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -62,6 +62,7 @@ #define _STL_HEAP_H 1 #include +#include _GLIBCXX_BEGIN_NAMESPACE(std) @@ -121,11 +122,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _Distance __parent = (__holeIndex - 1) / 2; while (__holeIndex > __topIndex && *(__first + __parent) < __value) { - *(__first + __holeIndex) = *(__first + __parent); + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __parent)); __holeIndex = __parent; __parent = (__holeIndex - 1) / 2; } - *(__first + __holeIndex) = __value; + *(__first + __holeIndex) = _GLIBCXX_MOVE(__value); } /** @@ -153,12 +154,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap(__first, __last - 1); + _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); std::__push_heap(__first, _DistanceType((__last - __first) - 1), - _DistanceType(0), _ValueType(*(__last - 1))); + _DistanceType(0), _GLIBCXX_MOVE(__value)); } template + typename _Compare> void __push_heap(_RandomAccessIterator __first, _Distance __holeIndex, _Distance __topIndex, _Tp __value, _Compare __comp) @@ -167,11 +169,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) { - *(__first + __holeIndex) = *(__first + __parent); + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __parent)); __holeIndex = __parent; __parent = (__holeIndex - 1) / 2; } - *(__first + __holeIndex) = __value; + *(__first + __holeIndex) = _GLIBCXX_MOVE(__value); } /** @@ -201,8 +203,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap_pred(__first, __last - 1, __comp); + _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); std::__push_heap(__first, _DistanceType((__last - __first) - 1), - _DistanceType(0), _ValueType(*(__last - 1)), __comp); + _DistanceType(0), _GLIBCXX_MOVE(__value), __comp); } template @@ -217,28 +220,35 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __secondChild = 2 * (__secondChild + 1); if (*(__first + __secondChild) < *(__first + (__secondChild - 1))) __secondChild--; - *(__first + __holeIndex) = *(__first + __secondChild); + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __secondChild)); __holeIndex = __secondChild; } if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2) { __secondChild = 2 * (__secondChild + 1); - *(__first + __holeIndex) = *(__first + (__secondChild - 1)); + *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + + (__secondChild - 1))); __holeIndex = __secondChild - 1; } - std::__push_heap(__first, __holeIndex, __topIndex, __value); + std::__push_heap(__first, __holeIndex, __topIndex, + _GLIBCXX_MOVE(__value)); } - template + template inline void __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, - _RandomAccessIterator __result, _Tp __value) + _RandomAccessIterator __result) { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; typedef typename iterator_traits<_RandomAccessIterator>::difference_type - _Distance; - *__result = *__first; - std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), - __value); + _DistanceType; + + _ValueType __value = _GLIBCXX_MOVE(*__result); + *__result = _GLIBCXX_MOVE(*__first); + std::__adjust_heap(__first, _DistanceType(0), + _DistanceType(__last - __first), + _GLIBCXX_MOVE(__value)); } /** @@ -264,8 +274,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap(__first, __last); - std::__pop_heap(__first, __last - 1, __last - 1, - _ValueType(*(__last - 1))); + std::__pop_heap(__first, __last - 1, __last - 1); } template + template inline void __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, - _RandomAccessIterator __result, _Tp __value, _Compare __comp) + _RandomAccessIterator __result, _Compare __comp) { + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; typedef typename iterator_traits<_RandomAccessIterator>::difference_type - _Distance; - *__result = *__first; - std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), - __value, __comp); + _DistanceType; + + _ValueType __value = _GLIBCXX_MOVE(*__result); + *__result = _GLIBCXX_MOVE(*__first); + std::__adjust_heap(__first, _DistanceType(0), + _DistanceType(__last - __first), + _GLIBCXX_MOVE(__value), __comp); } /** @@ -322,17 +338,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type - _ValueType; - // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap_pred(__first, __last, __comp); - std::__pop_heap(__first, __last - 1, __last - 1, - _ValueType(*(__last - 1)), __comp); + std::__pop_heap(__first, __last - 1, __last - 1, __comp); } /** @@ -365,8 +377,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _DistanceType __parent = (__len - 2) / 2; while (true) { - std::__adjust_heap(__first, __parent, __len, - _ValueType(*(__first + __parent))); + _ValueType __value = _GLIBCXX_MOVE(*(__first + __parent)); + std::__adjust_heap(__first, __parent, __len, _GLIBCXX_MOVE(__value)); if (__parent == 0) return; __parent--; @@ -405,8 +417,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _DistanceType __parent = (__len - 2) / 2; while (true) { - std::__adjust_heap(__first, __parent, __len, - _ValueType(*(__first + __parent)), __comp); + _ValueType __value = _GLIBCXX_MOVE(*(__first + __parent)); + std::__adjust_heap(__first, __parent, __len, _GLIBCXX_MOVE(__value), + __comp); if (__parent == 0) return; __parent--; diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc index fe18dbf1e4d5..ee04793e66e4 100644 --- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc +++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc @@ -1,4 +1,3 @@ -// { dg-require-rvalref "" } // { dg-options "-std=gnu++0x" } // Copyright (C) 2005, 2007 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc index 990da41f094a..74a95d9e1a83 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc @@ -1,4 +1,3 @@ -// { dg-require-rvalref "" } // { dg-options "-std=gnu++0x" } // Copyright (C) 2005, 2007 Free Software Foundation, Inc.