From: Paolo Carlini Date: Sat, 31 Jan 2004 21:37:11 +0000 (+0000) Subject: stl_algo.h: Wrap overlong lines... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ffa67767d08dbb9666c6e128d0273950cf4934b8;p=platform%2Fupstream%2Fgcc.git stl_algo.h: Wrap overlong lines... 2004-01-31 Paolo Carlini * include/bits/stl_algo.h: Wrap overlong lines, constify a few variables, reformat according to the coding standards. * include/bits/stl_algobase.h: Likewise. * include/bits/stl_heap.h: Likewise. From-SVN: r77050 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index efa5a75..ccabde1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2004-01-31 Paolo Carlini + * include/bits/stl_algo.h: Wrap overlong lines, constify + a few variables, reformat according to the coding standards. + * include/bits/stl_algobase.h: Likewise. + * include/bits/stl_heap.h: Likewise. + +2004-01-31 Paolo Carlini + * include/bits/basic_string.h (_Rep::operator[]): Remove, unused. * include/bits/basic_string.h: Fix two comments. diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index ea23fa7..9f0f376 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -202,37 +202,46 @@ namespace std const _Tp& __val, random_access_iterator_tag) { - typename iterator_traits<_RandomAccessIterator>::difference_type __trip_count - = (__last - __first) >> 2; + typename iterator_traits<_RandomAccessIterator>::difference_type + __trip_count = (__last - __first) >> 2; - for ( ; __trip_count > 0 ; --__trip_count) { - if (*__first == __val) return __first; - ++__first; - - if (*__first == __val) return __first; - ++__first; + for ( ; __trip_count > 0 ; --__trip_count) + { + if (*__first == __val) + return __first; + ++__first; - if (*__first == __val) return __first; - ++__first; + if (*__first == __val) + return __first; + ++__first; + + if (*__first == __val) + return __first; + ++__first; - if (*__first == __val) return __first; - ++__first; - } + if (*__first == __val) + return __first; + ++__first; + } - switch(__last - __first) { - case 3: - if (*__first == __val) return __first; - ++__first; - case 2: - if (*__first == __val) return __first; - ++__first; - case 1: - if (*__first == __val) return __first; - ++__first; - case 0: - default: - return __last; - } + switch (__last - __first) + { + case 3: + if (*__first == __val) + return __first; + ++__first; + case 2: + if (*__first == __val) + return __first; + ++__first; + case 1: + if (*__first == __val) + return __first; + ++__first; + case 0: + default: + return __last; + } } /** @@ -246,37 +255,46 @@ namespace std _Predicate __pred, random_access_iterator_tag) { - typename iterator_traits<_RandomAccessIterator>::difference_type __trip_count - = (__last - __first) >> 2; + typename iterator_traits<_RandomAccessIterator>::difference_type + __trip_count = (__last - __first) >> 2; - for ( ; __trip_count > 0 ; --__trip_count) { - if (__pred(*__first)) return __first; - ++__first; + for ( ; __trip_count > 0 ; --__trip_count) + { + if (__pred(*__first)) + return __first; + ++__first; - if (__pred(*__first)) return __first; - ++__first; + if (__pred(*__first)) + return __first; + ++__first; - if (__pred(*__first)) return __first; - ++__first; + if (__pred(*__first)) + return __first; + ++__first; - if (__pred(*__first)) return __first; - ++__first; - } + if (__pred(*__first)) + return __first; + ++__first; + } - switch(__last - __first) { - case 3: - if (__pred(*__first)) return __first; - ++__first; - case 2: - if (__pred(*__first)) return __first; - ++__first; - case 1: - if (__pred(*__first)) return __first; - ++__first; - case 0: - default: - return __last; - } + switch (__last - __first) + { + case 3: + if (__pred(*__first)) + return __first; + ++__first; + case 2: + if (__pred(*__first)) + return __first; + ++__first; + case 1: + if (__pred(*__first)) + return __first; + ++__first; + case 0: + default: + return __last; + } } /** @@ -297,7 +315,8 @@ namespace std __glibcxx_function_requires(_EqualOpConcept< typename iterator_traits<_InputIterator>::value_type, _Tp>) __glibcxx_requires_valid_range(__first, __last); - return std::find(__first, __last, __val, std::__iterator_category(__first)); + return std::find(__first, __last, __val, + std::__iterator_category(__first)); } /** @@ -318,7 +337,8 @@ namespace std __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::find_if(__first, __last, __pred, std::__iterator_category(__first)); + return std::find_if(__first, __last, __pred, + std::__iterator_category(__first)); } /** @@ -341,11 +361,12 @@ namespace std if (__first == __last) return __last; _ForwardIterator __next = __first; - while(++__next != __last) { - if (*__first == *__next) - return __first; - __first = __next; - } + while(++__next != __last) + { + if (*__first == *__next) + return __first; + __first = __next; + } return __last; } @@ -373,11 +394,12 @@ namespace std if (__first == __last) return __last; _ForwardIterator __next = __first; - while(++__next != __last) { - if (__binary_pred(*__first, *__next)) - return __first; - __first = __next; - } + while(++__next != __last) + { + if (__binary_pred(*__first, *__next)) + return __first; + __first = __next; + } return __last; } @@ -430,7 +452,6 @@ namespace std return __n; } - /** * @brief Search a sequence for a matching sub-sequence. * @param first1 A forward iterator. @@ -478,32 +499,30 @@ namespace std return std::find(__first1, __last1, *__first2); // General case. - _ForwardIterator2 __p1, __p; - __p1 = __first2; ++__p1; - _ForwardIterator1 __current = __first1; - while (__first1 != __last1) { - __first1 = std::find(__first1, __last1, *__first2); - if (__first1 == __last1) - return __last1; - - __p = __p1; - __current = __first1; - if (++__current == __last1) - return __last1; + while (__first1 != __last1) + { + __first1 = std::find(__first1, __last1, *__first2); + if (__first1 == __last1) + return __last1; - while (*__current == *__p) { - if (++__p == __last2) - return __first1; + __p = __p1; + __current = __first1; if (++__current == __last1) return __last1; - } - ++__first1; - } + while (*__current == *__p) + { + if (++__p == __last2) + return __first1; + if (++__current == __last1) + return __last1; + } + ++__first1; + } return __first1; } @@ -527,7 +546,8 @@ namespace std * * @see search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2) */ - template + template _ForwardIterator1 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2, @@ -549,44 +569,45 @@ namespace std // Test for a pattern of length 1. _ForwardIterator2 __tmp(__first2); ++__tmp; - if (__tmp == __last2) { - while (__first1 != __last1 && !__predicate(*__first1, *__first2)) - ++__first1; - return __first1; - } + if (__tmp == __last2) + { + while (__first1 != __last1 && !__predicate(*__first1, *__first2)) + ++__first1; + return __first1; + } // General case. - _ForwardIterator2 __p1, __p; - __p1 = __first2; ++__p1; - _ForwardIterator1 __current = __first1; - while (__first1 != __last1) { - while (__first1 != __last1) { - if (__predicate(*__first1, *__first2)) - break; - ++__first1; - } - while (__first1 != __last1 && !__predicate(*__first1, *__first2)) - ++__first1; - if (__first1 == __last1) - return __last1; - - __p = __p1; - __current = __first1; - if (++__current == __last1) return __last1; + while (__first1 != __last1) + { + while (__first1 != __last1) + { + if (__predicate(*__first1, *__first2)) + break; + ++__first1; + } + while (__first1 != __last1 && !__predicate(*__first1, *__first2)) + ++__first1; + if (__first1 == __last1) + return __last1; - while (__predicate(*__current, *__p)) { - if (++__p == __last2) - return __first1; + __p = __p1; + __current = __first1; if (++__current == __last1) return __last1; - } - ++__first1; - } + while (__predicate(*__current, *__p)) + { + if (++__p == __last2) + return __first1; + if (++__current == __last1) + return __last1; + } + ++__first1; + } return __first1; } @@ -617,23 +638,27 @@ namespace std if (__count <= 0) return __first; - else { - __first = std::find(__first, __last, __val); - while (__first != __last) { - typename iterator_traits<_ForwardIterator>::difference_type __n = __count; - _ForwardIterator __i = __first; - ++__i; - while (__i != __last && __n != 1 && *__i == __val) { - ++__i; - --__n; - } - if (__n == 1) - return __first; - else - __first = std::find(__i, __last, __val); + else + { + __first = std::find(__first, __last, __val); + while (__first != __last) + { + typename iterator_traits<_ForwardIterator>::difference_type + __n = __count; + _ForwardIterator __i = __first; + ++__i; + while (__i != __last && __n != 1 && *__i == __val) + { + ++__i; + --__n; + } + if (__n == 1) + return __first; + else + __first = std::find(__i, __last, __val); + } + return __last; } - return __last; - } } /** @@ -666,33 +691,40 @@ namespace std if (__count <= 0) return __first; - else { - while (__first != __last) { - if (__binary_pred(*__first, __val)) - break; - ++__first; - } - while (__first != __last) { - typename iterator_traits<_ForwardIterator>::difference_type __n = __count; - _ForwardIterator __i = __first; - ++__i; - while (__i != __last && __n != 1 && __binary_pred(*__i, __val)) { - ++__i; - --__n; - } - if (__n == 1) - return __first; - else { - while (__i != __last) { - if (__binary_pred(*__i, __val)) + else + { + while (__first != __last) + { + if (__binary_pred(*__first, __val)) break; + ++__first; + } + while (__first != __last) + { + typename iterator_traits<_ForwardIterator>::difference_type + __n = __count; + _ForwardIterator __i = __first; ++__i; + while (__i != __last && __n != 1 && __binary_pred(*__i, __val)) + { + ++__i; + --__n; + } + if (__n == 1) + return __first; + else + { + while (__i != __last) + { + if (__binary_pred(*__i, __val)) + break; + ++__i; + } + __first = __i; + } } - __first = __i; - } + return __last; } - return __last; - } } /** @@ -712,8 +744,10 @@ namespace std _ForwardIterator2 __first2) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator1>) - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator2>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator1>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator2>) __glibcxx_function_requires(_ConvertibleConcept< typename iterator_traits<_ForwardIterator1>::value_type, typename iterator_traits<_ForwardIterator2>::value_type>) @@ -742,7 +776,8 @@ namespace std * * @p unary_op must not alter its argument. */ - template + template _OutputIterator transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __unary_op) @@ -776,8 +811,8 @@ namespace std * * @p binary_op must not alter either of its arguments. */ - template + template _OutputIterator transform(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, @@ -814,7 +849,8 @@ namespace std const _Tp& __old_value, const _Tp& __new_value) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_EqualOpConcept< typename iterator_traits<_ForwardIterator>::value_type, _Tp>) __glibcxx_function_requires(_ConvertibleConcept<_Tp, @@ -844,7 +880,8 @@ namespace std _Predicate __pred, const _Tp& __new_value) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_ConvertibleConcept<_Tp, typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, @@ -903,8 +940,8 @@ namespace std * @p [result,result+(last-first)) replacing elements for which * @p pred returns true with @p new_value. */ - template + template _OutputIterator replace_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, @@ -936,7 +973,8 @@ namespace std */ template void - generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen) + generate(_ForwardIterator __first, _ForwardIterator __last, + _Generator __gen) { // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) @@ -1000,10 +1038,11 @@ namespace std __glibcxx_requires_valid_range(__first, __last); for ( ; __first != __last; ++__first) - if (!(*__first == __value)) { - *__result = *__first; - ++__result; - } + if (!(*__first == __value)) + { + *__result = *__first; + ++__result; + } return __result; } @@ -1021,7 +1060,8 @@ namespace std * remove_copy_if() is stable, so the relative order of elements that are * copied is unchanged. */ - template + template _OutputIterator remove_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) @@ -1035,10 +1075,11 @@ namespace std __glibcxx_requires_valid_range(__first, __last); for ( ; __first != __last; ++__first) - if (!__pred(*__first)) { - *__result = *__first; - ++__result; - } + if (!__pred(*__first)) + { + *__result = *__first; + ++__result; + } return __result; } @@ -1064,7 +1105,8 @@ namespace std const _Tp& __value) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_ConvertibleConcept<_Tp, typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_function_requires(_EqualOpConcept< @@ -1074,7 +1116,8 @@ namespace std __first = std::find(__first, __last, __value); _ForwardIterator __i = __first; return __first == __last ? __first - : std::remove_copy(++__i, __last, __first, __value); + : std::remove_copy(++__i, __last, + __first, __value); } /** @@ -1099,7 +1142,8 @@ namespace std _Predicate __pred) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); @@ -1107,12 +1151,14 @@ namespace std __first = std::find_if(__first, __last, __pred); _ForwardIterator __i = __first; return __first == __last ? __first - : std::remove_copy_if(++__i, __last, __first, __pred); + : std::remove_copy_if(++__i, __last, + __first, __pred); } /** * @if maint - * This is an uglified unique_copy(_InputIterator, _InputIterator, _OutputIterator) + * This is an uglified unique_copy(_InputIterator, _InputIterator, + * _OutputIterator) * overloaded for output iterators. * @endif */ @@ -1126,16 +1172,18 @@ namespace std typename iterator_traits<_InputIterator>::value_type __value = *__first; *__result = __value; while (++__first != __last) - if (!(__value == *__first)) { - __value = *__first; - *++__result = __value; - } + if (!(__value == *__first)) + { + __value = *__first; + *++__result = __value; + } return ++__result; } /** * @if maint - * This is an uglified unique_copy(_InputIterator, _InputIterator, _OutputIterator) + * This is an uglified unique_copy(_InputIterator, _InputIterator, + * _OutputIterator) * overloaded for forward iterators. * @endif */ @@ -1156,11 +1204,13 @@ namespace std /** * @if maint * This is an uglified - * unique_copy(_InputIterator, _InputIterator, _OutputIterator, _BinaryPredicate) + * unique_copy(_InputIterator, _InputIterator, _OutputIterator, + * _BinaryPredicate) * overloaded for output iterators. * @endif */ - template + template _OutputIterator __unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, @@ -1175,21 +1225,24 @@ namespace std typename iterator_traits<_InputIterator>::value_type __value = *__first; *__result = __value; while (++__first != __last) - if (!__binary_pred(__value, *__first)) { - __value = *__first; - *++__result = __value; - } + if (!__binary_pred(__value, *__first)) + { + __value = *__first; + *++__result = __value; + } return ++__result; } /** * @if maint * This is an uglified - * unique_copy(_InputIterator, _InputIterator, _OutputIterator, _BinaryPredicate) + * unique_copy(_InputIterator, _InputIterator, _OutputIterator, + * _BinaryPredicate) * overloaded for forward iterators. * @endif */ - template + template _ForwardIterator __unique_copy(_InputIterator __first, _InputIterator __last, _ForwardIterator __result, @@ -1233,7 +1286,8 @@ namespace std typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - typedef typename iterator_traits<_OutputIterator>::iterator_category _IterType; + typedef typename iterator_traits<_OutputIterator>::iterator_category + _IterType; if (__first == __last) return __result; return std::__unique_copy(__first, __last, __result, _IterType()); @@ -1254,7 +1308,8 @@ namespace std * unique_copy() is stable, so the relative order of elements that are * copied is unchanged. */ - template + template inline _OutputIterator unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, @@ -1266,10 +1321,12 @@ namespace std typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - typedef typename iterator_traits<_OutputIterator>::iterator_category _IterType; + typedef typename iterator_traits<_OutputIterator>::iterator_category + _IterType; if (__first == __last) return __result; - return std::__unique_copy(__first, __last, __result, __binary_pred, _IterType()); + return std::__unique_copy(__first, __last, __result, + __binary_pred, _IterType()); } /** @@ -1290,7 +1347,8 @@ namespace std unique(_ForwardIterator __first, _ForwardIterator __last) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_EqualityComparableConcept< typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); @@ -1329,7 +1387,8 @@ namespace std _BinaryPredicate __binary_pred) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate, typename iterator_traits<_ForwardIterator>::value_type, typename iterator_traits<_ForwardIterator>::value_type>) @@ -1351,7 +1410,8 @@ namespace std /** * @if maint - * This is an uglified reverse(_BidirectionalIterator, _BidirectionalIterator) + * This is an uglified reverse(_BidirectionalIterator, + * _BidirectionalIterator) * overloaded for bidirectional iterators. * @endif */ @@ -1369,7 +1429,8 @@ namespace std /** * @if maint - * This is an uglified reverse(_BidirectionalIterator, _BidirectionalIterator) + * This is an uglified reverse(_BidirectionalIterator, + * _BidirectionalIterator) * overloaded for bidirectional iterators. * @endif */ @@ -1425,16 +1486,18 @@ namespace std _OutputIterator __result) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator, typename iterator_traits<_BidirectionalIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - while (__first != __last) { - --__last; - *__result = *__last; - ++__result; - } + while (__first != __last) + { + --__last; + *__result = *__last; + ++__result; + } return __result; } @@ -1449,11 +1512,12 @@ namespace std _EuclideanRingElement __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) { - while (__n != 0) { - _EuclideanRingElement __t = __m % __n; - __m = __n; - __n = __t; - } + while (__n != 0) + { + _EuclideanRingElement __t = __m % __n; + __m = __n; + __n = __t; + } return __m; } @@ -1473,21 +1537,24 @@ namespace std return; _ForwardIterator __first2 = __middle; - do { - swap(*__first++, *__first2++); - if (__first == __middle) - __middle = __first2; - } while (__first2 != __last); + do + { + swap(*__first++, *__first2++); + if (__first == __middle) + __middle = __first2; + } + while (__first2 != __last); __first2 = __middle; - while (__first2 != __last) { - swap(*__first++, *__first2++); - if (__first == __middle) - __middle = __first2; - else if (__first2 == __last) - __first2 = __middle; - } + while (__first2 != __last) + { + swap(*__first++, *__first2++); + if (__first == __middle) + __middle = __first2; + else if (__first2 == __last) + __first2 = __middle; + } } /** @@ -1515,12 +1582,10 @@ namespace std while (__first != __middle && __middle != __last) swap(*__first++, *--__last); - if (__first == __middle) { + if (__first == __middle) std::__reverse(__middle, __last, bidirectional_iterator_tag()); - } - else { + else std::__reverse(__first, __middle, bidirectional_iterator_tag()); - } } /** @@ -1542,51 +1607,59 @@ namespace std if ((__first == __middle) || (__last == __middle)) return; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance; - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; - - _Distance __n = __last - __first; - _Distance __k = __middle - __first; - _Distance __l = __n - __k; - - if (__k == __l) { - std::swap_ranges(__first, __middle, __middle); - return; - } - - _Distance __d = __gcd(__n, __k); - - for (_Distance __i = 0; __i < __d; __i++) { - _ValueType __tmp = *__first; - _RandomAccessIterator __p = __first; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; - if (__k < __l) { - for (_Distance __j = 0; __j < __l/__d; __j++) { - if (__p > __first + __l) { - *__p = *(__p - __l); - __p -= __l; - } + const _Distance __n = __last - __first; + const _Distance __k = __middle - __first; + const _Distance __l = __n - __k; - *__p = *(__p + __k); - __p += __k; - } + if (__k == __l) + { + std::swap_ranges(__first, __middle, __middle); + return; } - else { - for (_Distance __j = 0; __j < __k/__d - 1; __j ++) { - if (__p < __last - __k) { - *__p = *(__p + __k); - __p += __k; + const _Distance __d = __gcd(__n, __k); + + for (_Distance __i = 0; __i < __d; __i++) + { + const _ValueType __tmp = *__first; + _RandomAccessIterator __p = __first; + + if (__k < __l) + { + for (_Distance __j = 0; __j < __l / __d; __j++) + { + if (__p > __first + __l) + { + *__p = *(__p - __l); + __p -= __l; + } + + *__p = *(__p + __k); + __p += __k; + } } - - *__p = * (__p - __l); - __p -= __l; - } + else + { + for (_Distance __j = 0; __j < __k / __d - 1; __j ++) + { + if (__p < __last - __k) + { + *__p = *(__p + __k); + __p += __k; + } + *__p = * (__p - __l); + __p -= __l; + } + } + + *__p = __tmp; + ++__first; } - - *__p = __tmp; - ++__first; - } } /** @@ -1609,14 +1682,17 @@ namespace std */ template inline void - rotate(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) + rotate(_ForwardIterator __first, _ForwardIterator __middle, + _ForwardIterator __last) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_requires_valid_range(__first, __middle); __glibcxx_requires_valid_range(__middle, __last); - typedef typename iterator_traits<_ForwardIterator>::iterator_category _IterType; + typedef typename iterator_traits<_ForwardIterator>::iterator_category + _IterType; std::__rotate(__first, __middle, __last, _IterType()); } @@ -1699,7 +1775,8 @@ namespace std _RandomAccessIterator>) __glibcxx_requires_valid_range(__first, __last); - if (__first == __last) return; + if (__first == __last) + return; for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) std::iter_swap(__i, __first + __rand((__i - __first) + 1)); } @@ -1713,21 +1790,24 @@ namespace std template _ForwardIterator __partition(_ForwardIterator __first, _ForwardIterator __last, - _Predicate __pred, + _Predicate __pred, forward_iterator_tag) { - if (__first == __last) return __first; + if (__first == __last) + return __first; while (__pred(*__first)) - if (++__first == __last) return __first; + if (++__first == __last) + return __first; _ForwardIterator __next = __first; while (++__next != __last) - if (__pred(*__next)) { - swap(*__first, *__next); - ++__first; - } + if (__pred(*__next)) + { + swap(*__first, *__next); + ++__first; + } return __first; } @@ -1743,25 +1823,26 @@ namespace std _Predicate __pred, bidirectional_iterator_tag) { - while (true) { - while (true) - if (__first == __last) - return __first; - else if (__pred(*__first)) - ++__first; - else - break; - --__last; - while (true) - if (__first == __last) - return __first; - else if (!__pred(*__last)) - --__last; - else - break; - std::iter_swap(__first, __last); - ++__first; - } + while (true) + { + while (true) + if (__first == __last) + return __first; + else if (__pred(*__first)) + ++__first; + else + break; + --__last; + while (true) + if (__first == __last) + return __first; + else if (!__pred(*__last)) + --__last; + else + break; + std::iter_swap(__first, __last); + ++__first; + } } /** @@ -1784,12 +1865,14 @@ namespace std _Predicate __pred) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__partition(__first, __last, __pred, std::__iterator_category(__first)); + return std::__partition(__first, __last, __pred, + std::__iterator_category(__first)); } @@ -1800,19 +1883,22 @@ namespace std */ template _ForwardIterator - __inplace_stable_partition(_ForwardIterator __first, _ForwardIterator __last, + __inplace_stable_partition(_ForwardIterator __first, + _ForwardIterator __last, _Predicate __pred, _Distance __len) { if (__len == 1) return __pred(*__first) ? __last : __first; _ForwardIterator __middle = __first; std::advance(__middle, __len / 2); - _ForwardIterator __begin = std::__inplace_stable_partition(__first, __middle, + _ForwardIterator __begin = std::__inplace_stable_partition(__first, + __middle, __pred, __len / 2); _ForwardIterator __end = std::__inplace_stable_partition(__middle, __last, __pred, - __len - __len / 2); + __len + - __len / 2); std::rotate(__begin, __middle, __end); std::advance(__begin, std::distance(__middle, __end)); return __begin; @@ -1826,41 +1912,46 @@ namespace std template _ForwardIterator - __stable_partition_adaptive(_ForwardIterator __first, _ForwardIterator __last, + __stable_partition_adaptive(_ForwardIterator __first, + _ForwardIterator __last, _Predicate __pred, _Distance __len, _Pointer __buffer, _Distance __buffer_size) { - if (__len <= __buffer_size) { - _ForwardIterator __result1 = __first; - _Pointer __result2 = __buffer; - for ( ; __first != __last ; ++__first) - if (__pred(*__first)) { - *__result1 = *__first; - ++__result1; - } - else { - *__result2 = *__first; - ++__result2; - } - std::copy(__buffer, __result2, __result1); - return __result1; - } - else { - _ForwardIterator __middle = __first; - std::advance(__middle, __len / 2); - _ForwardIterator __begin = std::__stable_partition_adaptive(__first, __middle, - __pred, - __len / 2, - __buffer, __buffer_size); - _ForwardIterator __end = std::__stable_partition_adaptive( __middle, __last, - __pred, - __len - __len / 2, - __buffer, __buffer_size); - std::rotate(__begin, __middle, __end); - std::advance(__begin, std::distance(__middle, __end)); - return __begin; - } + if (__len <= __buffer_size) + { + _ForwardIterator __result1 = __first; + _Pointer __result2 = __buffer; + for ( ; __first != __last ; ++__first) + if (__pred(*__first)) + { + *__result1 = *__first; + ++__result1; + } + else + { + *__result2 = *__first; + ++__result2; + } + std::copy(__buffer, __result2, __result1); + return __result1; + } + else + { + _ForwardIterator __middle = __first; + std::advance(__middle, __len / 2); + _ForwardIterator __begin = + std::__stable_partition_adaptive(__first, __middle, __pred, + __len / 2, __buffer, + __buffer_size); + _ForwardIterator __end = + std::__stable_partition_adaptive(__middle, __last, __pred, + __len - __len / 2, + __buffer, __buffer_size); + std::rotate(__begin, __middle, __end); + std::advance(__begin, std::distance(__middle, __end)); + return __begin; + } } /** @@ -1885,7 +1976,8 @@ namespace std _Predicate __pred) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); @@ -1893,19 +1985,24 @@ namespace std if (__first == __last) return __first; else - { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; - - _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last); + { + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; + + _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, + __last); if (__buf.size() > 0) - return std::__stable_partition_adaptive(__first, __last, __pred, - _DistanceType(__buf.requested_size()), - __buf.begin(), __buf.size()); + return + std::__stable_partition_adaptive(__first, __last, __pred, + _DistanceType(__buf.requested_size()), + __buf.begin(), __buf.size()); else - return std::__inplace_stable_partition(__first, __last, __pred, - _DistanceType(__buf.requested_size())); - } + return + std::__inplace_stable_partition(__first, __last, __pred, + _DistanceType(__buf.requested_size())); + } } /** @@ -1915,20 +2012,21 @@ namespace std */ template _RandomAccessIterator - __unguarded_partition(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Tp __pivot) + __unguarded_partition(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Tp __pivot) { - while (true) { - while (*__first < __pivot) - ++__first; - --__last; - while (__pivot < *__last) + while (true) + { + while (*__first < __pivot) + ++__first; --__last; - if (!(__first < __last)) - return __first; - std::iter_swap(__first, __last); - ++__first; - } + while (__pivot < *__last) + --__last; + if (!(__first < __last)) + return __first; + std::iter_swap(__first, __last); + ++__first; + } } /** @@ -1938,23 +2036,24 @@ namespace std */ template _RandomAccessIterator - __unguarded_partition(_RandomAccessIterator __first, _RandomAccessIterator __last, + __unguarded_partition(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Tp __pivot, _Compare __comp) { - while (true) { - while (__comp(*__first, __pivot)) - ++__first; - --__last; - while (__comp(__pivot, *__last)) + while (true) + { + while (__comp(*__first, __pivot)) + ++__first; --__last; - if (!(__first < __last)) - return __first; - std::iter_swap(__first, __last); - ++__first; - } + while (__comp(__pivot, *__last)) + --__last; + if (!(__first < __last)) + return __first; + std::iter_swap(__first, __last); + ++__first; + } } - /** * @if maint * @doctodo @@ -1974,11 +2073,12 @@ namespace std { _RandomAccessIterator __next = __last; --__next; - while (__val < *__next) { - *__last = *__next; - __last = __next; - --__next; - } + while (__val < *__next) + { + *__last = *__next; + __last = __next; + --__next; + } *__last = __val; } @@ -1989,15 +2089,17 @@ namespace std */ template void - __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val, _Compare __comp) + __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val, + _Compare __comp) { _RandomAccessIterator __next = __last; --__next; - while (__comp(__val, *__next)) { - *__last = *__next; - __last = __next; - --__next; - } + while (__comp(__val, *__next)) + { + *__last = *__next; + __last = __next; + --__next; + } *__last = __val; } @@ -2008,17 +2110,21 @@ namespace std */ template void - __insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + __insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last) { - if (__first == __last) return; + if (__first == __last) + return; for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) { - typename iterator_traits<_RandomAccessIterator>::value_type __val = *__i; - if (__val < *__first) { - std::copy_backward(__first, __i, __i + 1); - *__first = __val; - } + typename iterator_traits<_RandomAccessIterator>::value_type + __val = *__i; + if (__val < *__first) + { + std::copy_backward(__first, __i, __i + 1); + *__first = __val; + } else std::__unguarded_linear_insert(__i, __val); } @@ -2031,18 +2137,20 @@ namespace std */ template void - __insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Compare __comp) + __insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) { if (__first == __last) return; for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) { - typename iterator_traits<_RandomAccessIterator>::value_type __val = *__i; - if (__comp(__val, *__first)) { - std::copy_backward(__first, __i, __i + 1); - *__first = __val; - } + typename iterator_traits<_RandomAccessIterator>::value_type + __val = *__i; + if (__comp(__val, *__first)) + { + std::copy_backward(__first, __i, __i + 1); + *__first = __val; + } else std::__unguarded_linear_insert(__i, __val, __comp); } @@ -2055,9 +2163,11 @@ namespace std */ template inline void - __unguarded_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + __unguarded_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; for (_RandomAccessIterator __i = __first; __i != __last; ++__i) std::__unguarded_linear_insert(__i, _ValueType(*__i)); @@ -2070,10 +2180,11 @@ namespace std */ template inline void - __unguarded_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Compare __comp) + __unguarded_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; for (_RandomAccessIterator __i = __first; __i != __last; ++__i) std::__unguarded_linear_insert(__i, _ValueType(*__i), __comp); @@ -2086,12 +2197,14 @@ namespace std */ template void - __final_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + __final_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last) { - if (__last - __first > _S_threshold) { - std::__insertion_sort(__first, __first + _S_threshold); - std::__unguarded_insertion_sort(__first + _S_threshold, __last); - } + if (__last - __first > _S_threshold) + { + std::__insertion_sort(__first, __first + _S_threshold); + std::__unguarded_insertion_sort(__first + _S_threshold, __last); + } else std::__insertion_sort(__first, __last); } @@ -2103,13 +2216,15 @@ namespace std */ template void - __final_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Compare __comp) - { - if (__last - __first > _S_threshold) { - std::__insertion_sort(__first, __first + _S_threshold, __comp); - std::__unguarded_insertion_sort(__first + _S_threshold, __last, __comp); - } + __final_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) + { + if (__last - __first > _S_threshold) + { + std::__insertion_sort(__first, __first + _S_threshold, __comp); + std::__unguarded_insertion_sort(__first + _S_threshold, __last, + __comp); + } else std::__insertion_sort(__first, __last, __comp); } @@ -2124,7 +2239,8 @@ namespace std __lg(_Size __n) { _Size __k; - for (__k = 0; __n != 1; __n >>= 1) ++__k; + for (__k = 0; __n != 1; __n >>= 1) + ++__k; return __k; } @@ -2149,7 +2265,8 @@ namespace std _RandomAccessIterator __middle, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< @@ -2190,13 +2307,14 @@ namespace std _RandomAccessIterator __last, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, - _ValueType, _ValueType>) + _ValueType, _ValueType>) __glibcxx_requires_valid_range(__first, __middle); __glibcxx_requires_valid_range(__middle, __last); @@ -2230,33 +2348,41 @@ namespace std _RandomAccessIterator __result_first, _RandomAccessIterator __result_last) { - typedef typename iterator_traits<_InputIterator>::value_type _InputValueType; - typedef typename iterator_traits<_RandomAccessIterator>::value_type _OutputValueType; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_InputIterator>::value_type + _InputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _OutputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) - __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, _OutputValueType>) + __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, + _OutputValueType>) __glibcxx_function_requires(_LessThanComparableConcept<_OutputValueType>) __glibcxx_function_requires(_LessThanComparableConcept<_InputValueType>) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_valid_range(__result_first, __result_last); - if (__result_first == __result_last) return __result_last; + if (__result_first == __result_last) + return __result_last; _RandomAccessIterator __result_real_last = __result_first; - while(__first != __last && __result_real_last != __result_last) { - *__result_real_last = *__first; - ++__result_real_last; - ++__first; - } + while(__first != __last && __result_real_last != __result_last) + { + *__result_real_last = *__first; + ++__result_real_last; + ++__first; + } std::make_heap(__result_first, __result_real_last); - while (__first != __last) { - if (*__first < *__result_first) - std::__adjust_heap(__result_first, _DistanceType(0), - _DistanceType(__result_real_last - __result_first), - _InputValueType(*__first)); - ++__first; - } + while (__first != __last) + { + if (*__first < *__result_first) + std::__adjust_heap(__result_first, _DistanceType(0), + _DistanceType(__result_real_last + - __result_first), + _InputValueType(*__first)); + ++__first; + } std::sort_heap(__result_first, __result_real_last); return __result_real_last; } @@ -2287,35 +2413,44 @@ namespace std _RandomAccessIterator __result_last, _Compare __comp) { - typedef typename iterator_traits<_InputIterator>::value_type _InputValueType; - typedef typename iterator_traits<_RandomAccessIterator>::value_type _OutputValueType; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_InputIterator>::value_type + _InputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _OutputValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) - __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<_RandomAccessIterator>) - __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, _OutputValueType>) + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) + __glibcxx_function_requires(_ConvertibleConcept<_InputValueType, + _OutputValueType>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _OutputValueType, _OutputValueType>) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_valid_range(__result_first, __result_last); - if (__result_first == __result_last) return __result_last; + if (__result_first == __result_last) + return __result_last; _RandomAccessIterator __result_real_last = __result_first; - while(__first != __last && __result_real_last != __result_last) { - *__result_real_last = *__first; - ++__result_real_last; - ++__first; - } + while(__first != __last && __result_real_last != __result_last) + { + *__result_real_last = *__first; + ++__result_real_last; + ++__first; + } std::make_heap(__result_first, __result_real_last, __comp); - while (__first != __last) { - if (__comp(*__first, *__result_first)) - std::__adjust_heap(__result_first, _DistanceType(0), - _DistanceType(__result_real_last - __result_first), - _InputValueType(*__first), - __comp); - ++__first; - } + while (__first != __last) + { + if (__comp(*__first, *__result_first)) + std::__adjust_heap(__result_first, _DistanceType(0), + _DistanceType(__result_real_last + - __result_first), + _InputValueType(*__first), + __comp); + ++__first; + } std::sort_heap(__result_first, __result_real_last, __comp); return __result_real_last; } @@ -2327,25 +2462,33 @@ namespace std */ template void - __introsort_loop(_RandomAccessIterator __first, _RandomAccessIterator __last, + __introsort_loop(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Size __depth_limit) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; - while (__last - __first > _S_threshold) { - if (__depth_limit == 0) { - std::partial_sort(__first, __last, __last); - return; + while (__last - __first > _S_threshold) + { + if (__depth_limit == 0) + { + std::partial_sort(__first, __last, __last); + return; + } + --__depth_limit; + _RandomAccessIterator __cut = + std::__unguarded_partition(__first, __last, + _ValueType(std::__median(*__first, + *(__first + + (__last + - __first) + / 2), + *(__last + - 1)))); + std::__introsort_loop(__cut, __last, __depth_limit); + __last = __cut; } - --__depth_limit; - _RandomAccessIterator __cut = - std::__unguarded_partition(__first, __last, - _ValueType(std::__median(*__first, - *(__first + (__last - __first)/2), - *(__last - 1)))); - std::__introsort_loop(__cut, __last, __depth_limit); - __last = __cut; - } } /** @@ -2355,25 +2498,34 @@ namespace std */ template void - __introsort_loop(_RandomAccessIterator __first, _RandomAccessIterator __last, + __introsort_loop(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Size __depth_limit, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; - while (__last - __first > _S_threshold) { - if (__depth_limit == 0) { - std::partial_sort(__first, __last, __last, __comp); - return; + while (__last - __first > _S_threshold) + { + if (__depth_limit == 0) + { + std::partial_sort(__first, __last, __last, __comp); + return; + } + --__depth_limit; + _RandomAccessIterator __cut = + std::__unguarded_partition(__first, __last, + _ValueType(std::__median(*__first, + *(__first + + (__last + - __first) + / 2), + *(__last - 1), + __comp)), + __comp); + std::__introsort_loop(__cut, __last, __depth_limit, __comp); + __last = __cut; } - --__depth_limit; - _RandomAccessIterator __cut = - std::__unguarded_partition(__first, __last, - _ValueType(std::__median(*__first, - *(__first + (__last - __first)/2), - *(__last - 1), __comp)), __comp); - std::__introsort_loop(__cut, __last, __depth_limit, __comp); - __last = __cut; - } } /** @@ -2393,7 +2545,8 @@ namespace std inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< @@ -2401,10 +2554,11 @@ namespace std __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __last); - if (__first != __last) { - std::__introsort_loop(__first, __last, __lg(__last - __first) * 2); - std::__final_insertion_sort(__first, __last); - } + if (__first != __last) + { + std::__introsort_loop(__first, __last, __lg(__last - __first) * 2); + std::__final_insertion_sort(__first, __last); + } } /** @@ -2423,20 +2577,25 @@ namespace std */ template inline void - sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) + sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) - __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType, _ValueType>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType, + _ValueType>) __glibcxx_requires_valid_range(__first, __last); - if (__first != __last) { - std::__introsort_loop(__first, __last, __lg(__last - __first) * 2, __comp); - std::__final_insertion_sort(__first, __last, __comp); - } + if (__first != __last) + { + std::__introsort_loop(__first, __last, __lg(__last - __first) * 2, + __comp); + std::__final_insertion_sort(__first, __last, __comp); + } } /** @@ -2451,10 +2610,13 @@ namespace std */ template _ForwardIterator - lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) + lower_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements // Note that these are slightly stricter than those of the 4-argument @@ -2470,18 +2632,20 @@ namespace std _DistanceType __half; _ForwardIterator __middle; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (*__middle < __val) { - __first = __middle; - ++__first; - __len = __len - __half - 1; + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (*__middle < __val) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else + __len = __half; } - else - __len = __half; - } return __first; } @@ -2504,30 +2668,35 @@ namespace std lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) - __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType, _Tp>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _ValueType, _Tp>) __glibcxx_requires_partitioned_pred(__first, __last, __val, __comp); _DistanceType __len = std::distance(__first, __last); _DistanceType __half; _ForwardIterator __middle; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (__comp(*__middle, __val)) { - __first = __middle; - ++__first; - __len = __len - __half - 1; + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (__comp(*__middle, __val)) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else + __len = __half; } - else - __len = __half; - } return __first; } @@ -2543,10 +2712,13 @@ namespace std */ template _ForwardIterator - upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) + upper_bound(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements // See comments on lower_bound. @@ -2559,18 +2731,20 @@ namespace std _DistanceType __half; _ForwardIterator __middle; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (__val < *__middle) - __len = __half; - else { - __first = __middle; - ++__first; - __len = __len - __half - 1; + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (__val < *__middle) + __len = __half; + else + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } } - } return __first; } @@ -2593,30 +2767,35 @@ namespace std upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) - __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _Tp, _ValueType>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _Tp, _ValueType>) __glibcxx_requires_partitioned_pred(__first, __last, __val, __comp); _DistanceType __len = std::distance(__first, __last); _DistanceType __half; _ForwardIterator __middle; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (__comp(__val, *__middle)) - __len = __half; - else { - __first = __middle; - ++__first; - __len = __len - __half - 1; + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (__comp(__val, *__middle)) + __len = __half; + else + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } } - } return __first; } @@ -2634,27 +2813,30 @@ namespace std { if (__len1 == 0 || __len2 == 0) return; - if (__len1 + __len2 == 2) { - if (*__middle < *__first) - std::iter_swap(__first, __middle); - return; - } + if (__len1 + __len2 == 2) + { + if (*__middle < *__first) + std::iter_swap(__first, __middle); + return; + } _BidirectionalIterator __first_cut = __first; _BidirectionalIterator __second_cut = __middle; _Distance __len11 = 0; _Distance __len22 = 0; - if (__len1 > __len2) { - __len11 = __len1 / 2; - std::advance(__first_cut, __len11); - __second_cut = std::lower_bound(__middle, __last, *__first_cut); - __len22 = std::distance(__middle, __second_cut); - } - else { - __len22 = __len2 / 2; - std::advance(__second_cut, __len22); - __first_cut = std::upper_bound(__first, __middle, *__second_cut); - __len11 = std::distance(__first, __first_cut); - } + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut = std::lower_bound(__middle, __last, *__first_cut); + __len22 = std::distance(__middle, __second_cut); + } + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut = std::upper_bound(__first, __middle, *__second_cut); + __len11 = std::distance(__first, __first_cut); + } std::rotate(__first_cut, __middle, __second_cut); _BidirectionalIterator __new_middle = __first_cut; std::advance(__new_middle, std::distance(__middle, __second_cut)); @@ -2669,7 +2851,8 @@ namespace std * This is a helper function for the merge routines. * @endif */ - template + template void __merge_without_buffer(_BidirectionalIterator __first, _BidirectionalIterator __middle, @@ -2679,27 +2862,32 @@ namespace std { if (__len1 == 0 || __len2 == 0) return; - if (__len1 + __len2 == 2) { - if (__comp(*__middle, *__first)) - std::iter_swap(__first, __middle); - return; - } + if (__len1 + __len2 == 2) + { + if (__comp(*__middle, *__first)) + std::iter_swap(__first, __middle); + return; + } _BidirectionalIterator __first_cut = __first; _BidirectionalIterator __second_cut = __middle; _Distance __len11 = 0; _Distance __len22 = 0; - if (__len1 > __len2) { - __len11 = __len1 / 2; - std::advance(__first_cut, __len11); - __second_cut = std::lower_bound(__middle, __last, *__first_cut, __comp); - __len22 = std::distance(__middle, __second_cut); - } - else { - __len22 = __len2 / 2; - std::advance(__second_cut, __len22); - __first_cut = std::upper_bound(__first, __middle, *__second_cut, __comp); - __len11 = std::distance(__first, __first_cut); - } + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut = std::lower_bound(__middle, __last, *__first_cut, + __comp); + __len22 = std::distance(__middle, __second_cut); + } + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut = std::upper_bound(__first, __middle, *__second_cut, + __comp); + __len11 = std::distance(__first, __first_cut); + } std::rotate(__first_cut, __middle, __second_cut); _BidirectionalIterator __new_middle = __first_cut; std::advance(__new_middle, std::distance(__middle, __second_cut)); @@ -2716,12 +2904,14 @@ namespace std */ template void - __inplace_stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) + __inplace_stable_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last) { - if (__last - __first < 15) { - std::__insertion_sort(__first, __last); - return; - } + if (__last - __first < 15) + { + std::__insertion_sort(__first, __last); + return; + } _RandomAccessIterator __middle = __first + (__last - __first) / 2; std::__inplace_stable_sort(__first, __middle); std::__inplace_stable_sort(__middle, __last); @@ -2737,13 +2927,14 @@ namespace std */ template void - __inplace_stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Compare __comp) + __inplace_stable_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Compare __comp) { - if (__last - __first < 15) { - std::__insertion_sort(__first, __last, __comp); - return; - } + if (__last - __first < 15) + { + std::__insertion_sort(__first, __last, __comp); + return; + } _RandomAccessIterator __middle = __first + (__last - __first) / 2; std::__inplace_stable_sort(__first, __middle, __comp); std::__inplace_stable_sort(__middle, __last, __comp); @@ -2769,7 +2960,8 @@ namespace std * elements in the two ranges, elements from the first range will always * come before elements from the second. */ - template + template _OutputIterator merge(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -2788,18 +2980,22 @@ namespace std __glibcxx_requires_sorted(__first1, __last1); __glibcxx_requires_sorted(__first2, __last2); - while (__first1 != __last1 && __first2 != __last2) { - if (*__first2 < *__first1) { - *__result = *__first2; - ++__first2; - } - else { - *__result = *__first1; - ++__first1; + while (__first1 != __last1 && __first2 != __last2) + { + if (*__first2 < *__first1) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + } + ++__result; } - ++__result; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + return std::copy(__first2, __last2, std::copy(__first1, __last1, + __result)); } /** @@ -2822,8 +3018,8 @@ namespace std * The comparison function should have the same effects on ordering as * the function used for the initial sort. */ - template + template _OutputIterator merge(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -2843,34 +3039,41 @@ namespace std __glibcxx_requires_sorted_pred(__first1, __last1, __comp); __glibcxx_requires_sorted_pred(__first2, __last2, __comp); - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } - else { - *__result = *__first1; - ++__first1; + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(*__first2, *__first1)) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + } + ++__result; } - ++__result; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + return std::copy(__first2, __last2, std::copy(__first1, __last1, + __result)); } template void - __merge_sort_loop(_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, - _RandomAccessIterator2 __result, _Distance __step_size) - { - _Distance __two_step = 2 * __step_size; - - while (__last - __first >= __two_step) { - __result = std::merge(__first, __first + __step_size, - __first + __step_size, __first + __two_step, - __result); - __first += __two_step; - } + __merge_sort_loop(_RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, + _RandomAccessIterator2 __result, + _Distance __step_size) + { + const _Distance __two_step = 2 * __step_size; + + while (__last - __first >= __two_step) + { + __result = std::merge(__first, __first + __step_size, + __first + __step_size, __first + __two_step, + __result); + __first += __two_step; + } __step_size = std::min(_Distance(__last - __first), __step_size); std::merge(__first, __first + __step_size, __first + __step_size, __last, @@ -2880,21 +3083,23 @@ namespace std template void - __merge_sort_loop(_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, + __merge_sort_loop(_RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, _RandomAccessIterator2 __result, _Distance __step_size, _Compare __comp) { - _Distance __two_step = 2 * __step_size; + const _Distance __two_step = 2 * __step_size; - while (__last - __first >= __two_step) { - __result = std::merge(__first, __first + __step_size, - __first + __step_size, __first + __two_step, - __result, - __comp); - __first += __two_step; - } + while (__last - __first >= __two_step) + { + __result = std::merge(__first, __first + __step_size, + __first + __step_size, __first + __two_step, + __result, + __comp); + __first += __two_step; + } __step_size = std::min(_Distance(__last - __first), __step_size); - + std::merge(__first, __first + __step_size, __first + __step_size, __last, __result, @@ -2905,68 +3110,80 @@ namespace std template void - __chunk_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + __chunk_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Distance __chunk_size) { - while (__last - __first >= __chunk_size) { - std::__insertion_sort(__first, __first + __chunk_size); - __first += __chunk_size; - } + while (__last - __first >= __chunk_size) + { + std::__insertion_sort(__first, __first + __chunk_size); + __first += __chunk_size; + } std::__insertion_sort(__first, __last); } template void - __chunk_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + __chunk_insertion_sort(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Distance __chunk_size, _Compare __comp) { - while (__last - __first >= __chunk_size) { - std::__insertion_sort(__first, __first + __chunk_size, __comp); - __first += __chunk_size; - } + while (__last - __first >= __chunk_size) + { + std::__insertion_sort(__first, __first + __chunk_size, __comp); + __first += __chunk_size; + } std::__insertion_sort(__first, __last, __comp); } template void - __merge_sort_with_buffer(_RandomAccessIterator __first, _RandomAccessIterator __last, + __merge_sort_with_buffer(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Pointer __buffer) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; - _Distance __len = __last - __first; - _Pointer __buffer_last = __buffer + __len; + const _Distance __len = __last - __first; + const _Pointer __buffer_last = __buffer + __len; _Distance __step_size = _S_chunk_size; std::__chunk_insertion_sort(__first, __last, __step_size); - while (__step_size < __len) { - std::__merge_sort_loop(__first, __last, __buffer, __step_size); - __step_size *= 2; - std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size); - __step_size *= 2; - } + while (__step_size < __len) + { + std::__merge_sort_loop(__first, __last, __buffer, __step_size); + __step_size *= 2; + std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size); + __step_size *= 2; + } } template void - __merge_sort_with_buffer(_RandomAccessIterator __first, _RandomAccessIterator __last, + __merge_sort_with_buffer(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Pointer __buffer, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; - _Distance __len = __last - __first; - _Pointer __buffer_last = __buffer + __len; + const _Distance __len = __last - __first; + const _Pointer __buffer_last = __buffer + __len; _Distance __step_size = _S_chunk_size; std::__chunk_insertion_sort(__first, __last, __step_size, __comp); - while (__step_size < __len) { - std::__merge_sort_loop(__first, __last, __buffer, __step_size, __comp); - __step_size *= 2; - std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp); - __step_size *= 2; - } + while (__step_size < __len) + { + std::__merge_sort_loop(__first, __last, __buffer, + __step_size, __comp); + __step_size *= 2; + std::__merge_sort_loop(__buffer, __buffer_last, __first, + __step_size, __comp); + __step_size *= 2; + } } /** @@ -2977,8 +3194,10 @@ namespace std template _BidirectionalIterator3 - __merge_backward(_BidirectionalIterator1 __first1, _BidirectionalIterator1 __last1, - _BidirectionalIterator2 __first2, _BidirectionalIterator2 __last2, + __merge_backward(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, _BidirectionalIterator3 __result) { if (__first1 == __last1) @@ -2987,20 +3206,23 @@ namespace std return std::copy_backward(__first1, __last1, __result); --__last1; --__last2; - while (true) { - if (*__last2 < *__last1) { - *--__result = *__last1; - if (__first1 == __last1) - return std::copy_backward(__first2, ++__last2, __result); - --__last1; - } - else { - *--__result = *__last2; - if (__first2 == __last2) - return std::copy_backward(__first1, ++__last1, __result); - --__last2; + while (true) + { + if (*__last2 < *__last1) + { + *--__result = *__last1; + if (__first1 == __last1) + return std::copy_backward(__first2, ++__last2, __result); + --__last1; + } + else + { + *--__result = *__last2; + if (__first2 == __last2) + return std::copy_backward(__first1, ++__last1, __result); + --__last2; + } } - } } /** @@ -3011,8 +3233,10 @@ namespace std template _BidirectionalIterator3 - __merge_backward(_BidirectionalIterator1 __first1, _BidirectionalIterator1 __last1, - _BidirectionalIterator2 __first2, _BidirectionalIterator2 __last2, + __merge_backward(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, _BidirectionalIterator3 __result, _Compare __comp) { @@ -3022,20 +3246,23 @@ namespace std return std::copy_backward(__first1, __last1, __result); --__last1; --__last2; - while (true) { - if (__comp(*__last2, *__last1)) { - *--__result = *__last1; - if (__first1 == __last1) - return std::copy_backward(__first2, ++__last2, __result); - --__last1; - } - else { - *--__result = *__last2; - if (__first2 == __last2) - return std::copy_backward(__first1, ++__last1, __result); - --__last2; + while (true) + { + if (__comp(*__last2, *__last1)) + { + *--__result = *__last1; + if (__first1 == __last1) + return std::copy_backward(__first2, ++__last2, __result); + --__last1; + } + else + { + *--__result = *__last2; + if (__first2 == __last2) + return std::copy_backward(__first1, ++__last1, __result); + --__last2; + } } - } } /** @@ -3054,21 +3281,24 @@ namespace std _Distance __buffer_size) { _BidirectionalIterator2 __buffer_end; - if (__len1 > __len2 && __len2 <= __buffer_size) { - __buffer_end = std::copy(__middle, __last, __buffer); - std::copy_backward(__first, __middle, __last); - return std::copy(__buffer, __buffer_end, __first); - } - else if (__len1 <= __buffer_size) { - __buffer_end = std::copy(__first, __middle, __buffer); - std::copy(__middle, __last, __first); - return std::copy_backward(__buffer, __buffer_end, __last); - } - else { - std::rotate(__first, __middle, __last); - std::advance(__first, std::distance(__middle, __last)); - return __first; - } + if (__len1 > __len2 && __len2 <= __buffer_size) + { + __buffer_end = std::copy(__middle, __last, __buffer); + std::copy_backward(__first, __middle, __last); + return std::copy(__buffer, __buffer_end, __first); + } + else if (__len1 <= __buffer_size) + { + __buffer_end = std::copy(__first, __middle, __buffer); + std::copy(__middle, __last, __first); + return std::copy_backward(__buffer, __buffer_end, __last); + } + else + { + std::rotate(__first, __middle, __last); + std::advance(__first, std::distance(__middle, __last)); + return __first; + } } /** @@ -3076,7 +3306,8 @@ namespace std * This is a helper function for the merge routines. * @endif */ - template + template void __merge_adaptive(_BidirectionalIterator __first, _BidirectionalIterator __middle, @@ -3084,40 +3315,49 @@ namespace std _Distance __len1, _Distance __len2, _Pointer __buffer, _Distance __buffer_size) { - if (__len1 <= __len2 && __len1 <= __buffer_size) { - _Pointer __buffer_end = std::copy(__first, __middle, __buffer); - std::merge(__buffer, __buffer_end, __middle, __last, __first); - } - else if (__len2 <= __buffer_size) { - _Pointer __buffer_end = std::copy(__middle, __last, __buffer); - std::__merge_backward(__first, __middle, __buffer, __buffer_end, __last); - } - else { - _BidirectionalIterator __first_cut = __first; - _BidirectionalIterator __second_cut = __middle; - _Distance __len11 = 0; - _Distance __len22 = 0; - if (__len1 > __len2) { - __len11 = __len1 / 2; - std::advance(__first_cut, __len11); - __second_cut = std::lower_bound(__middle, __last, *__first_cut); - __len22 = std::distance(__middle, __second_cut); + if (__len1 <= __len2 && __len1 <= __buffer_size) + { + _Pointer __buffer_end = std::copy(__first, __middle, __buffer); + std::merge(__buffer, __buffer_end, __middle, __last, __first); + } + else if (__len2 <= __buffer_size) + { + _Pointer __buffer_end = std::copy(__middle, __last, __buffer); + std::__merge_backward(__first, __middle, __buffer, + __buffer_end, __last); + } + else + { + _BidirectionalIterator __first_cut = __first; + _BidirectionalIterator __second_cut = __middle; + _Distance __len11 = 0; + _Distance __len22 = 0; + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut = std::lower_bound(__middle, __last, + *__first_cut); + __len22 = std::distance(__middle, __second_cut); } - else { - __len22 = __len2 / 2; - std::advance(__second_cut, __len22); - __first_cut = std::upper_bound(__first, __middle, *__second_cut); - __len11 = std::distance(__first, __first_cut); + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut = std::upper_bound(__first, __middle, + *__second_cut); + __len11 = std::distance(__first, __first_cut); } - _BidirectionalIterator __new_middle = - std::__rotate_adaptive(__first_cut, __middle, __second_cut, - __len1 - __len11, __len22, __buffer, - __buffer_size); - std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, - __len22, __buffer, __buffer_size); - std::__merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11, - __len2 - __len22, __buffer, __buffer_size); - } + _BidirectionalIterator __new_middle = + std::__rotate_adaptive(__first_cut, __middle, __second_cut, + __len1 - __len11, __len22, __buffer, + __buffer_size); + std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, + __len22, __buffer, __buffer_size); + std::__merge_adaptive(__new_middle, __second_cut, __last, + __len1 - __len11, + __len2 - __len22, __buffer, __buffer_size); + } } /** @@ -3135,41 +3375,50 @@ namespace std _Pointer __buffer, _Distance __buffer_size, _Compare __comp) { - if (__len1 <= __len2 && __len1 <= __buffer_size) { - _Pointer __buffer_end = std::copy(__first, __middle, __buffer); - std::merge(__buffer, __buffer_end, __middle, __last, __first, __comp); - } - else if (__len2 <= __buffer_size) { - _Pointer __buffer_end = std::copy(__middle, __last, __buffer); - std::__merge_backward(__first, __middle, __buffer, __buffer_end, __last, - __comp); - } - else { - _BidirectionalIterator __first_cut = __first; - _BidirectionalIterator __second_cut = __middle; - _Distance __len11 = 0; - _Distance __len22 = 0; - if (__len1 > __len2) { - __len11 = __len1 / 2; - std::advance(__first_cut, __len11); - __second_cut = std::lower_bound(__middle, __last, *__first_cut, __comp); - __len22 = std::distance(__middle, __second_cut); + if (__len1 <= __len2 && __len1 <= __buffer_size) + { + _Pointer __buffer_end = std::copy(__first, __middle, __buffer); + std::merge(__buffer, __buffer_end, __middle, __last, __first, __comp); + } + else if (__len2 <= __buffer_size) + { + _Pointer __buffer_end = std::copy(__middle, __last, __buffer); + std::__merge_backward(__first, __middle, __buffer, __buffer_end, + __last, __comp); + } + else + { + _BidirectionalIterator __first_cut = __first; + _BidirectionalIterator __second_cut = __middle; + _Distance __len11 = 0; + _Distance __len22 = 0; + if (__len1 > __len2) + { + __len11 = __len1 / 2; + std::advance(__first_cut, __len11); + __second_cut = std::lower_bound(__middle, __last, *__first_cut, + __comp); + __len22 = std::distance(__middle, __second_cut); } - else { - __len22 = __len2 / 2; - std::advance(__second_cut, __len22); - __first_cut = std::upper_bound(__first, __middle, *__second_cut, __comp); - __len11 = std::distance(__first, __first_cut); + else + { + __len22 = __len2 / 2; + std::advance(__second_cut, __len22); + __first_cut = std::upper_bound(__first, __middle, *__second_cut, + __comp); + __len11 = std::distance(__first, __first_cut); } - _BidirectionalIterator __new_middle = - std::__rotate_adaptive(__first_cut, __middle, __second_cut, - __len1 - __len11, __len22, __buffer, - __buffer_size); - std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, - __len22, __buffer, __buffer_size, __comp); - std::__merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11, - __len2 - __len22, __buffer, __buffer_size, __comp); - } + _BidirectionalIterator __new_middle = + std::__rotate_adaptive(__first_cut, __middle, __second_cut, + __len1 - __len11, __len22, __buffer, + __buffer_size); + std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, + __len22, __buffer, __buffer_size, __comp); + std::__merge_adaptive(__new_middle, __second_cut, __last, + __len1 - __len11, + __len2 - __len22, __buffer, + __buffer_size, __comp); + } } /** @@ -3213,7 +3462,8 @@ namespace std _DistanceType __len1 = std::distance(__first, __middle); _DistanceType __len2 = std::distance(__middle, __last); - _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first, __last); + _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first, + __last); if (__buf.begin() == 0) std::__merge_without_buffer(__first, __middle, __last, __len1, __len2); else @@ -3265,58 +3515,73 @@ namespace std if (__first == __middle || __middle == __last) return; - _DistanceType __len1 = std::distance(__first, __middle); - _DistanceType __len2 = std::distance(__middle, __last); + const _DistanceType __len1 = std::distance(__first, __middle); + const _DistanceType __len2 = std::distance(__middle, __last); - _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first, __last); + _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first, + __last); if (__buf.begin() == 0) - std::__merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp); + std::__merge_without_buffer(__first, __middle, __last, __len1, + __len2, __comp); else std::__merge_adaptive(__first, __middle, __last, __len1, __len2, __buf.begin(), _DistanceType(__buf.size()), __comp); } - template + template void - __stable_sort_adaptive(_RandomAccessIterator __first, _RandomAccessIterator __last, + __stable_sort_adaptive(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Pointer __buffer, _Distance __buffer_size) { - _Distance __len = (__last - __first + 1) / 2; - _RandomAccessIterator __middle = __first + __len; - if (__len > __buffer_size) { - std::__stable_sort_adaptive(__first, __middle, __buffer, __buffer_size); - std::__stable_sort_adaptive(__middle, __last, __buffer, __buffer_size); - } - else { - std::__merge_sort_with_buffer(__first, __middle, __buffer); - std::__merge_sort_with_buffer(__middle, __last, __buffer); - } - std::__merge_adaptive(__first, __middle, __last, _Distance(__middle - __first), - _Distance(__last - __middle), __buffer, __buffer_size); + const _Distance __len = (__last - __first + 1) / 2; + const _RandomAccessIterator __middle = __first + __len; + if (__len > __buffer_size) + { + std::__stable_sort_adaptive(__first, __middle, + __buffer, __buffer_size); + std::__stable_sort_adaptive(__middle, __last, + __buffer, __buffer_size); + } + else + { + std::__merge_sort_with_buffer(__first, __middle, __buffer); + std::__merge_sort_with_buffer(__middle, __last, __buffer); + } + std::__merge_adaptive(__first, __middle, __last, + _Distance(__middle - __first), + _Distance(__last - __middle), + __buffer, __buffer_size); } - template + template void - __stable_sort_adaptive(_RandomAccessIterator __first, _RandomAccessIterator __last, + __stable_sort_adaptive(_RandomAccessIterator __first, + _RandomAccessIterator __last, _Pointer __buffer, _Distance __buffer_size, _Compare __comp) { - _Distance __len = (__last - __first + 1) / 2; - _RandomAccessIterator __middle = __first + __len; - if (__len > __buffer_size) { - std::__stable_sort_adaptive(__first, __middle, __buffer, __buffer_size, - __comp); - std::__stable_sort_adaptive(__middle, __last, __buffer, __buffer_size, - __comp); - } - else { - std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); - std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); - } - std::__merge_adaptive(__first, __middle, __last, _Distance(__middle - __first), - _Distance(__last - __middle), __buffer, __buffer_size, + const _Distance __len = (__last - __first + 1) / 2; + const _RandomAccessIterator __middle = __first + __len; + if (__len > __buffer_size) + { + std::__stable_sort_adaptive(__first, __middle, __buffer, + __buffer_size, __comp); + std::__stable_sort_adaptive(__middle, __last, __buffer, + __buffer_size, __comp); + } + else + { + std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); + std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); + } + std::__merge_adaptive(__first, __middle, __last, + _Distance(__middle - __first), + _Distance(__last - __middle), + __buffer, __buffer_size, __comp); } @@ -3340,8 +3605,10 @@ namespace std inline void stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< @@ -3349,11 +3616,13 @@ namespace std __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __last); - _Temporary_buffer<_RandomAccessIterator, _ValueType> buf(__first, __last); + _Temporary_buffer<_RandomAccessIterator, _ValueType> + buf(__first, __last); if (buf.begin() == 0) std::__inplace_stable_sort(__first, __last); else - std::__stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size())); + std::__stable_sort_adaptive(__first, __last, buf.begin(), + _DistanceType(buf.size())); } /** @@ -3375,24 +3644,28 @@ namespace std */ template inline void - stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) + stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, + _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, - _ValueType, _ValueType>) + _ValueType, + _ValueType>) __glibcxx_requires_valid_range(__first, __last); _Temporary_buffer<_RandomAccessIterator, _ValueType> buf(__first, __last); if (buf.begin() == 0) std::__inplace_stable_sort(__first, __last, __comp); else - std::__stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size()), - __comp); + std::__stable_sort_adaptive(__first, __last, buf.begin(), + _DistanceType(buf.size()), __comp); } /** @@ -3416,25 +3689,32 @@ namespace std _RandomAccessIterator __nth, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements - __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<_RandomAccessIterator>) + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __nth); __glibcxx_requires_valid_range(__nth, __last); - while (__last - __first > 3) { - _RandomAccessIterator __cut = - std::__unguarded_partition(__first, __last, - _ValueType(std::__median(*__first, - *(__first + (__last - __first)/2), - *(__last - 1)))); - if (__cut <= __nth) - __first = __cut; - else - __last = __cut; - } + while (__last - __first > 3) + { + _RandomAccessIterator __cut = + std::__unguarded_partition(__first, __last, + _ValueType(std::__median(*__first, + *(__first + + (__last + - __first) + / 2), + *(__last + - 1)))); + if (__cut <= __nth) + __first = __cut; + else + __last = __cut; + } std::__insertion_sort(__first, __last); } @@ -3461,27 +3741,33 @@ namespace std _RandomAccessIterator __last, _Compare __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements - __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<_RandomAccessIterator>) + __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< + _RandomAccessIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType, _ValueType>) __glibcxx_requires_valid_range(__first, __nth); __glibcxx_requires_valid_range(__nth, __last); - while (__last - __first > 3) { - _RandomAccessIterator __cut = - std::__unguarded_partition(__first, __last, - _ValueType(std::__median(*__first, - *(__first + (__last - __first)/2), - *(__last - 1), + while (__last - __first > 3) + { + _RandomAccessIterator __cut = + std::__unguarded_partition(__first, __last, + _ValueType(std::__median(*__first, + *(__first + + (__last + - __first) + / 2), + *(__last - 1), __comp)), __comp); - if (__cut <= __nth) - __first = __cut; - else - __last = __cut; - } + if (__cut <= __nth) + __first = __cut; + else + __last = __cut; + } std::__insertion_sort(__first, __last, __comp); } @@ -3503,10 +3789,13 @@ namespace std */ template pair<_ForwardIterator, _ForwardIterator> - equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) + equal_range(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements // See comments on lower_bound. @@ -3519,24 +3808,27 @@ namespace std _DistanceType __half; _ForwardIterator __middle, __left, __right; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (*__middle < __val) { - __first = __middle; - ++__first; - __len = __len - __half - 1; - } - else if (__val < *__middle) - __len = __half; - else { - __left = std::lower_bound(__first, __middle, __val); - std::advance(__first, __len); - __right = std::upper_bound(++__middle, __first, __val); - return pair<_ForwardIterator, _ForwardIterator>(__left, __right); + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (*__middle < __val) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else if (__val < *__middle) + __len = __half; + else + { + __left = std::lower_bound(__first, __middle, __val); + std::advance(__first, __len); + __right = std::upper_bound(++__middle, __first, __val); + return pair<_ForwardIterator, _ForwardIterator>(__left, __right); + } } - } return pair<_ForwardIterator, _ForwardIterator>(__first, __first); } @@ -3559,40 +3851,48 @@ namespace std */ template pair<_ForwardIterator, _ForwardIterator> - equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, + equal_range(_ForwardIterator __first, _ForwardIterator __last, + const _Tp& __val, _Compare __comp) { - typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + typedef typename iterator_traits<_ForwardIterator>::difference_type + _DistanceType; // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) - __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType, _Tp>) - __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _Tp, _ValueType>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _ValueType, _Tp>) + __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, + _Tp, _ValueType>) __glibcxx_requires_partitioned_pred(__first, __last, __val, __comp); _DistanceType __len = std::distance(__first, __last); _DistanceType __half; _ForwardIterator __middle, __left, __right; - while (__len > 0) { - __half = __len >> 1; - __middle = __first; - std::advance(__middle, __half); - if (__comp(*__middle, __val)) { - __first = __middle; - ++__first; - __len = __len - __half - 1; - } - else if (__comp(__val, *__middle)) - __len = __half; - else { - __left = std::lower_bound(__first, __middle, __val, __comp); - std::advance(__first, __len); - __right = std::upper_bound(++__middle, __first, __val, __comp); - return pair<_ForwardIterator, _ForwardIterator>(__left, __right); + while (__len > 0) + { + __half = __len >> 1; + __middle = __first; + std::advance(__middle, __half); + if (__comp(*__middle, __val)) + { + __first = __middle; + ++__first; + __len = __len - __half - 1; + } + else if (__comp(__val, *__middle)) + __len = __half; + else + { + __left = std::lower_bound(__first, __middle, __val, __comp); + std::advance(__first, __len); + __right = std::upper_bound(++__middle, __first, __val, __comp); + return pair<_ForwardIterator, _ForwardIterator>(__left, __right); + } } - } return pair<_ForwardIterator, _ForwardIterator>(__first, __first); } @@ -3723,7 +4023,8 @@ namespace std * in [first2,last2) is not found before the search iterator reaches @a * last2, false is returned. */ - template + template bool includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _Compare __comp) @@ -3768,7 +4069,8 @@ namespace std * both ranges advance. The output range may not overlap either input * range. */ - template + template _OutputIterator set_union(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -3787,23 +4089,28 @@ namespace std __glibcxx_requires_sorted(__first1, __last1); __glibcxx_requires_sorted(__first2, __last2); - while (__first1 != __last1 && __first2 != __last2) { - if (*__first1 < *__first2) { - *__result = *__first1; - ++__first1; - } - else if (*__first2 < *__first1) { - *__result = *__first2; - ++__first2; - } - else { - *__result = *__first1; - ++__first1; - ++__first2; + while (__first1 != __last1 && __first2 != __last2) + { + if (*__first1 < *__first2) + { + *__result = *__first1; + ++__first1; + } + else if (*__first2 < *__first1) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + ++__first2; + } + ++__result; } - ++__result; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + return std::copy(__first2, __last2, std::copy(__first1, __last1, + __result)); } /** @@ -3824,8 +4131,8 @@ namespace std * ranges, the element from the first range is copied and both ranges * advance. The output range may not overlap either input range. */ - template + template _OutputIterator set_union(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -3845,23 +4152,28 @@ namespace std __glibcxx_requires_sorted_pred(__first1, __last1, __comp); __glibcxx_requires_sorted_pred(__first2, __last2, __comp); - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__first1; - } - else if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } - else { - *__result = *__first1; - ++__first1; - ++__first2; + while (__first1 != __last1 && __first2 != __last2) + { + if (__comp(*__first1, *__first2)) + { + *__result = *__first1; + ++__first1; + } + else if (__comp(*__first2, *__first1)) + { + *__result = *__first2; + ++__first2; + } + else + { + *__result = *__first1; + ++__first1; + ++__first2; + } + ++__result; } - ++__result; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + return std::copy(__first2, __last2, std::copy(__first1, __last1, + __result)); } /** @@ -3880,7 +4192,8 @@ namespace std * element from the first range is copied and both ranges advance. The * output range may not overlap either input range. */ - template + template _OutputIterator set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -3904,12 +4217,13 @@ namespace std ++__first1; else if (*__first2 < *__first1) ++__first2; - else { - *__result = *__first1; - ++__first1; - ++__first2; - ++__result; - } + else + { + *__result = *__first1; + ++__first1; + ++__first2; + ++__result; + } return __result; } @@ -3932,8 +4246,8 @@ namespace std * first range is copied and both ranges advance. The output range may not * overlap either input range. */ - template + template _OutputIterator set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -3958,12 +4272,13 @@ namespace std ++__first1; else if (__comp(*__first2, *__first1)) ++__first2; - else { - *__result = *__first1; - ++__first1; - ++__first2; - ++__result; - } + else + { + *__result = *__first1; + ++__first1; + ++__first2; + ++__result; + } return __result; } @@ -3985,7 +4300,8 @@ namespace std * contained in both ranges, no elements are copied and both ranges * advance. The output range may not overlap either input range. */ - template + template _OutputIterator set_difference(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -4005,17 +4321,19 @@ namespace std __glibcxx_requires_sorted(__first2, __last2); while (__first1 != __last1 && __first2 != __last2) - if (*__first1 < *__first2) { - *__result = *__first1; - ++__first1; - ++__result; - } + if (*__first1 < *__first2) + { + *__result = *__first1; + ++__first1; + ++__result; + } else if (*__first2 < *__first1) ++__first2; - else { - ++__first1; - ++__first2; - } + else + { + ++__first1; + ++__first2; + } return std::copy(__first1, __last1, __result); } @@ -4040,8 +4358,8 @@ namespace std * elements are copied and both ranges advance. The output range may not * overlap either input range. */ - template + template _OutputIterator set_difference(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -4062,17 +4380,19 @@ namespace std __glibcxx_requires_sorted_pred(__first2, __last2, __comp); while (__first1 != __last1 && __first2 != __last2) - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__first1; - ++__result; - } + if (__comp(*__first1, *__first2)) + { + *__result = *__first1; + ++__first1; + ++__result; + } else if (__comp(*__first2, *__first1)) ++__first2; - else { - ++__first1; - ++__first2; - } + else + { + ++__first1; + ++__first2; + } return std::copy(__first1, __last1, __result); } @@ -4092,7 +4412,8 @@ namespace std * element is contained in both ranges, no elements are copied and both * ranges advance. The output range may not overlap either input range. */ - template + template _OutputIterator set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -4112,21 +4433,25 @@ namespace std __glibcxx_requires_sorted(__first2, __last2); while (__first1 != __last1 && __first2 != __last2) - if (*__first1 < *__first2) { - *__result = *__first1; - ++__first1; - ++__result; - } - else if (*__first2 < *__first1) { - *__result = *__first2; - ++__first2; - ++__result; - } - else { - ++__first1; - ++__first2; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + if (*__first1 < *__first2) + { + *__result = *__first1; + ++__first1; + ++__result; + } + else if (*__first2 < *__first1) + { + *__result = *__first2; + ++__first2; + ++__result; + } + else + { + ++__first1; + ++__first2; + } + return std::copy(__first2, __last2, std::copy(__first1, + __last1, __result)); } /** @@ -4148,8 +4473,8 @@ namespace std * to @a comp, no elements are copied and both ranges advance. The output * range may not overlap either input range. */ - template + template _OutputIterator set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -4171,21 +4496,25 @@ namespace std __glibcxx_requires_sorted_pred(__first2, __last2, __comp); while (__first1 != __last1 && __first2 != __last2) - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__first1; - ++__result; - } - else if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - ++__result; - } - else { - ++__first1; - ++__first2; - } - return std::copy(__first2, __last2, std::copy(__first1, __last1, __result)); + if (__comp(*__first1, *__first2)) + { + *__result = *__first1; + ++__first1; + ++__result; + } + else if (__comp(*__first2, *__first1)) + { + *__result = *__first2; + ++__first2; + ++__result; + } + else + { + ++__first1; + ++__first2; + } + return std::copy(__first2, __last2, std::copy(__first1, + __last1, __result)); } // min_element and max_element, with and without an explicitly supplied @@ -4207,7 +4536,8 @@ namespace std typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - if (__first == __last) return __first; + if (__first == __last) + return __first; _ForwardIterator __result = __first; while (++__first != __last) if (*__result < *__first) @@ -4258,7 +4588,8 @@ namespace std typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - if (__first == __last) return __first; + if (__first == __last) + return __first; _ForwardIterator __result = __first; while (++__first != __last) if (*__first < *__result) @@ -4286,7 +4617,8 @@ namespace std typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - if (__first == __last) return __first; + if (__first == __last) + return __first; _ForwardIterator __result = __first; while (++__first != __last) if (__comp(*__first, *__result)) @@ -4310,10 +4642,12 @@ namespace std */ template bool - next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) + next_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) __glibcxx_function_requires(_LessThanComparableConcept< typename iterator_traits<_BidirectionalIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); @@ -4327,22 +4661,25 @@ namespace std __i = __last; --__i; - for(;;) { - _BidirectionalIterator __ii = __i; - --__i; - if (*__i < *__ii) { - _BidirectionalIterator __j = __last; - while (!(*__i < *--__j)) - {} - std::iter_swap(__i, __j); - std::reverse(__ii, __last); - return true; - } - if (__i == __first) { - std::reverse(__first, __last); - return false; + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (*__i < *__ii) + { + _BidirectionalIterator __j = __last; + while (!(*__i < *--__j)) + {} + std::iter_swap(__i, __j); + std::reverse(__ii, __last); + return true; + } + if (__i == __first) + { + std::reverse(__first, __last); + return false; + } } - } } /** @@ -4361,11 +4698,12 @@ namespace std */ template bool - next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, - _Compare __comp) + next_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, typename iterator_traits<_BidirectionalIterator>::value_type, typename iterator_traits<_BidirectionalIterator>::value_type>) @@ -4380,22 +4718,25 @@ namespace std __i = __last; --__i; - for(;;) { - _BidirectionalIterator __ii = __i; - --__i; - if (__comp(*__i, *__ii)) { - _BidirectionalIterator __j = __last; - while (!__comp(*__i, *--__j)) - {} - std::iter_swap(__i, __j); - std::reverse(__ii, __last); - return true; - } - if (__i == __first) { - std::reverse(__first, __last); - return false; + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (__comp(*__i, *__ii)) + { + _BidirectionalIterator __j = __last; + while (!__comp(*__i, *--__j)) + {} + std::iter_swap(__i, __j); + std::reverse(__ii, __last); + return true; + } + if (__i == __first) + { + std::reverse(__first, __last); + return false; + } } - } } /** @@ -4412,10 +4753,12 @@ namespace std */ template bool - prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) + prev_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) __glibcxx_function_requires(_LessThanComparableConcept< typename iterator_traits<_BidirectionalIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); @@ -4429,22 +4772,25 @@ namespace std __i = __last; --__i; - for(;;) { - _BidirectionalIterator __ii = __i; - --__i; - if (*__ii < *__i) { - _BidirectionalIterator __j = __last; - while (!(*--__j < *__i)) - {} - std::iter_swap(__i, __j); - std::reverse(__ii, __last); - return true; - } - if (__i == __first) { - std::reverse(__first, __last); - return false; + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (*__ii < *__i) + { + _BidirectionalIterator __j = __last; + while (!(*--__j < *__i)) + {} + std::iter_swap(__i, __j); + std::reverse(__ii, __last); + return true; + } + if (__i == __first) + { + std::reverse(__first, __last); + return false; + } } - } } /** @@ -4463,11 +4809,12 @@ namespace std */ template bool - prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, - _Compare __comp) + prev_permutation(_BidirectionalIterator __first, + _BidirectionalIterator __last, _Compare __comp) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator>) __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, typename iterator_traits<_BidirectionalIterator>::value_type, typename iterator_traits<_BidirectionalIterator>::value_type>) @@ -4482,22 +4829,25 @@ namespace std __i = __last; --__i; - for(;;) { - _BidirectionalIterator __ii = __i; - --__i; - if (__comp(*__ii, *__i)) { - _BidirectionalIterator __j = __last; - while (!__comp(*--__j, *__i)) - {} - std::iter_swap(__i, __j); - std::reverse(__ii, __last); - return true; - } - if (__i == __first) { - std::reverse(__first, __last); - return false; + for(;;) + { + _BidirectionalIterator __ii = __i; + --__i; + if (__comp(*__ii, *__i)) + { + _BidirectionalIterator __j = __last; + while (!__comp(*--__j, *__i)) + {} + std::iter_swap(__i, __j); + std::reverse(__ii, __last); + return true; + } + if (__i == __first) + { + std::reverse(__first, __last); + return false; + } } - } } // find_first_of, with and without an explicitly supplied comparison function. @@ -4552,7 +4902,8 @@ namespace std * some element in the range [first2,last2). If found, returns an iterator in * the range [first1,last1), otherwise returns @p last1. */ - template + template _InputIterator find_first_of(_InputIterator __first1, _InputIterator __last1, _ForwardIterator __first2, _ForwardIterator __last2, @@ -4592,20 +4943,23 @@ namespace std { if (__first2 == __last2) return __last1; - else { - _ForwardIterator1 __result = __last1; - while (1) { - _ForwardIterator1 __new_result - = std::search(__first1, __last1, __first2, __last2); - if (__new_result == __last1) - return __result; - else { - __result = __new_result; - __first1 = __new_result; - ++__first1; - } + else + { + _ForwardIterator1 __result = __last1; + while (1) + { + _ForwardIterator1 __new_result + = std::search(__first1, __last1, __first2, __last2); + if (__new_result == __last1) + return __result; + else + { + __result = __new_result; + __first1 = __new_result; + ++__first1; + } + } } - } } template _BidirectionalIterator1 - __find_end(_BidirectionalIterator1 __first1, _BidirectionalIterator1 __last1, - _BidirectionalIterator2 __first2, _BidirectionalIterator2 __last2, + __find_end(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, bidirectional_iterator_tag, bidirectional_iterator_tag) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator1>) - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator2>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator1>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator2>) typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; @@ -4655,24 +5016,29 @@ namespace std if (__rresult == __rlast1) return __last1; - else { - _BidirectionalIterator1 __result = __rresult.base(); - std::advance(__result, -std::distance(__first2, __last2)); - return __result; - } + else + { + _BidirectionalIterator1 __result = __rresult.base(); + std::advance(__result, -std::distance(__first2, __last2)); + return __result; + } } template _BidirectionalIterator1 - __find_end(_BidirectionalIterator1 __first1, _BidirectionalIterator1 __last1, - _BidirectionalIterator2 __first2, _BidirectionalIterator2 __last2, + __find_end(_BidirectionalIterator1 __first1, + _BidirectionalIterator1 __last1, + _BidirectionalIterator2 __first2, + _BidirectionalIterator2 __last2, bidirectional_iterator_tag, bidirectional_iterator_tag, _BinaryPredicate __comp) { // concept requirements - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator1>) - __glibcxx_function_requires(_BidirectionalIteratorConcept<_BidirectionalIterator2>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator1>) + __glibcxx_function_requires(_BidirectionalIteratorConcept< + _BidirectionalIterator2>) typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; @@ -4685,11 +5051,12 @@ namespace std if (__rresult == __rlast1) return __last1; - else { - _BidirectionalIterator1 __result = __rresult.base(); - std::advance(__result, -std::distance(__first2, __last2)); - return __result; - } + else + { + _BidirectionalIterator1 __result = __rresult.base(); + std::advance(__result, -std::distance(__first2, __last2)); + return __result; + } } // Dispatching functions for find_end. @@ -4788,4 +5155,3 @@ namespace std } // namespace std #endif /* _ALGO_H */ - diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 3e1a7c6..3a1441f 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -91,16 +91,22 @@ namespace std inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { - typedef typename iterator_traits<_ForwardIterator1>::value_type _ValueType1; - typedef typename iterator_traits<_ForwardIterator2>::value_type _ValueType2; + typedef typename iterator_traits<_ForwardIterator1>::value_type + _ValueType1; + typedef typename iterator_traits<_ForwardIterator2>::value_type + _ValueType2; // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator1>) - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator2>) - __glibcxx_function_requires(_ConvertibleConcept<_ValueType1, _ValueType2>) - __glibcxx_function_requires(_ConvertibleConcept<_ValueType2, _ValueType1>) - - _ValueType1 __tmp = *__a; + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator1>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator2>) + __glibcxx_function_requires(_ConvertibleConcept<_ValueType1, + _ValueType2>) + __glibcxx_function_requires(_ConvertibleConcept<_ValueType2, + _ValueType1>) + + const _ValueType1 __tmp = *__a; *__a = *__b; *__b = __tmp; } @@ -121,7 +127,7 @@ namespace std // concept requirements __glibcxx_function_requires(_SGIAssignableConcept<_Tp>) - _Tp __tmp = __a; + const _Tp __tmp = __a; __a = __b; __b = __tmp; } @@ -146,7 +152,9 @@ namespace std // concept requirements __glibcxx_function_requires(_LessThanComparableConcept<_Tp>) //return __b < __a ? __b : __a; - if (__b < __a) return __b; return __a; + if (__b < __a) + return __b; + return __a; } /** @@ -166,7 +174,9 @@ namespace std // concept requirements __glibcxx_function_requires(_LessThanComparableConcept<_Tp>) //return __a < __b ? __b : __a; - if (__a < __b) return __b; return __a; + if (__a < __b) + return __b; + return __a; } /** @@ -184,7 +194,9 @@ namespace std min(const _Tp& __a, const _Tp& __b, _Compare __comp) { //return __comp(__b, __a) ? __b : __a; - if (__comp(__b, __a)) return __b; return __a; + if (__comp(__b, __a)) + return __b; + return __a; } /** @@ -202,7 +214,9 @@ namespace std max(const _Tp& __a, const _Tp& __b, _Compare __comp) { //return __comp(__a, __b) ? __b : __a; - if (__comp(__a, __b)) return __b; return __a; + if (__comp(__a, __b)) + return __b; + return __a; } // All of these auxiliary functions serve two purposes. (1) Replace @@ -249,13 +263,15 @@ namespace std inline _OutputIterator __copy_aux2(_InputIterator __first, _InputIterator __last, _OutputIterator __result, __false_type) - { return std::__copy(__first, __last, __result, std::__iterator_category(__first)); } + { return std::__copy(__first, __last, __result, + std::__iterator_category(__first)); } template inline _OutputIterator __copy_aux2(_InputIterator __first, _InputIterator __last, _OutputIterator __result, __true_type) - { return std::__copy(__first, __last, __result, std::__iterator_category(__first)); } + { return std::__copy(__first, __last, __result, + std::__iterator_category(__first)); } template inline _Tp* @@ -274,9 +290,9 @@ namespace std _OutputIterator __result, __true_type) { typedef typename iterator_traits<_InputIterator>::value_type - _ValueType; - typedef typename __type_traits<_ValueType>::has_trivial_assignment_operator - _Trivial; + _ValueType; + typedef typename __type_traits< + _ValueType>::has_trivial_assignment_operator _Trivial; return _OutputIterator(std::__copy_aux2(__first, __last, __result.base(), _Trivial())); } @@ -287,8 +303,8 @@ namespace std _OutputIterator __result, __false_type) { typedef typename iterator_traits<_InputIterator>::value_type _ValueType; - typedef typename __type_traits<_ValueType>::has_trivial_assignment_operator - _Trivial; + typedef typename __type_traits< + _ValueType>::has_trivial_assignment_operator _Trivial; return std::__copy_aux2(__first, __last, __result, _Trivial()); } @@ -298,7 +314,8 @@ namespace std _OutputIterator __result, __true_type) { typedef typename _Is_normal_iterator<_OutputIterator>::_Normal __Normal; - return std::__copy_ni2(__first.base(), __last.base(), __result, __Normal()); + return std::__copy_ni2(__first.base(), __last.base(), + __result, __Normal()); } template @@ -328,7 +345,8 @@ namespace std */ template inline _OutputIterator - copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result) + copy(_InputIterator __first, _InputIterator __last, + _OutputIterator __result) { // concept requirements __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) @@ -342,8 +360,10 @@ namespace std template inline _BidirectionalIterator2 - __copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, - _BidirectionalIterator2 __result, bidirectional_iterator_tag) + __copy_backward(_BidirectionalIterator1 __first, + _BidirectionalIterator1 __last, + _BidirectionalIterator2 __result, + bidirectional_iterator_tag) { while (__first != __last) *--__result = *--__last; @@ -373,10 +393,8 @@ namespace std static _BidirectionalIterator2 copy(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) - { - return std::__copy_backward(__first, __last, __result, - std::__iterator_category(__first)); - } + { return std::__copy_backward(__first, __last, __result, + std::__iterator_category(__first)); } }; template @@ -408,9 +426,10 @@ namespace std { typedef typename __type_traits::value_type> ::has_trivial_assignment_operator _Trivial; - return std::__copy_backward_dispatch<_BI1, _BI2, _Trivial>::copy(__first, - __last, - __result); + return + std::__copy_backward_dispatch<_BI1, _BI2, _Trivial>::copy(__first, + __last, + __result); } template @@ -432,8 +451,8 @@ namespace std { typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal; return std::__copy_backward_output_normal_iterator(__first.base(), - __last.base(), __result, - __Normal()); + __last.base(), + __result, __Normal()); } template @@ -442,8 +461,8 @@ namespace std _BI2 __result, __false_type) { typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal; - return std::__copy_backward_output_normal_iterator(__first, __last, __result, - __Normal()); + return std::__copy_backward_output_normal_iterator(__first, __last, + __result, __Normal()); } /** @@ -476,8 +495,8 @@ namespace std __glibcxx_requires_valid_range(__first, __last); typedef typename _Is_normal_iterator<_BI1>::_Normal __Normal; - return std::__copy_backward_input_normal_iterator(__first, __last, __result, - __Normal()); + return std::__copy_backward_input_normal_iterator(__first, __last, + __result, __Normal()); } @@ -497,7 +516,8 @@ namespace std fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { // concept requirements - __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<_ForwardIterator>) + __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< + _ForwardIterator>) __glibcxx_requires_valid_range(__first, __last); for ( ; __first != __last; ++__first) @@ -532,7 +552,7 @@ namespace std fill(unsigned char* __first, unsigned char* __last, const unsigned char& __c) { __glibcxx_requires_valid_range(__first, __last); - unsigned char __tmp = __c; + const unsigned char __tmp = __c; std::memset(__first, __tmp, __last - __first); } @@ -540,7 +560,7 @@ namespace std fill(signed char* __first, signed char* __last, const signed char& __c) { __glibcxx_requires_valid_range(__first, __last); - signed char __tmp = __c; + const signed char __tmp = __c; std::memset(__first, static_cast(__tmp), __last - __first); } @@ -548,7 +568,7 @@ namespace std fill(char* __first, char* __last, const char& __c) { __glibcxx_requires_valid_range(__first, __last); - char __tmp = __c; + const char __tmp = __c; std::memset(__first, static_cast(__tmp), __last - __first); } @@ -625,7 +645,8 @@ namespace std * second iterator points into the second range, and the elements pointed * to by the iterators are not equal. */ - template + template pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __binary_pred) @@ -656,7 +677,8 @@ namespace std */ template inline bool - equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) + equal(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2) { // concept requirements __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>) @@ -685,7 +707,8 @@ namespace std * false depending on whether all of the corresponding elements of the * ranges are equal. */ - template + template inline bool equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, @@ -753,7 +776,8 @@ namespace std * The same as the four-parameter @c lexigraphical_compare, but uses the * comp parameter instead of @c <. */ - template + template bool lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -787,7 +811,8 @@ namespace std const size_t __len1 = __last1 - __first1; const size_t __len2 = __last2 - __first2; - const int __result = std::memcmp(__first1, __first2, std::min(__len1, __len2)); + const int __result = std::memcmp(__first1, __first2, + std::min(__len1, __len2)); return __result != 0 ? __result < 0 : __len1 < __len2; } diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index c16cbe0..97311ed 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -1,6 +1,6 @@ // Heap implementation -*- C++ -*- -// Copyright (C) 2001 Free Software Foundation, Inc. +// Copyright (C) 2001, 2004 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -72,12 +72,13 @@ namespace std __is_heap(_RandomAccessIterator __first, _Distance __n) { _Distance __parent = 0; - for (_Distance __child = 1; __child < __n; ++__child) { - if (__first[__parent] < __first[__child]) - return false; - if ((__child & 1) == 0) - ++__parent; - } + for (_Distance __child = 1; __child < __n; ++__child) + { + if (__first[__parent] < __first[__child]) + return false; + if ((__child & 1) == 0) + ++__parent; + } return true; } @@ -88,12 +89,13 @@ namespace std _Distance __n) { _Distance __parent = 0; - for (_Distance __child = 1; __child < __n; ++__child) { - if (__comp(__first[__parent], __first[__child])) - return false; - if ((__child & 1) == 0) - ++__parent; - } + for (_Distance __child = 1; __child < __n; ++__child) + { + if (__comp(__first[__parent], __first[__child])) + return false; + if ((__child & 1) == 0) + ++__parent; + } return true; } @@ -116,11 +118,12 @@ namespace std _Distance __holeIndex, _Distance __topIndex, _Tp __value) { _Distance __parent = (__holeIndex - 1) / 2; - while (__holeIndex > __topIndex && *(__first + __parent) < __value) { - *(__first + __holeIndex) = *(__first + __parent); - __holeIndex = __parent; - __parent = (__holeIndex - 1) / 2; - } + while (__holeIndex > __topIndex && *(__first + __parent) < __value) + { + *(__first + __holeIndex) = *(__first + __parent); + __holeIndex = __parent; + __parent = (__holeIndex - 1) / 2; + } *(__first + __holeIndex) = __value; } @@ -149,8 +152,8 @@ namespace std __glibcxx_requires_valid_range(__first, __last); // __glibcxx_requires_heap(__first, __last - 1); - std::__push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0), - _ValueType(*(__last - 1))); + std::__push_heap(__first, _DistanceType((__last - __first) - 1), + _DistanceType(0), _ValueType(*(__last - 1))); } template __topIndex && __comp(*(__first + __parent), __value)) { - *(__first + __holeIndex) = *(__first + __parent); - __holeIndex = __parent; - __parent = (__holeIndex - 1) / 2; - } + while (__holeIndex > __topIndex + && __comp(*(__first + __parent), __value)) + { + *(__first + __holeIndex) = *(__first + __parent); + __holeIndex = __parent; + __parent = (__holeIndex - 1) / 2; + } *(__first + __holeIndex) = __value; } @@ -195,8 +200,8 @@ namespace std __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap_pred(__first, __last - 1, __comp); - std::__push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0), - _ValueType(*(__last - 1)), __comp); + std::__push_heap(__first, _DistanceType((__last - __first) - 1), + _DistanceType(0), _ValueType(*(__last - 1)), __comp); } template @@ -204,19 +209,21 @@ namespace std __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, _Distance __len, _Tp __value) { - _Distance __topIndex = __holeIndex; + const _Distance __topIndex = __holeIndex; _Distance __secondChild = 2 * __holeIndex + 2; - while (__secondChild < __len) { - if (*(__first + __secondChild) < *(__first + (__secondChild - 1))) - __secondChild--; - *(__first + __holeIndex) = *(__first + __secondChild); - __holeIndex = __secondChild; - __secondChild = 2 * (__secondChild + 1); - } - if (__secondChild == __len) { - *(__first + __holeIndex) = *(__first + (__secondChild - 1)); - __holeIndex = __secondChild - 1; - } + while (__secondChild < __len) + { + if (*(__first + __secondChild) < *(__first + (__secondChild - 1))) + __secondChild--; + *(__first + __holeIndex) = *(__first + __secondChild); + __holeIndex = __secondChild; + __secondChild = 2 * (__secondChild + 1); + } + if (__secondChild == __len) + { + *(__first + __holeIndex) = *(__first + (__secondChild - 1)); + __holeIndex = __secondChild - 1; + } std::__push_heap(__first, __holeIndex, __topIndex, __value); } @@ -225,9 +232,11 @@ namespace std __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _RandomAccessIterator __result, _Tp __value) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; *__result = *__first; - std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value); + std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), + __value); } /** @@ -243,7 +252,8 @@ namespace std inline void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< @@ -252,7 +262,8 @@ 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, + _ValueType(*(__last - 1))); } template::difference_type _Distance; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Distance; *__result = *__first; - std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), + std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value, __comp); } @@ -310,8 +325,10 @@ namespace std __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap_pred(__first, __last, __comp); - typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; - std::__pop_heap(__first, __last - 1, __last - 1, _ValueType(*(__last - 1)), __comp); + typedef typename iterator_traits<_RandomAccessIterator>::value_type + _ValueType; + std::__pop_heap(__first, __last - 1, __last - 1, + _ValueType(*(__last - 1)), __comp); } /** @@ -337,15 +354,19 @@ namespace std __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __last); - if (__last - __first < 2) return; - _DistanceType __len = __last - __first; - _DistanceType __parent = (__len - 2)/2; - - while (true) { - std::__adjust_heap(__first, __parent, __len, _ValueType(*(__first + __parent))); - if (__parent == 0) return; - __parent--; - } + if (__last - __first < 2) + return; + + const _DistanceType __len = __last - __first; + _DistanceType __parent = (__len - 2) / 2; + while (true) + { + std::__adjust_heap(__first, __parent, __len, + _ValueType(*(__first + __parent))); + if (__parent == 0) + return; + __parent--; + } } /** @@ -373,16 +394,19 @@ namespace std _RandomAccessIterator>) __glibcxx_requires_valid_range(__first, __last); - if (__last - __first < 2) return; - _DistanceType __len = __last - __first; - _DistanceType __parent = (__len - 2)/2; - - while (true) { - std::__adjust_heap(__first, __parent, __len, - _ValueType(*(__first + __parent)), __comp); - if (__parent == 0) return; - __parent--; - } + if (__last - __first < 2) + return; + + const _DistanceType __len = __last - __first; + _DistanceType __parent = (__len - 2) / 2; + while (true) + { + std::__adjust_heap(__first, __parent, __len, + _ValueType(*(__first + __parent)), __comp); + if (__parent == 0) + return; + __parent--; + } } /**