annotate build-aux/stl_algo.h-fixed @ 31210:9ad55d2e1bbf stable

Make sure we don't pass short 8.3 path to latex on Windows (bug #62779). * latex-text-renderer.cc (latex_renderer::write_tex_file): On Windows, use canonicalized path of temporary directory.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sun, 28 Aug 2022 22:44:49 +0200
parents 2310164737b3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 // Algorithm implementation -*- C++ -*-
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 // Copyright (C) 2001-2013 Free Software Foundation, Inc.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4 //
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 // This file is part of the GNU ISO C++ Library. This library is free
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6 // software; you can redistribute it and/or modify it under the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 // terms of the GNU General Public License as published by the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 // Free Software Foundation; either version 3, or (at your option)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 // any later version.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11 // This library is distributed in the hope that it will be useful,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 // GNU General Public License for more details.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16 // Under Section 7 of GPL version 3, you are granted additional
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 // permissions described in the GCC Runtime Library Exception, version
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 // 3.1, as published by the Free Software Foundation.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20 // You should have received a copy of the GNU General Public License and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 // a copy of the GCC Runtime Library Exception along with this program;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 22771
diff changeset
23 // <https://www.gnu.org/licenses/>.
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 /*
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 * Copyright (c) 1994
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 * Hewlett-Packard Company
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 * Permission to use, copy, modify, distribute and sell this software
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 * and its documentation for any purpose is hereby granted without fee,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 * provided that the above copyright notice appear in all copies and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 * that both that copyright notice and this permission notice appear
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 * in supporting documentation. Hewlett-Packard Company makes no
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 * representations about the suitability of this software for any
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 * purpose. It is provided "as is" without express or implied warranty.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 * Copyright (c) 1996
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 * Silicon Graphics Computer Systems, Inc.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 * Permission to use, copy, modify, distribute and sell this software
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 * and its documentation for any purpose is hereby granted without fee,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 * provided that the above copyright notice appear in all copies and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 * that both that copyright notice and this permission notice appear
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 * in supporting documentation. Silicon Graphics makes no
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47 * representations about the suitability of this software for any
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48 * purpose. It is provided "as is" without express or implied warranty.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 /** @file bits/stl_algo.h
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 * This is an internal header file, included by other library headers.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 * Do not attempt to use it directly. @headername{algorithm}
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 #ifndef _STL_ALGO_H
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 #define _STL_ALGO_H 1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 #include <cstdlib> // for rand
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60 #include <bits/algorithmfwd.h>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61 #include <bits/stl_heap.h>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62 #include <bits/stl_tempbuf.h> // for _Temporary_buffer
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 #if __cplusplus >= 201103L
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
65 #include <random> // for std::uniform_int_distribution
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66 #include <functional> // for std::bind
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67 #endif
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69 // See concept_check.h for the __glibcxx_*_requires macros.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71 namespace std _GLIBCXX_VISIBILITY(default)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73 _GLIBCXX_BEGIN_NAMESPACE_VERSION
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75 /// Swaps the median value of *__a, *__b and *__c to *__result
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 template<typename _Iterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 __move_median_to_first(_Iterator __result, _Iterator __a,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79 _Iterator __b, _Iterator __c)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
80 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83 typename iterator_traits<_Iterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 if (*__a < *__b)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87 if (*__b < *__c)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
88 std::iter_swap(__result, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89 else if (*__a < *__c)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
90 std::iter_swap(__result, __c);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92 std::iter_swap(__result, __a);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
93 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
94 else if (*__a < *__c)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95 std::iter_swap(__result, __a);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
96 else if (*__b < *__c)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
97 std::iter_swap(__result, __c);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
99 std::iter_swap(__result, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 /// Swaps the median value of *__a, *__b and *__c under __comp to *__result
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103 template<typename _Iterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105 __move_median_to_first(_Iterator __result, _Iterator __a,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
106 _Iterator __b, _Iterator __c,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110 __glibcxx_function_requires(_BinaryFunctionConcept<_Compare, bool,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
111 typename iterator_traits<_Iterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112 typename iterator_traits<_Iterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114 if (__comp(*__a, *__b))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 if (__comp(*__b, *__c))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 std::iter_swap(__result, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 else if (__comp(*__a, *__c))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 std::iter_swap(__result, __c);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 std::iter_swap(__result, __a);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 else if (__comp(*__a, *__c))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 std::iter_swap(__result, __a);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 else if (__comp(*__b, *__c))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 std::iter_swap(__result, __c);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 std::iter_swap(__result, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 // for_each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 /// This is an overload used by find() for the Input Iterator case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134 template<typename _InputIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 __find(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137 const _Tp& __val, input_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139 while (__first != __last && !(*__first == __val))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144 /// This is an overload used by find_if() for the Input Iterator case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
145 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147 __find_if(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 _Predicate __pred, input_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150 while (__first != __last && !bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 /// This is an overload used by find() for the RAI case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
156 template<typename _RandomAccessIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
157 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 __find(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 const _Tp& __val, random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
160 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162 __trip_count = (__last - __first) >> 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
163
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164 for (; __trip_count > 0; --__trip_count)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
167 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
178 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183 switch (__last - __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185 case 3:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 case 2:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193 case 1:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194 if (*__first == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
196 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197 case 0:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 default:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
199 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203 /// This is an overload used by find_if() for the RAI case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
204 template<typename _RandomAccessIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
205 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
206 __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207 _Predicate __pred, random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209 typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
210 __trip_count = (__last - __first) >> 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
211
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212 for (; __trip_count > 0; --__trip_count)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
217
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
219 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
220 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
222 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
223 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
224 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
226 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
227 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
228 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
229 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 switch (__last - __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
232 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
233 case 3:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
235 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
236 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
237 case 2:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
238 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
239 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
240 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
241 case 1:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
242 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
245 case 0:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 default:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
250
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
251 /// This is an overload used by find_if_not() for the Input Iterator case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
252 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
253 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254 __find_if_not(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 _Predicate __pred, input_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 while (__first != __last && bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262 /// This is an overload used by find_if_not() for the RAI case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
263 template<typename _RandomAccessIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
264 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
265 __find_if_not(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
266 _Predicate __pred, random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
267 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269 __trip_count = (__last - __first) >> 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
270
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
271 for (; __trip_count > 0; --__trip_count)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
272 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
273 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
274 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
275 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
276
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
277 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
278 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
279 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
280
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
281 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
282 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
283 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
284
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
285 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
286 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
287 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
288 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
289
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
290 switch (__last - __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
291 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
292 case 3:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
293 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
294 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
295 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
296 case 2:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
298 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
299 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
300 case 1:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
301 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
302 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
303 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
304 case 0:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
305 default:
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
306 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
307 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
308 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
309
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
310 /// Provided for stable_partition to use.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
311 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
312 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
313 __find_if_not(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
314 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
315 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
316 return std::__find_if_not(__first, __last, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
317 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
318 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
319
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
320 /// Like find_if_not(), but uses and updates a count of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
321 /// remaining range length instead of comparing against an end
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322 /// iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
323 template<typename _InputIterator, typename _Predicate, typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
324 _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
325 __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
326 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
327 for (; __len; --__len, ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
329 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
330 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
332
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
333 // set_difference
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334 // set_intersection
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
335 // set_symmetric_difference
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
336 // set_union
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337 // for_each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
338 // find
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
339 // find_if
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340 // find_first_of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
341 // adjacent_find
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
342 // count
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343 // count_if
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
344 // search
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
345
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
347 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
348 * search_n(_ForwardIterator, _ForwardIterator, _Integer, const _Tp&)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349 * overloaded for forward iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
350 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
351 template<typename _ForwardIterator, typename _Integer, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
352 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
353 __search_n(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
354 _Integer __count, const _Tp& __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
355 std::forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
356 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
357 __first = _GLIBCXX_STD_A::find(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
358 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
359 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
360 typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
361 __n = __count;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
362 _ForwardIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
363 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364 while (__i != __last && __n != 1 && *__i == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367 --__n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
369 if (__n == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
370 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
371 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
372 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
373 __first = _GLIBCXX_STD_A::find(++__i, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
375 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
377
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
378 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
379 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
380 * search_n(_ForwardIterator, _ForwardIterator, _Integer, const _Tp&)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
381 * overloaded for random access iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
382 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
383 template<typename _RandomAccessIter, typename _Integer, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
384 _RandomAccessIter
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
385 __search_n(_RandomAccessIter __first, _RandomAccessIter __last,
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
386 _Integer __count, const _Tp& __val,
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
387 std::random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
388 {
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
389
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
390 typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
391 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
392
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
393 _DistanceType __tailSize = __last - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
394 _DistanceType __remainder = __count;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
395
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
396 while (__remainder <= __tailSize) // the main loop...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
397 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
398 __first += __remainder;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
399 __tailSize -= __remainder;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
400 // __first here is always pointing to one past the last element of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
401 // next possible match.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
402 _RandomAccessIter __backTrack = __first;
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
403 while (*--__backTrack == __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
404 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
405 if (--__remainder == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
406 return (__first - __count); // Success
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
407 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
408 __remainder = __count + 1 - (__first - __backTrack);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
409 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
410 return __last; // Failure
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
411 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
412
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
413 // search_n
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
414
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
415 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
416 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
417 * search_n(_ForwardIterator, _ForwardIterator, _Integer, const _Tp&,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
418 * _BinaryPredicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
419 * overloaded for forward iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
420 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
421 template<typename _ForwardIterator, typename _Integer, typename _Tp,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
422 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
423 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
424 __search_n(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
425 _Integer __count, const _Tp& __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
426 _BinaryPredicate __binary_pred, std::forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
427 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
428 while (__first != __last && !bool(__binary_pred(*__first, __val)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
429 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
430
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
431 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
432 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
433 typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
434 __n = __count;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
435 _ForwardIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
436 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
437 while (__i != __last && __n != 1 && bool(__binary_pred(*__i, __val)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
438 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
439 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
440 --__n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
441 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
442 if (__n == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
443 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
444 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
445 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
446 __first = ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
447 while (__first != __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
448 && !bool(__binary_pred(*__first, __val)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
449 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
450 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
451 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
452 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
453
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
454 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
455 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
456 * search_n(_ForwardIterator, _ForwardIterator, _Integer, const _Tp&,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
457 * _BinaryPredicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
458 * overloaded for random access iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
459 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
460 template<typename _RandomAccessIter, typename _Integer, typename _Tp,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
461 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
462 _RandomAccessIter
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
463 __search_n(_RandomAccessIter __first, _RandomAccessIter __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
464 _Integer __count, const _Tp& __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
465 _BinaryPredicate __binary_pred, std::random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
466 {
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
467
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
468 typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
469 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
470
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
471 _DistanceType __tailSize = __last - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
472 _DistanceType __remainder = __count;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
473
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
474 while (__remainder <= __tailSize) // the main loop...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
475 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
476 __first += __remainder;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
477 __tailSize -= __remainder;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
478 // __first here is always pointing to one past the last element of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
479 // next possible match.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
480 _RandomAccessIter __backTrack = __first;
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
481 while (__binary_pred(*--__backTrack, __val))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
482 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
483 if (--__remainder == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
484 return (__first - __count); // Success
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
485 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
486 __remainder = __count + 1 - (__first - __backTrack);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
487 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
488 return __last; // Failure
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
489 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
490
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
491 // find_end for forward iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
492 template<typename _ForwardIterator1, typename _ForwardIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
493 _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
494 __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
495 _ForwardIterator2 __first2, _ForwardIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
496 forward_iterator_tag, forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
497 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
498 if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
499 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
500 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
501 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
502 _ForwardIterator1 __result = __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
503 while (1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
504 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
505 _ForwardIterator1 __new_result
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
506 = _GLIBCXX_STD_A::search(__first1, __last1, __first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
507 if (__new_result == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
508 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
509 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
510 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
511 __result = __new_result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
512 __first1 = __new_result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
513 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
514 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
515 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
516 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
517 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
518
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
519 template<typename _ForwardIterator1, typename _ForwardIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
520 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
521 _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
522 __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
523 _ForwardIterator2 __first2, _ForwardIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
524 forward_iterator_tag, forward_iterator_tag,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
525 _BinaryPredicate __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
526 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
527 if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
528 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
529 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
530 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
531 _ForwardIterator1 __result = __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
532 while (1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
533 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
534 _ForwardIterator1 __new_result
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
535 = _GLIBCXX_STD_A::search(__first1, __last1, __first2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
536 __last2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
537 if (__new_result == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
538 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
539 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
540 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
541 __result = __new_result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
542 __first1 = __new_result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
543 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
544 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
545 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
546 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
547 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
548
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
549 // find_end for bidirectional iterators (much faster).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
550 template<typename _BidirectionalIterator1, typename _BidirectionalIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
551 _BidirectionalIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
552 __find_end(_BidirectionalIterator1 __first1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
553 _BidirectionalIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
554 _BidirectionalIterator2 __first2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
555 _BidirectionalIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
556 bidirectional_iterator_tag, bidirectional_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
557 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
558 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
559 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
560 _BidirectionalIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
561 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
562 _BidirectionalIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
563
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
564 typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
565 typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
566
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
567 _RevIterator1 __rlast1(__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
568 _RevIterator2 __rlast2(__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
569 _RevIterator1 __rresult = _GLIBCXX_STD_A::search(_RevIterator1(__last1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
570 __rlast1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
571 _RevIterator2(__last2),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
572 __rlast2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
573
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
574 if (__rresult == __rlast1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
575 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
576 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
577 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
578 _BidirectionalIterator1 __result = __rresult.base();
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
579 std::advance(__result, -std::distance(__first2, __last2));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
580 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
581 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
582 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
583
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
584 template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
585 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
586 _BidirectionalIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
587 __find_end(_BidirectionalIterator1 __first1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
588 _BidirectionalIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
589 _BidirectionalIterator2 __first2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
590 _BidirectionalIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
591 bidirectional_iterator_tag, bidirectional_iterator_tag,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
592 _BinaryPredicate __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
593 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
594 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
595 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
596 _BidirectionalIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
597 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
598 _BidirectionalIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
599
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
600 typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
601 typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
602
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
603 _RevIterator1 __rlast1(__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
604 _RevIterator2 __rlast2(__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
605 _RevIterator1 __rresult = std::search(_RevIterator1(__last1), __rlast1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
606 _RevIterator2(__last2), __rlast2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
607 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
608
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
609 if (__rresult == __rlast1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
610 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
611 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
612 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
613 _BidirectionalIterator1 __result = __rresult.base();
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
614 std::advance(__result, -std::distance(__first2, __last2));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
615 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
616 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
617 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
618
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
619 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
620 * @brief Find last matching subsequence in a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
621 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
622 * @param __first1 Start of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
623 * @param __last1 End of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
624 * @param __first2 Start of sequence to match.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
625 * @param __last2 End of sequence to match.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
626 * @return The last iterator @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
627 * @p [__first1,__last1-(__last2-__first2)) such that @c *(i+N) ==
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
628 * @p *(__first2+N) for each @c N in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
629 * [0,__last2-__first2), or @p __last1 if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
630 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
631 * Searches the range @p [__first1,__last1) for a sub-sequence that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
632 * compares equal value-by-value with the sequence given by @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
633 * [__first2,__last2) and returns an iterator to the __first
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
634 * element of the sub-sequence, or @p __last1 if the sub-sequence
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
635 * is not found. The sub-sequence will be the last such
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
636 * subsequence contained in [__first,__last1).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
637 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
638 * Because the sub-sequence must lie completely within the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
639 * [__first1,__last1) it must start at a position less than @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
640 * __last1-(__last2-__first2) where @p __last2-__first2 is the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
641 * length of the sub-sequence. This means that the returned
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
642 * iterator @c i will be in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
643 * [__first1,__last1-(__last2-__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
644 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
645 template<typename _ForwardIterator1, typename _ForwardIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
646 inline _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
647 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
648 _ForwardIterator2 __first2, _ForwardIterator2 __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
649 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
650 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
651 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
652 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
653 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
654 typename iterator_traits<_ForwardIterator1>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
655 typename iterator_traits<_ForwardIterator2>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
656 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
657 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
658
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
659 return std::__find_end(__first1, __last1, __first2, __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
660 std::__iterator_category(__first1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
661 std::__iterator_category(__first2));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
662 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
663
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
664 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
665 * @brief Find last matching subsequence in a sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
666 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
667 * @param __first1 Start of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
668 * @param __last1 End of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
669 * @param __first2 Start of sequence to match.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
670 * @param __last2 End of sequence to match.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
671 * @param __comp The predicate to use.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
672 * @return The last iterator @c i in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
673 * [__first1,__last1-(__last2-__first2)) such that @c
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
674 * predicate(*(i+N), @p (__first2+N)) is true for each @c N in the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
675 * range @p [0,__last2-__first2), or @p __last1 if no such iterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
676 * exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
677 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
678 * Searches the range @p [__first1,__last1) for a sub-sequence that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
679 * compares equal value-by-value with the sequence given by @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
680 * [__first2,__last2) using comp as a predicate and returns an
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
681 * iterator to the first element of the sub-sequence, or @p __last1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
682 * if the sub-sequence is not found. The sub-sequence will be the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
683 * last such subsequence contained in [__first,__last1).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
684 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
685 * Because the sub-sequence must lie completely within the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
686 * [__first1,__last1) it must start at a position less than @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
687 * __last1-(__last2-__first2) where @p __last2-__first2 is the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
688 * length of the sub-sequence. This means that the returned
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
689 * iterator @c i will be in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
690 * [__first1,__last1-(__last2-__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
691 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
692 template<typename _ForwardIterator1, typename _ForwardIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
693 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
694 inline _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
695 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
696 _ForwardIterator2 __first2, _ForwardIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
697 _BinaryPredicate __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
698 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
699 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
700 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
701 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
702 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
703 typename iterator_traits<_ForwardIterator1>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
704 typename iterator_traits<_ForwardIterator2>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
705 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
706 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
707
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
708 return std::__find_end(__first1, __last1, __first2, __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
709 std::__iterator_category(__first1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
710 std::__iterator_category(__first2),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
711 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
712 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
713
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
714 #if __cplusplus >= 201103L
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
715 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
716 * @brief Checks that a predicate is true for all the elements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
717 * of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
718 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
719 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
720 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
721 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
722 * @return True if the check is true, false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
723 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
724 * Returns true if @p __pred is true for each element in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
725 * @p [__first,__last), and false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
726 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
727 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
728 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
729 all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
730 { return __last == std::find_if_not(__first, __last, __pred); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
731
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
732 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
733 * @brief Checks that a predicate is false for all the elements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
734 * of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
735 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
736 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
737 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
738 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
739 * @return True if the check is true, false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
740 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
741 * Returns true if @p __pred is false for each element in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
742 * @p [__first,__last), and false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
743 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
744 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
745 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
746 none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
747 { return __last == _GLIBCXX_STD_A::find_if(__first, __last, __pred); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
748
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
749 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
750 * @brief Checks that a predicate is false for at least an element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
751 * of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
752 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
753 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
754 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
755 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
756 * @return True if the check is true, false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
757 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
758 * Returns true if an element exists in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
759 * [__first,__last) such that @p __pred is true, and false
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
760 * otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
761 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
762 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
763 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
764 any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
765 { return !std::none_of(__first, __last, __pred); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
766
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
767 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
768 * @brief Find the first element in a sequence for which a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
769 * predicate is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
770 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
771 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
772 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
773 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
774 * @return The first iterator @c i in the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
775 * such that @p __pred(*i) is false, or @p __last if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
776 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
777 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
778 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
779 find_if_not(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
780 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
781 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
782 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
783 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
784 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
785 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
786 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
787 return std::__find_if_not(__first, __last, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
788 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
789
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
790 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
791 * @brief Checks whether the sequence is partitioned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
792 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
793 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
794 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
795 * @param __pred A predicate.
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
796 * @return True if the range @p [__first,__last) is partitioned by @p __pred,
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
797 * i.e. if all elements that satisfy @p __pred appear before those that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
798 * do not.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
799 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
800 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
801 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
802 is_partitioned(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
803 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
804 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
805 __first = std::find_if_not(__first, __last, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
806 return std::none_of(__first, __last, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
807 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
808
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
809 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
810 * @brief Find the partition point of a partitioned range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
811 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
812 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
813 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
814 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
815 * @return An iterator @p mid such that @p all_of(__first, mid, __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
816 * and @p none_of(mid, __last, __pred) are both true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
817 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
818 template<typename _ForwardIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
819 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
820 partition_point(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
821 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
822 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
823 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
824 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
825 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
826 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
827
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
828 // A specific debug-mode test will be necessary...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
829 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
830
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
831 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
832 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
833
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
834 _DistanceType __len = std::distance(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
835 _DistanceType __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
836 _ForwardIterator __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
837
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
838 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
839 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
840 __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
841 __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
842 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
843 if (__pred(*__middle))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
844 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
845 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
846 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
847 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
848 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
849 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
850 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
851 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
852 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
853 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
854 #endif
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
855
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
856
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
857 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
858 * @brief Copy a sequence, removing elements of a given value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
859 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
860 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
861 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
862 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
863 * @param __value The value to be removed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
864 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
865 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
866 * Copies each element in the range @p [__first,__last) not equal
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
867 * to @p __value to the range beginning at @p __result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
868 * remove_copy() is stable, so the relative order of elements that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
869 * are copied is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
870 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
871 template<typename _InputIterator, typename _OutputIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
872 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
873 remove_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
874 _OutputIterator __result, const _Tp& __value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
875 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
876 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
877 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
878 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
879 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
880 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
881 typename iterator_traits<_InputIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
882 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
883
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
884 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
885 if (!(*__first == __value))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
886 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
887 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
888 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
889 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
890 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
891 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
892
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
893 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
894 * @brief Copy a sequence, removing elements for which a predicate is true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
895 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
896 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
897 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
898 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
899 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
900 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
901 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
902 * Copies each element in the range @p [__first,__last) for which
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
903 * @p __pred returns false to the range beginning at @p __result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
904 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
905 * remove_copy_if() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
906 * copied is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
907 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
908 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
909 typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
910 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
911 remove_copy_if(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
912 _OutputIterator __result, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
913 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
914 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
915 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
916 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
917 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
918 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
919 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
920 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
921
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
922 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
923 if (!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
924 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
925 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
926 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
927 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
928 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
929 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
930
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
931 #if __cplusplus >= 201103L
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
932 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
933 * @brief Copy the elements of a sequence for which a predicate is true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
934 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
935 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
936 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
937 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
938 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
939 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
940 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
941 * Copies each element in the range @p [__first,__last) for which
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
942 * @p __pred returns true to the range beginning at @p __result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
943 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
944 * copy_if() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
945 * copied is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
946 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
947 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
948 typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
949 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
950 copy_if(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
951 _OutputIterator __result, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
952 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
953 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
954 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
955 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
956 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
957 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
958 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
959 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
960
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
961 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
962 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
963 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
964 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
965 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
966 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
967 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
968 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
969
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
970
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
971 template<typename _InputIterator, typename _Size, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
972 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
973 __copy_n(_InputIterator __first, _Size __n,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
974 _OutputIterator __result, input_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
975 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
976 if (__n > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
977 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
978 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
979 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
980 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
981 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
982 if (--__n > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
983 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
984 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
985 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
986 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
987 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
988 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
989 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
990
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
991 template<typename _RandomAccessIterator, typename _Size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
992 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
993 inline _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
994 __copy_n(_RandomAccessIterator __first, _Size __n,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
995 _OutputIterator __result, random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
996 { return std::copy(__first, __first + __n, __result); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
997
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
998 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
999 * @brief Copies the range [first,first+n) into [result,result+n).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1000 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1001 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1002 * @param __n The number of elements to copy.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1003 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1004 * @return result+n.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1005 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1006 * This inline function will boil down to a call to @c memmove whenever
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1007 * possible. Failing that, if random access iterators are passed, then the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1008 * loop count will be known (and therefore a candidate for compiler
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1009 * optimizations such as unrolling).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1010 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1011 template<typename _InputIterator, typename _Size, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1012 inline _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1013 copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1014 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1015 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1016 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1017 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1018 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1019
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1020 return std::__copy_n(__first, __n, __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1021 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1022 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1023
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1024 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1025 * @brief Copy the elements of a sequence to separate output sequences
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1026 * depending on the truth value of a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1027 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1028 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1029 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1030 * @param __out_true An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1031 * @param __out_false An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1032 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1033 * @return A pair designating the ends of the resulting sequences.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1034 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1035 * Copies each element in the range @p [__first,__last) for which
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1036 * @p __pred returns true to the range beginning at @p out_true
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1037 * and each element for which @p __pred returns false to @p __out_false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1038 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1039 template<typename _InputIterator, typename _OutputIterator1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1040 typename _OutputIterator2, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1041 pair<_OutputIterator1, _OutputIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1042 partition_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1043 _OutputIterator1 __out_true, _OutputIterator2 __out_false,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1044 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1045 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1046 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1047 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1048 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1049 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1050 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1051 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1052 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1053 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1054 __glibcxx_requires_valid_range(__first, __last);
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
1055
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1056 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1057 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1058 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1059 *__out_true = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1060 ++__out_true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1061 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1062 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1063 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1064 *__out_false = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1065 ++__out_false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1066 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1067
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1068 return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1069 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1070 #endif
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1071
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1072 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1073 * @brief Remove elements from a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1074 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1075 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1076 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1077 * @param __value The value to be removed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1078 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1079 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1080 * All elements equal to @p __value are removed from the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1081 * @p [__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1082 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1083 * remove() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1084 * not removed is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1085 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1086 * Elements between the end of the resulting sequence and @p __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1087 * are still present, but their value is unspecified.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1088 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1089 template<typename _ForwardIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1090 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1091 remove(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1092 const _Tp& __value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1093 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1094 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1095 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1096 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1097 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1098 typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1099 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1100
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1101 __first = _GLIBCXX_STD_A::find(__first, __last, __value);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1102 if(__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1103 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1104 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1105 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1106 for(; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1107 if(!(*__first == __value))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1108 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1109 *__result = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1110 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1111 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1112 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1113 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1114
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1115 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1116 * @brief Remove elements from a sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1117 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1118 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1119 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1120 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1121 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1122 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1123 * All elements for which @p __pred returns true are removed from the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1124 * @p [__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1125 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1126 * remove_if() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1127 * not removed is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1128 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1129 * Elements between the end of the resulting sequence and @p __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1130 * are still present, but their value is unspecified.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1131 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1132 template<typename _ForwardIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1133 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1134 remove_if(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1135 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1136 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1137 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1138 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1139 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1140 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1141 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1142 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1143
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1144 __first = _GLIBCXX_STD_A::find_if(__first, __last, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1145 if(__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1146 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1147 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1148 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1149 for(; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1150 if(!bool(__pred(*__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1151 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1152 *__result = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1153 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1154 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1155 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1156 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1157
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1158 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1159 * @brief Remove consecutive duplicate values from a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1160 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1161 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1162 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1163 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1164 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1165 * Removes all but the first element from each group of consecutive
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1166 * values that compare equal.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1167 * unique() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1168 * not removed is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1169 * Elements between the end of the resulting sequence and @p __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1170 * are still present, but their value is unspecified.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1171 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1172 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1173 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1174 unique(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1175 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1176 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1177 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1178 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1179 __glibcxx_function_requires(_EqualityComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1180 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1181 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1182
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1183 // Skip the beginning, if already unique.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1184 __first = _GLIBCXX_STD_A::adjacent_find(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1185 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1186 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1187
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1188 // Do the real copy work.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1189 _ForwardIterator __dest = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1190 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1191 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1192 if (!(*__dest == *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1193 *++__dest = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1194 return ++__dest;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1195 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1196
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1197 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1198 * @brief Remove consecutive values from a sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1199 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1200 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1201 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1202 * @param __binary_pred A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1203 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1204 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1205 * Removes all but the first element from each group of consecutive
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1206 * values for which @p __binary_pred returns true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1207 * unique() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1208 * not removed is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1209 * Elements between the end of the resulting sequence and @p __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1210 * are still present, but their value is unspecified.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1211 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1212 template<typename _ForwardIterator, typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1213 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1214 unique(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1215 _BinaryPredicate __binary_pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1216 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1217 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1218 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1219 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1220 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1221 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1222 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1223 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1224
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1225 // Skip the beginning, if already unique.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1226 __first = _GLIBCXX_STD_A::adjacent_find(__first, __last, __binary_pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1227 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1228 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1229
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1230 // Do the real copy work.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1231 _ForwardIterator __dest = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1232 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1233 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1234 if (!bool(__binary_pred(*__dest, *__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1235 *++__dest = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1236 return ++__dest;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1237 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1238
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1239 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1240 * This is an uglified unique_copy(_InputIterator, _InputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1241 * _OutputIterator)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1242 * overloaded for forward iterators and output iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1243 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1244 template<typename _ForwardIterator, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1245 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1246 __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1247 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1248 forward_iterator_tag, output_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1249 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1250 // concept requirements -- taken care of in dispatching function
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1251 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1252 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1253 while (++__next != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1254 if (!(*__first == *__next))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1255 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1256 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1257 *++__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1258 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1259 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1260 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1261
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1262 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1263 * This is an uglified unique_copy(_InputIterator, _InputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1264 * _OutputIterator)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1265 * overloaded for input iterators and output iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1266 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1267 template<typename _InputIterator, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1268 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1269 __unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1270 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1271 input_iterator_tag, output_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1272 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1273 // concept requirements -- taken care of in dispatching function
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1274 typename iterator_traits<_InputIterator>::value_type __value = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1275 *__result = __value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1276 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1277 if (!(__value == *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1278 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1279 __value = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1280 *++__result = __value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1281 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1282 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1283 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1284
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1285 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1286 * This is an uglified unique_copy(_InputIterator, _InputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1287 * _OutputIterator)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1288 * overloaded for input iterators and forward iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1289 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1290 template<typename _InputIterator, typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1291 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1292 __unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1293 _ForwardIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1294 input_iterator_tag, forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1295 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1296 // concept requirements -- taken care of in dispatching function
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1297 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1298 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1299 if (!(*__result == *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1300 *++__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1301 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1302 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1303
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1304 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1305 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1306 * unique_copy(_InputIterator, _InputIterator, _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1307 * _BinaryPredicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1308 * overloaded for forward iterators and output iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1309 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1310 template<typename _ForwardIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1311 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1312 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1313 __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1314 _OutputIterator __result, _BinaryPredicate __binary_pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1315 forward_iterator_tag, output_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1316 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1317 // concept requirements -- iterators already checked
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1318 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1319 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1320 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1321
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1322 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1323 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1324 while (++__next != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1325 if (!bool(__binary_pred(*__first, *__next)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1326 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1327 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1328 *++__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1329 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1330 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1331 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1332
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1333 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1334 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1335 * unique_copy(_InputIterator, _InputIterator, _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1336 * _BinaryPredicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1337 * overloaded for input iterators and output iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1338 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1339 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1340 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1341 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1342 __unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1343 _OutputIterator __result, _BinaryPredicate __binary_pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1344 input_iterator_tag, output_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1345 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1346 // concept requirements -- iterators already checked
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1347 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1348 typename iterator_traits<_InputIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1349 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1350
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1351 typename iterator_traits<_InputIterator>::value_type __value = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1352 *__result = __value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1353 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1354 if (!bool(__binary_pred(__value, *__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1355 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1356 __value = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1357 *++__result = __value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1358 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1359 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1360 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1361
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1362 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1363 * This is an uglified
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1364 * unique_copy(_InputIterator, _InputIterator, _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1365 * _BinaryPredicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1366 * overloaded for input iterators and forward iterator as result.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1367 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1368 template<typename _InputIterator, typename _ForwardIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1369 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1370 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1371 __unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1372 _ForwardIterator __result, _BinaryPredicate __binary_pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1373 input_iterator_tag, forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1374 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1375 // concept requirements -- iterators already checked
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1376 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1377 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1378 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1379
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1380 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1381 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1382 if (!bool(__binary_pred(*__result, *__first)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1383 *++__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1384 return ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1385 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1386
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1387 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1388 * This is an uglified reverse(_BidirectionalIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1389 * _BidirectionalIterator)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1390 * overloaded for bidirectional iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1391 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1392 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1393 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1394 __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1395 bidirectional_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1396 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1397 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1398 if (__first == __last || __first == --__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1399 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1400 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1401 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1402 std::iter_swap(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1403 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1404 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1405 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1406
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1407 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1408 * This is an uglified reverse(_BidirectionalIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1409 * _BidirectionalIterator)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1410 * overloaded for random access iterators.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1411 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1412 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1413 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1414 __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1415 random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1416 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1417 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1418 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1419 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1420 while (__first < __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1421 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1422 std::iter_swap(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1423 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1424 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1425 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1426 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1427
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1428 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1429 * @brief Reverse a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1430 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1431 * @param __first A bidirectional iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1432 * @param __last A bidirectional iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1433 * @return reverse() returns no value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1434 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1435 * Reverses the order of the elements in the range @p [__first,__last),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1436 * so that the first element becomes the last etc.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1437 * For every @c i such that @p 0<=i<=(__last-__first)/2), @p reverse()
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1438 * swaps @p *(__first+i) and @p *(__last-(i+1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1439 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1440 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1441 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1442 reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1443 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1444 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1445 __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1446 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1447 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1448 std::__reverse(__first, __last, std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1449 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1450
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1451 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1452 * @brief Copy a sequence, reversing its elements.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1453 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1454 * @param __first A bidirectional iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1455 * @param __last A bidirectional iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1456 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1457 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1458 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1459 * Copies the elements in the range @p [__first,__last) to the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1460 * range @p [__result,__result+(__last-__first)) such that the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1461 * order of the elements is reversed. For every @c i such that @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1462 * 0<=i<=(__last-__first), @p reverse_copy() performs the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1463 * assignment @p *(__result+(__last-__first)-1-i) = *(__first+i).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1464 * The ranges @p [__first,__last) and @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1465 * [__result,__result+(__last-__first)) must not overlap.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1466 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1467 template<typename _BidirectionalIterator, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1468 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1469 reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1470 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1471 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1472 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1473 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1474 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1475 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1476 typename iterator_traits<_BidirectionalIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1477 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1478
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1479 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1480 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1481 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1482 *__result = *__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1483 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1484 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1485 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1486 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1487
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1488 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1489 * This is a helper function for the rotate algorithm specialized on RAIs.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1490 * It returns the greatest common divisor of two integer values.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1491 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1492 template<typename _EuclideanRingElement>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1493 _EuclideanRingElement
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1494 __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1495 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1496 while (__n != 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1497 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1498 _EuclideanRingElement __t = __m % __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1499 __m = __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1500 __n = __t;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1501 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1502 return __m;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1503 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1504
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1505 /// This is a helper function for the rotate algorithm.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1506 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1507 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1508 __rotate(_ForwardIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1509 _ForwardIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1510 _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1511 forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1512 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1513 if (__first == __middle || __last == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1514 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1515
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1516 _ForwardIterator __first2 = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1517 do
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1518 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1519 std::iter_swap(__first, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1520 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1521 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1522 if (__first == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1523 __middle = __first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1524 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1525 while (__first2 != __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1526
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1527 __first2 = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1528
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1529 while (__first2 != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1530 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1531 std::iter_swap(__first, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1532 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1533 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1534 if (__first == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1535 __middle = __first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1536 else if (__first2 == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1537 __first2 = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1538 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1539 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1540
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1541 /// This is a helper function for the rotate algorithm.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1542 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1543 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1544 __rotate(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1545 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1546 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1547 bidirectional_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1548 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1549 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1550 __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1551 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1552
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1553 if (__first == __middle || __last == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1554 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1555
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1556 std::__reverse(__first, __middle, bidirectional_iterator_tag());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1557 std::__reverse(__middle, __last, bidirectional_iterator_tag());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1558
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1559 while (__first != __middle && __middle != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1560 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1561 std::iter_swap(__first, --__last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1562 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1563 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1564
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1565 if (__first == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1566 std::__reverse(__middle, __last, bidirectional_iterator_tag());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1567 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1568 std::__reverse(__first, __middle, bidirectional_iterator_tag());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1569 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1570
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1571 /// This is a helper function for the rotate algorithm.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1572 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1573 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1574 __rotate(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1575 _RandomAccessIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1576 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1577 random_access_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1578 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1579 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1580 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1581 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1582
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1583 if (__first == __middle || __last == __middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1584 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1585
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1586 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1587 _Distance;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1588 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1589 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1590
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1591 _Distance __n = __last - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1592 _Distance __k = __middle - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1593
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1594 if (__k == __n - __k)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1595 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1596 std::swap_ranges(__first, __middle, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1597 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1598 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1599
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1600 _RandomAccessIterator __p = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1601
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1602 for (;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1603 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1604 if (__k < __n - __k)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1605 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1606 if (__is_pod(_ValueType) && __k == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1607 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1608 _ValueType __t = _GLIBCXX_MOVE(*__p);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1609 _GLIBCXX_MOVE3(__p + 1, __p + __n, __p);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1610 *(__p + __n - 1) = _GLIBCXX_MOVE(__t);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1611 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1612 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1613 _RandomAccessIterator __q = __p + __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1614 for (_Distance __i = 0; __i < __n - __k; ++ __i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1615 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1616 std::iter_swap(__p, __q);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1617 ++__p;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1618 ++__q;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1619 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1620 __n %= __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1621 if (__n == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1622 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1623 std::swap(__n, __k);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1624 __k = __n - __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1625 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1626 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1627 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1628 __k = __n - __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1629 if (__is_pod(_ValueType) && __k == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1630 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1631 _ValueType __t = _GLIBCXX_MOVE(*(__p + __n - 1));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1632 _GLIBCXX_MOVE_BACKWARD3(__p, __p + __n - 1, __p + __n);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1633 *__p = _GLIBCXX_MOVE(__t);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1634 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1635 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1636 _RandomAccessIterator __q = __p + __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1637 __p = __q - __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1638 for (_Distance __i = 0; __i < __n - __k; ++ __i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1639 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1640 --__p;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1641 --__q;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1642 std::iter_swap(__p, __q);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1643 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1644 __n %= __k;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1645 if (__n == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1646 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1647 std::swap(__n, __k);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1648 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1649 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1650 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1651
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1652 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1653 * @brief Rotate the elements of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1654 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1655 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1656 * @param __middle A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1657 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1658 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1659 *
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
1660 * Rotates the elements of the range @p [__first,__last) by
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1661 * @p (__middle - __first) positions so that the element at @p __middle
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1662 * is moved to @p __first, the element at @p __middle+1 is moved to
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1663 * @p __first+1 and so on for each element in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1664 * @p [__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1665 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1666 * This effectively swaps the ranges @p [__first,__middle) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1667 * @p [__middle,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1668 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1669 * Performs
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1670 * @p *(__first+(n+(__last-__middle))%(__last-__first))=*(__first+n)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1671 * for each @p n in the range @p [0,__last-__first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1672 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1673 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1674 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1675 rotate(_ForwardIterator __first, _ForwardIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1676 _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1677 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1678 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1679 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1680 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1681 __glibcxx_requires_valid_range(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1682 __glibcxx_requires_valid_range(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1683
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1684 typedef typename iterator_traits<_ForwardIterator>::iterator_category
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1685 _IterType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1686 std::__rotate(__first, __middle, __last, _IterType());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1687 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1688
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1689 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1690 * @brief Copy a sequence, rotating its elements.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1691 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1692 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1693 * @param __middle A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1694 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1695 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1696 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1697 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1698 * Copies the elements of the range @p [__first,__last) to the
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
1699 * range beginning at @result, rotating the copied elements by
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1700 * @p (__middle-__first) positions so that the element at @p __middle
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1701 * is moved to @p __result, the element at @p __middle+1 is moved
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1702 * to @p __result+1 and so on for each element in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1703 * [__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1704 *
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
1705 * Performs
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1706 * @p *(__result+(n+(__last-__middle))%(__last-__first))=*(__first+n)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1707 * for each @p n in the range @p [0,__last-__first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1708 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1709 template<typename _ForwardIterator, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1710 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1711 rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1712 _ForwardIterator __last, _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1713 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1714 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1715 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1716 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1717 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1718 __glibcxx_requires_valid_range(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1719 __glibcxx_requires_valid_range(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1720
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1721 return std::copy(__first, __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1722 std::copy(__middle, __last, __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1723 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1724
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1725 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1726 template<typename _ForwardIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1727 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1728 __partition(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1729 _Predicate __pred, forward_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1730 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1731 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1732 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1733
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1734 while (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1735 if (++__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1736 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1737
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1738 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1739
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1740 while (++__next != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1741 if (__pred(*__next))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1742 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1743 std::iter_swap(__first, __next);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1744 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1745 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1746
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1747 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1748 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1749
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1750 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1751 template<typename _BidirectionalIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1752 _BidirectionalIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1753 __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1754 _Predicate __pred, bidirectional_iterator_tag)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1755 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1756 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1757 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1758 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1759 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1760 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1761 else if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1762 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1763 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1764 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1765 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1766 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1767 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1768 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1769 else if (!bool(__pred(*__last)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1770 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1771 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1772 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1773 std::iter_swap(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1774 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1775 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1776 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1777
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1778 // partition
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1779
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1780 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1781 /// Requires __len != 0 and !__pred(*__first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1782 /// same as __stable_partition_adaptive.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1783 template<typename _ForwardIterator, typename _Predicate, typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1784 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1785 __inplace_stable_partition(_ForwardIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1786 _Predicate __pred, _Distance __len)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1787 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1788 if (__len == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1789 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1790 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1791 std::advance(__middle, __len / 2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1792 _ForwardIterator __left_split =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1793 std::__inplace_stable_partition(__first, __pred, __len / 2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1794 // Advance past true-predicate values to satisfy this
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1795 // function's preconditions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1796 _Distance __right_len = __len - __len / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1797 _ForwardIterator __right_split =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1798 std::__find_if_not_n(__middle, __right_len, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1799 if (__right_len)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1800 __right_split = std::__inplace_stable_partition(__middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1801 __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1802 __right_len);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1803 std::rotate(__left_split, __middle, __right_split);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1804 std::advance(__left_split, std::distance(__middle, __right_split));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1805 return __left_split;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1806 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1807
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1808 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1809 /// Requires __first != __last and !__pred(*__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1810 /// and __len == distance(__first, __last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1811 ///
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1812 /// !__pred(*__first) allows us to guarantee that we don't
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1813 /// move-assign an element onto itself.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1814 template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1815 typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1816 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1817 __stable_partition_adaptive(_ForwardIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1818 _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1819 _Predicate __pred, _Distance __len,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1820 _Pointer __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1821 _Distance __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1822 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1823 if (__len <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1824 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1825 _ForwardIterator __result1 = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1826 _Pointer __result2 = __buffer;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1827 // The precondition guarantees that !__pred(*__first), so
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1828 // move that element to the buffer before starting the loop.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1829 // This ensures that we only call __pred once per element.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1830 *__result2 = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1831 ++__result2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1832 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1833 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1834 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1835 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1836 *__result1 = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1837 ++__result1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1838 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1839 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1840 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1841 *__result2 = _GLIBCXX_MOVE(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1842 ++__result2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1843 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1844 _GLIBCXX_MOVE3(__buffer, __result2, __result1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1845 return __result1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1846 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1847 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1848 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1849 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1850 std::advance(__middle, __len / 2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1851 _ForwardIterator __left_split =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1852 std::__stable_partition_adaptive(__first, __middle, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1853 __len / 2, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1854 __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1855 // Advance past true-predicate values to satisfy this
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1856 // function's preconditions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1857 _Distance __right_len = __len - __len / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1858 _ForwardIterator __right_split =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1859 std::__find_if_not_n(__middle, __right_len, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1860 if (__right_len)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1861 __right_split =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1862 std::__stable_partition_adaptive(__right_split, __last, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1863 __right_len,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1864 __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1865 std::rotate(__left_split, __middle, __right_split);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1866 std::advance(__left_split, std::distance(__middle, __right_split));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1867 return __left_split;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1868 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1869 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1870
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1871 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1872 * @brief Move elements for which a predicate is true to the beginning
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1873 * of a sequence, preserving relative ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1874 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1875 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1876 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1877 * @param __pred A predicate functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1878 * @return An iterator @p middle such that @p __pred(i) is true for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1879 * iterator @p i in the range @p [first,middle) and false for each @p i
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1880 * in the range @p [middle,last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1881 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1882 * Performs the same function as @p partition() with the additional
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1883 * guarantee that the relative ordering of elements in each group is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1884 * preserved, so any two elements @p x and @p y in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1885 * @p [__first,__last) such that @p __pred(x)==__pred(y) will have the same
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1886 * relative ordering after calling @p stable_partition().
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1887 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1888 template<typename _ForwardIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1889 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1890 stable_partition(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1891 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1892 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1893 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1894 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1895 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1896 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1897 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1898 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1899
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1900 __first = std::__find_if_not(__first, __last, __pred);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1901
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1902 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1903 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1904 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1905 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1906 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1907 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1908 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1909 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1910
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1911 _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1912 __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1913 if (__buf.size() > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1914 return
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1915 std::__stable_partition_adaptive(__first, __last, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1916 _DistanceType(__buf.requested_size()),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1917 __buf.begin(),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1918 _DistanceType(__buf.size()));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1919 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1920 return
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1921 std::__inplace_stable_partition(__first, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1922 _DistanceType(__buf.requested_size()));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1923 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1924 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1925
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1926 /// This is a helper function for the sort routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1927 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1928 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1929 __heap_select(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1930 _RandomAccessIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1931 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1932 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1933 std::make_heap(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1934 for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1935 if (*__i < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1936 std::__pop_heap(__first, __middle, __i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1937 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1938
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1939 /// This is a helper function for the sort routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1940 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1941 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1942 __heap_select(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1943 _RandomAccessIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1944 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1945 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1946 std::make_heap(__first, __middle, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1947 for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1948 if (__comp(*__i, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1949 std::__pop_heap(__first, __middle, __i, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1950 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1951
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1952 // partial_sort
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1953
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1954 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1955 * @brief Copy the smallest elements of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1956 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1957 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1958 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1959 * @param __result_first A random-access iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1960 * @param __result_last Another random-access iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1961 * @return An iterator indicating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1962 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1963 * Copies and sorts the smallest N values from the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1964 * to the range beginning at @p __result_first, where the number of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1965 * elements to be copied, @p N, is the smaller of @p (__last-__first) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1966 * @p (__result_last-__result_first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1967 * After the sort if @e i and @e j are iterators in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1968 * @p [__result_first,__result_first+N) such that i precedes j then
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1969 * *j<*i is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1970 * The value returned is @p __result_first+N.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1971 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1972 template<typename _InputIterator, typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1973 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1974 partial_sort_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1975 _RandomAccessIterator __result_first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1976 _RandomAccessIterator __result_last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1977 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1978 typedef typename iterator_traits<_InputIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1979 _InputValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1980 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1981 _OutputValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1982 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1983 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1984
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1985 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1986 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1987 __glibcxx_function_requires(_ConvertibleConcept<_InputValueType,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1988 _OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1989 __glibcxx_function_requires(_LessThanOpConcept<_InputValueType,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1990 _OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1991 __glibcxx_function_requires(_LessThanComparableConcept<_OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1992 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1993 __glibcxx_requires_valid_range(__result_first, __result_last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1994
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1995 if (__result_first == __result_last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1996 return __result_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1997 _RandomAccessIterator __result_real_last = __result_first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1998 while(__first != __last && __result_real_last != __result_last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1999 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2000 *__result_real_last = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2001 ++__result_real_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2002 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2003 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2004 std::make_heap(__result_first, __result_real_last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2005 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2006 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2007 if (*__first < *__result_first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2008 std::__adjust_heap(__result_first, _DistanceType(0),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2009 _DistanceType(__result_real_last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2010 - __result_first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2011 _InputValueType(*__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2012 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2013 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2014 std::sort_heap(__result_first, __result_real_last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2015 return __result_real_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2016 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2017
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2018 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2019 * @brief Copy the smallest elements of a sequence using a predicate for
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2020 * comparison.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2021 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2022 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2023 * @param __last Another input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2024 * @param __result_first A random-access iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2025 * @param __result_last Another random-access iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2026 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2027 * @return An iterator indicating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2028 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2029 * Copies and sorts the smallest N values from the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2030 * to the range beginning at @p result_first, where the number of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2031 * elements to be copied, @p N, is the smaller of @p (__last-__first) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2032 * @p (__result_last-__result_first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2033 * After the sort if @e i and @e j are iterators in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2034 * @p [__result_first,__result_first+N) such that i precedes j then
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2035 * @p __comp(*j,*i) is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2036 * The value returned is @p __result_first+N.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2037 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2038 template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2039 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2040 partial_sort_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2041 _RandomAccessIterator __result_first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2042 _RandomAccessIterator __result_last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2043 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2044 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2045 typedef typename iterator_traits<_InputIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2046 _InputValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2047 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2048 _OutputValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2049 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2050 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2051
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2052 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2053 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2054 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2055 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2056 __glibcxx_function_requires(_ConvertibleConcept<_InputValueType,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2057 _OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2058 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2059 _InputValueType, _OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2060 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2061 _OutputValueType, _OutputValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2062 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2063 __glibcxx_requires_valid_range(__result_first, __result_last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2064
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2065 if (__result_first == __result_last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2066 return __result_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2067 _RandomAccessIterator __result_real_last = __result_first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2068 while(__first != __last && __result_real_last != __result_last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2069 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2070 *__result_real_last = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2071 ++__result_real_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2072 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2073 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2074 std::make_heap(__result_first, __result_real_last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2075 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2076 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2077 if (__comp(*__first, *__result_first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2078 std::__adjust_heap(__result_first, _DistanceType(0),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2079 _DistanceType(__result_real_last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2080 - __result_first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2081 _InputValueType(*__first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2082 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2083 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2084 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2085 std::sort_heap(__result_first, __result_real_last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2086 return __result_real_last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2087 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2088
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2089 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2090 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2091 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2092 __unguarded_linear_insert(_RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2093 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2094 typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2095 __val = _GLIBCXX_MOVE(*__last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2096 _RandomAccessIterator __next = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2097 --__next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2098 while (__val < *__next)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2099 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2100 *__last = _GLIBCXX_MOVE(*__next);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2101 __last = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2102 --__next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2103 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2104 *__last = _GLIBCXX_MOVE(__val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2105 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2106
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2107 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2108 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2109 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2110 __unguarded_linear_insert(_RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2111 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2112 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2113 typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2114 __val = _GLIBCXX_MOVE(*__last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2115 _RandomAccessIterator __next = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2116 --__next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2117 while (__comp(__val, *__next))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2118 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2119 *__last = _GLIBCXX_MOVE(*__next);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2120 __last = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2121 --__next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2122 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2123 *__last = _GLIBCXX_MOVE(__val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2124 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2125
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2126 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2127 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2128 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2129 __insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2130 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2131 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2132 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2133 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2134
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2135 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2136 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2137 if (*__i < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2138 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2139 typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2140 __val = _GLIBCXX_MOVE(*__i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2141 _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2142 *__first = _GLIBCXX_MOVE(__val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2143 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2144 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2145 std::__unguarded_linear_insert(__i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2146 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2147 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2148
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2149 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2150 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2151 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2152 __insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2153 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2154 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2155 if (__first == __last) return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2156
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2157 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2158 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2159 if (__comp(*__i, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2160 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2161 typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2162 __val = _GLIBCXX_MOVE(*__i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2163 _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2164 *__first = _GLIBCXX_MOVE(__val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2165 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2166 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2167 std::__unguarded_linear_insert(__i, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2168 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2169 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2170
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2171 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2172 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2173 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2174 __unguarded_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2175 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2176 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2177 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2178 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2179
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2180 for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2181 std::__unguarded_linear_insert(__i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2182 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2183
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2184 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2185 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2186 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2187 __unguarded_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2188 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2189 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2190 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2191 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2192
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2193 for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2194 std::__unguarded_linear_insert(__i, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2195 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2196
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2197 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2198 * @doctodo
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2199 * This controls some aspect of the sort routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2200 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2201 enum { _S_threshold = 16 };
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2202
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2203 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2204 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2205 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2206 __final_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2207 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2208 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2209 if (__last - __first > int(_S_threshold))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2210 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2211 std::__insertion_sort(__first, __first + int(_S_threshold));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2212 std::__unguarded_insertion_sort(__first + int(_S_threshold), __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2213 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2214 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2215 std::__insertion_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2216 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2217
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2218 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2219 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2220 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2221 __final_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2222 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2223 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2224 if (__last - __first > int(_S_threshold))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2225 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2226 std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2227 std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2228 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2229 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2230 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2231 std::__insertion_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2232 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2233
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2234 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2235 template<typename _RandomAccessIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2236 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2237 __unguarded_partition(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2238 _RandomAccessIterator __last, const _Tp& __pivot)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2239 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2240 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2241 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2242 while (*__first < __pivot)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2243 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2244 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2245 while (__pivot < *__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2246 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2247 if (!(__first < __last))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2248 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2249 std::iter_swap(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2250 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2251 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2252 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2253
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2254 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2255 template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2256 _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2257 __unguarded_partition(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2258 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2259 const _Tp& __pivot, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2260 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2261 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2262 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2263 while (__comp(*__first, __pivot))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2264 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2265 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2266 while (__comp(__pivot, *__last))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2267 --__last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2268 if (!(__first < __last))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2269 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2270 std::iter_swap(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2271 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2272 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2273 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2274
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2275 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2276 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2277 inline _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2278 __unguarded_partition_pivot(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2279 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2280 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2281 _RandomAccessIterator __mid = __first + (__last - __first) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2282 std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2283 return std::__unguarded_partition(__first + 1, __last, *__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2284 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2285
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2286
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2287 /// This is a helper function...
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2288 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2289 inline _RandomAccessIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2290 __unguarded_partition_pivot(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2291 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2292 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2293 _RandomAccessIterator __mid = __first + (__last - __first) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2294 std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2295 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2296 return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2297 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2298
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2299 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2300 template<typename _RandomAccessIterator, typename _Size>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2301 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2302 __introsort_loop(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2303 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2304 _Size __depth_limit)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2305 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2306 while (__last - __first > int(_S_threshold))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2307 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2308 if (__depth_limit == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2309 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2310 _GLIBCXX_STD_A::partial_sort(__first, __last, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2311 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2312 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2313 --__depth_limit;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2314 _RandomAccessIterator __cut =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2315 std::__unguarded_partition_pivot(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2316 std::__introsort_loop(__cut, __last, __depth_limit);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2317 __last = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2318 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2319 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2320
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2321 /// This is a helper function for the sort routine.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2322 template<typename _RandomAccessIterator, typename _Size, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2323 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2324 __introsort_loop(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2325 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2326 _Size __depth_limit, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2327 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2328 while (__last - __first > int(_S_threshold))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2329 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2330 if (__depth_limit == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2331 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2332 _GLIBCXX_STD_A::partial_sort(__first, __last, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2333 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2334 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2335 --__depth_limit;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2336 _RandomAccessIterator __cut =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2337 std::__unguarded_partition_pivot(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2338 std::__introsort_loop(__cut, __last, __depth_limit, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2339 __last = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2340 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2341 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2342
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2343 // sort
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2344
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2345 template<typename _RandomAccessIterator, typename _Size>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2346 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2347 __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2348 _RandomAccessIterator __last, _Size __depth_limit)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2349 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2350 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2351 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2352
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2353 while (__last - __first > 3)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2354 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2355 if (__depth_limit == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2356 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2357 std::__heap_select(__first, __nth + 1, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2358
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2359 // Place the nth largest element in its final position.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2360 std::iter_swap(__first, __nth);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2361 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2362 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2363 --__depth_limit;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2364 _RandomAccessIterator __cut =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2365 std::__unguarded_partition_pivot(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2366 if (__cut <= __nth)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2367 __first = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2368 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2369 __last = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2370 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2371 std::__insertion_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2372 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2373
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2374 template<typename _RandomAccessIterator, typename _Size, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2375 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2376 __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2377 _RandomAccessIterator __last, _Size __depth_limit,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2378 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2379 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2380 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2381 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2382
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2383 while (__last - __first > 3)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2384 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2385 if (__depth_limit == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2386 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2387 std::__heap_select(__first, __nth + 1, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2388 // Place the nth largest element in its final position.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2389 std::iter_swap(__first, __nth);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2390 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2391 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2392 --__depth_limit;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2393 _RandomAccessIterator __cut =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2394 std::__unguarded_partition_pivot(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2395 if (__cut <= __nth)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2396 __first = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2397 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2398 __last = __cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2399 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2400 std::__insertion_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2401 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2402
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2403 // nth_element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2404
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2405 // lower_bound moved to stl_algobase.h
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2406
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2407 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2408 * @brief Finds the first position in which @p __val could be inserted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2409 * without changing the ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2410 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2411 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2412 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2413 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2414 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2415 * @return An iterator pointing to the first element <em>not less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2416 * than</em> @p __val, or end() if every element is less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2417 * than @p __val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2418 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2419 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2420 * The comparison function should have the same effects on ordering as
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2421 * the function used for the initial sort.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2422 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2423 template<typename _ForwardIterator, typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2424 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2425 lower_bound(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2426 const _Tp& __val, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2427 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2428 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2429 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2430 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2431 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2432
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2433 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2434 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2435 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2436 _ValueType, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2437 __glibcxx_requires_partitioned_lower_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2438 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2439
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2440 _DistanceType __len = std::distance(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2441
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2442 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2443 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2444 _DistanceType __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2445 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2446 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2447 if (__comp(*__middle, __val))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2448 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2449 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2450 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2451 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2452 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2453 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2454 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2455 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2456 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2457 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2458
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2459 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2460 * @brief Finds the last position in which @p __val could be inserted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2461 * without changing the ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2462 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2463 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2464 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2465 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2466 * @return An iterator pointing to the first element greater than @p __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2467 * or end() if no elements are greater than @p __val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2468 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2469 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2470 template<typename _ForwardIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2471 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2472 upper_bound(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2473 const _Tp& __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2474 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2475 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2476 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2477 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2478 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2479
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2480 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2481 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2482 __glibcxx_function_requires(_LessThanOpConcept<_Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2483 __glibcxx_requires_partitioned_upper(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2484
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2485 _DistanceType __len = std::distance(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2486
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2487 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2488 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2489 _DistanceType __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2490 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2491 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2492 if (__val < *__middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2493 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2494 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2495 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2496 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2497 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2498 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2499 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2500 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2501 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2502 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2503
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2504 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2505 * @brief Finds the last position in which @p __val could be inserted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2506 * without changing the ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2507 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2508 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2509 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2510 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2511 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2512 * @return An iterator pointing to the first element greater than @p __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2513 * or end() if no elements are greater than @p __val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2514 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2515 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2516 * The comparison function should have the same effects on ordering as
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2517 * the function used for the initial sort.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2518 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2519 template<typename _ForwardIterator, typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2520 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2521 upper_bound(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2522 const _Tp& __val, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2523 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2524 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2525 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2526 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2527 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2528
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2529 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2530 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2531 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2532 _Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2533 __glibcxx_requires_partitioned_upper_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2534 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2535
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2536 _DistanceType __len = std::distance(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2537
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2538 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2539 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2540 _DistanceType __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2541 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2542 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2543 if (__comp(__val, *__middle))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2544 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2545 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2546 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2547 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2548 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2549 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2550 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2551 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2552 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2553 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2554
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2555 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2556 * @brief Finds the largest subrange in which @p __val could be inserted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2557 * at any place in it without changing the ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2558 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2559 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2560 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2561 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2562 * @return An pair of iterators defining the subrange.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2563 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2564 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2565 * This is equivalent to
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2566 * @code
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2567 * std::make_pair(lower_bound(__first, __last, __val),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2568 * upper_bound(__first, __last, __val))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2569 * @endcode
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2570 * but does not actually call those functions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2571 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2572 template<typename _ForwardIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2573 pair<_ForwardIterator, _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2574 equal_range(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2575 const _Tp& __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2576 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2577 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2578 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2579 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2580 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2581
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2582 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2583 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2584 __glibcxx_function_requires(_LessThanOpConcept<_ValueType, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2585 __glibcxx_function_requires(_LessThanOpConcept<_Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2586 __glibcxx_requires_partitioned_lower(__first, __last, __val);
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
2587 __glibcxx_requires_partitioned_upper(__first, __last, __val);
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2588
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2589 _DistanceType __len = std::distance(__first, __last);
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
2590
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2591 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2592 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2593 _DistanceType __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2594 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2595 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2596 if (*__middle < __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2597 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2598 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2599 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2600 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2601 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2602 else if (__val < *__middle)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2603 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2604 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2605 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2606 _ForwardIterator __left = std::lower_bound(__first, __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2607 __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2608 std::advance(__first, __len);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2609 _ForwardIterator __right = std::upper_bound(++__middle, __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2610 __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2611 return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2612 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2613 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2614 return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2615 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2616
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2617 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2618 * @brief Finds the largest subrange in which @p __val could be inserted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2619 * at any place in it without changing the ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2620 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2621 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2622 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2623 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2624 * @return An pair of iterators defining the subrange.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2625 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2626 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2627 * This is equivalent to
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2628 * @code
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2629 * std::make_pair(lower_bound(__first, __last, __val, __comp),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2630 * upper_bound(__first, __last, __val, __comp))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2631 * @endcode
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2632 * but does not actually call those functions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2633 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2634 template<typename _ForwardIterator, typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2635 pair<_ForwardIterator, _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2636 equal_range(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2637 const _Tp& __val, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2638 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2639 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2640 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2641 typedef typename iterator_traits<_ForwardIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2642 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2643
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2644 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2645 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2646 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2647 _ValueType, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2648 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2649 _Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2650 __glibcxx_requires_partitioned_lower_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2651 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2652 __glibcxx_requires_partitioned_upper_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2653 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2654
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2655 _DistanceType __len = std::distance(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2656
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2657 while (__len > 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2658 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2659 _DistanceType __half = __len >> 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2660 _ForwardIterator __middle = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2661 std::advance(__middle, __half);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2662 if (__comp(*__middle, __val))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2663 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2664 __first = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2665 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2666 __len = __len - __half - 1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2667 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2668 else if (__comp(__val, *__middle))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2669 __len = __half;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2670 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2671 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2672 _ForwardIterator __left = std::lower_bound(__first, __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2673 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2674 std::advance(__first, __len);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2675 _ForwardIterator __right = std::upper_bound(++__middle, __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2676 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2677 return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2678 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2679 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2680 return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2681 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2682
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2683 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2684 * @brief Determines whether an element exists in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2685 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2686 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2687 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2688 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2689 * @return True if @p __val (or its equivalent) is in [@p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2690 * __first,@p __last ].
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2691 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2692 * Note that this does not actually return an iterator to @p __val. For
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2693 * that, use std::find or a container's specialized find member functions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2694 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2695 template<typename _ForwardIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2696 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2697 binary_search(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2698 const _Tp& __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2699 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2700 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2701 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2702
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2703 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2704 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2705 __glibcxx_function_requires(_LessThanOpConcept<_Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2706 __glibcxx_requires_partitioned_lower(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2707 __glibcxx_requires_partitioned_upper(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2708
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2709 _ForwardIterator __i = std::lower_bound(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2710 return __i != __last && !(__val < *__i);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2711 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2712
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2713 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2714 * @brief Determines whether an element exists in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2715 * @ingroup binary_search_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2716 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2717 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2718 * @param __val The search term.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2719 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2720 * @return True if @p __val (or its equivalent) is in @p [__first,__last].
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2721 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2722 * Note that this does not actually return an iterator to @p __val. For
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2723 * that, use std::find or a container's specialized find member functions.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2724 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2725 * The comparison function should have the same effects on ordering as
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2726 * the function used for the initial sort.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2727 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2728 template<typename _ForwardIterator, typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2729 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2730 binary_search(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2731 const _Tp& __val, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2732 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2733 typedef typename iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2734 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2735
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2736 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2737 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2738 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2739 _Tp, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2740 __glibcxx_requires_partitioned_lower_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2741 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2742 __glibcxx_requires_partitioned_upper_pred(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2743 __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2744
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2745 _ForwardIterator __i = std::lower_bound(__first, __last, __val, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2746 return __i != __last && !bool(__comp(__val, *__i));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2747 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2748
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2749 // merge
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2750
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2751 /// This is a helper function for the __merge_adaptive routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2752 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2753 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2754 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2755 __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2756 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2757 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2758 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2759 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2760 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2761 if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2762 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2763 *__result = _GLIBCXX_MOVE(*__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2764 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2765 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2766 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2767 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2768 *__result = _GLIBCXX_MOVE(*__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2769 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2770 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2771 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2772 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2773 if (__first1 != __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2774 _GLIBCXX_MOVE3(__first1, __last1, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2775 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2776
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2777 /// This is a helper function for the __merge_adaptive routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2778 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2779 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2780 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2781 __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2782 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2783 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2784 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2785 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2786 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2787 if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2788 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2789 *__result = _GLIBCXX_MOVE(*__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2790 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2791 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2792 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2793 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2794 *__result = _GLIBCXX_MOVE(*__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2795 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2796 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2797 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2798 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2799 if (__first1 != __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2800 _GLIBCXX_MOVE3(__first1, __last1, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2801 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2802
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2803 /// This is a helper function for the __merge_adaptive routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2804 template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2805 typename _BidirectionalIterator3>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2806 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2807 __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2808 _BidirectionalIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2809 _BidirectionalIterator2 __first2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2810 _BidirectionalIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2811 _BidirectionalIterator3 __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2812 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2813 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2814 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2815 _GLIBCXX_MOVE_BACKWARD3(__first2, __last2, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2816 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2817 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2818 else if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2819 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2820
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2821 --__last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2822 --__last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2823 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2824 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2825 if (*__last2 < *__last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2826 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2827 *--__result = _GLIBCXX_MOVE(*__last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2828 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2829 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2830 _GLIBCXX_MOVE_BACKWARD3(__first2, ++__last2, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2831 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2832 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2833 --__last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2834 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2835 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2836 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2837 *--__result = _GLIBCXX_MOVE(*__last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2838 if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2839 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2840 --__last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2841 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2842 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2843 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2844
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2845 /// This is a helper function for the __merge_adaptive routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2846 template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2847 typename _BidirectionalIterator3, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2848 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2849 __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2850 _BidirectionalIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2851 _BidirectionalIterator2 __first2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2852 _BidirectionalIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2853 _BidirectionalIterator3 __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2854 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2855 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2856 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2857 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2858 _GLIBCXX_MOVE_BACKWARD3(__first2, __last2, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2859 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2860 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2861 else if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2862 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2863
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2864 --__last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2865 --__last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2866 while (true)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2867 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2868 if (__comp(*__last2, *__last1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2869 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2870 *--__result = _GLIBCXX_MOVE(*__last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2871 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2872 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2873 _GLIBCXX_MOVE_BACKWARD3(__first2, ++__last2, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2874 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2875 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2876 --__last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2877 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2878 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2879 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2880 *--__result = _GLIBCXX_MOVE(*__last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2881 if (__first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2882 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2883 --__last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2884 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2885 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2886 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2887
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2888 /// This is a helper function for the merge routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2889 template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2890 typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2891 _BidirectionalIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2892 __rotate_adaptive(_BidirectionalIterator1 __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2893 _BidirectionalIterator1 __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2894 _BidirectionalIterator1 __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2895 _Distance __len1, _Distance __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2896 _BidirectionalIterator2 __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2897 _Distance __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2898 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2899 _BidirectionalIterator2 __buffer_end;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2900 if (__len1 > __len2 && __len2 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2901 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2902 if (__len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2903 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2904 __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2905 _GLIBCXX_MOVE_BACKWARD3(__first, __middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2906 return _GLIBCXX_MOVE3(__buffer, __buffer_end, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2907 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2908 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2909 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2910 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2911 else if (__len1 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2912 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2913 if (__len1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2914 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2915 __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2916 _GLIBCXX_MOVE3(__middle, __last, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2917 return _GLIBCXX_MOVE_BACKWARD3(__buffer, __buffer_end, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2918 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2919 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2920 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2921 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2922 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2923 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2924 std::rotate(__first, __middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2925 std::advance(__first, std::distance(__middle, __last));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2926 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2927 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2928 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2929
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2930 /// This is a helper function for the merge routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2931 template<typename _BidirectionalIterator, typename _Distance,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2932 typename _Pointer>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2933 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2934 __merge_adaptive(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2935 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2936 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2937 _Distance __len1, _Distance __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2938 _Pointer __buffer, _Distance __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2939 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2940 if (__len1 <= __len2 && __len1 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2941 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2942 _Pointer __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2943 std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2944 __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2945 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2946 else if (__len2 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2947 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2948 _Pointer __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2949 std::__move_merge_adaptive_backward(__first, __middle, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2950 __buffer_end, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2951 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2952 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2953 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2954 _BidirectionalIterator __first_cut = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2955 _BidirectionalIterator __second_cut = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2956 _Distance __len11 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2957 _Distance __len22 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2958 if (__len1 > __len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2959 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2960 __len11 = __len1 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2961 std::advance(__first_cut, __len11);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2962 __second_cut = std::lower_bound(__middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2963 *__first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2964 __len22 = std::distance(__middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2965 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2966 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2967 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2968 __len22 = __len2 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2969 std::advance(__second_cut, __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2970 __first_cut = std::upper_bound(__first, __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2971 *__second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2972 __len11 = std::distance(__first, __first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2973 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2974 _BidirectionalIterator __new_middle =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2975 std::__rotate_adaptive(__first_cut, __middle, __second_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2976 __len1 - __len11, __len22, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2977 __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2978 std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2979 __len22, __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2980 std::__merge_adaptive(__new_middle, __second_cut, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2981 __len1 - __len11,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2982 __len2 - __len22, __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2983 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2984 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2985
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2986 /// This is a helper function for the merge routines.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
2987 template<typename _BidirectionalIterator, typename _Distance,
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2988 typename _Pointer, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2989 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2990 __merge_adaptive(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2991 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2992 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2993 _Distance __len1, _Distance __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2994 _Pointer __buffer, _Distance __buffer_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2995 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2996 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2997 if (__len1 <= __len2 && __len1 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2998 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2999 _Pointer __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3000 std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3001 __first, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3002 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3003 else if (__len2 <= __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3004 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3005 _Pointer __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3006 std::__move_merge_adaptive_backward(__first, __middle, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3007 __buffer_end, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3008 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3009 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3010 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3011 _BidirectionalIterator __first_cut = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3012 _BidirectionalIterator __second_cut = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3013 _Distance __len11 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3014 _Distance __len22 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3015 if (__len1 > __len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3016 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3017 __len11 = __len1 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3018 std::advance(__first_cut, __len11);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3019 __second_cut = std::lower_bound(__middle, __last, *__first_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3020 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3021 __len22 = std::distance(__middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3022 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3023 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3024 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3025 __len22 = __len2 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3026 std::advance(__second_cut, __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3027 __first_cut = std::upper_bound(__first, __middle, *__second_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3028 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3029 __len11 = std::distance(__first, __first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3030 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3031 _BidirectionalIterator __new_middle =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3032 std::__rotate_adaptive(__first_cut, __middle, __second_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3033 __len1 - __len11, __len22, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3034 __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3035 std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3036 __len22, __buffer, __buffer_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3037 std::__merge_adaptive(__new_middle, __second_cut, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3038 __len1 - __len11,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3039 __len2 - __len22, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3040 __buffer_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3041 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3042 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3043
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3044 /// This is a helper function for the merge routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3045 template<typename _BidirectionalIterator, typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3046 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3047 __merge_without_buffer(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3048 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3049 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3050 _Distance __len1, _Distance __len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3051 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3052 if (__len1 == 0 || __len2 == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3053 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3054 if (__len1 + __len2 == 2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3055 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3056 if (*__middle < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3057 std::iter_swap(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3058 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3059 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3060 _BidirectionalIterator __first_cut = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3061 _BidirectionalIterator __second_cut = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3062 _Distance __len11 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3063 _Distance __len22 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3064 if (__len1 > __len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3065 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3066 __len11 = __len1 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3067 std::advance(__first_cut, __len11);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3068 __second_cut = std::lower_bound(__middle, __last, *__first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3069 __len22 = std::distance(__middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3070 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3071 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3072 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3073 __len22 = __len2 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3074 std::advance(__second_cut, __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3075 __first_cut = std::upper_bound(__first, __middle, *__second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3076 __len11 = std::distance(__first, __first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3077 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3078 std::rotate(__first_cut, __middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3079 _BidirectionalIterator __new_middle = __first_cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3080 std::advance(__new_middle, std::distance(__middle, __second_cut));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3081 std::__merge_without_buffer(__first, __first_cut, __new_middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3082 __len11, __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3083 std::__merge_without_buffer(__new_middle, __second_cut, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3084 __len1 - __len11, __len2 - __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3085 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3086
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3087 /// This is a helper function for the merge routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3088 template<typename _BidirectionalIterator, typename _Distance,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3089 typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3090 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3091 __merge_without_buffer(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3092 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3093 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3094 _Distance __len1, _Distance __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3095 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3096 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3097 if (__len1 == 0 || __len2 == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3098 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3099 if (__len1 + __len2 == 2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3100 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3101 if (__comp(*__middle, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3102 std::iter_swap(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3103 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3104 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3105 _BidirectionalIterator __first_cut = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3106 _BidirectionalIterator __second_cut = __middle;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3107 _Distance __len11 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3108 _Distance __len22 = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3109 if (__len1 > __len2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3110 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3111 __len11 = __len1 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3112 std::advance(__first_cut, __len11);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3113 __second_cut = std::lower_bound(__middle, __last, *__first_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3114 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3115 __len22 = std::distance(__middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3116 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3117 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3118 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3119 __len22 = __len2 / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3120 std::advance(__second_cut, __len22);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3121 __first_cut = std::upper_bound(__first, __middle, *__second_cut,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3122 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3123 __len11 = std::distance(__first, __first_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3124 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3125 std::rotate(__first_cut, __middle, __second_cut);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3126 _BidirectionalIterator __new_middle = __first_cut;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3127 std::advance(__new_middle, std::distance(__middle, __second_cut));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3128 std::__merge_without_buffer(__first, __first_cut, __new_middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3129 __len11, __len22, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3130 std::__merge_without_buffer(__new_middle, __second_cut, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3131 __len1 - __len11, __len2 - __len22, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3132 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3133
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3134 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3135 * @brief Merges two sorted ranges in place.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3136 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3137 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3138 * @param __middle Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3139 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3140 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3141 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3142 * Merges two sorted and consecutive ranges, [__first,__middle) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3143 * [__middle,__last), and puts the result in [__first,__last). The
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3144 * output will be sorted. The sort is @e stable, that is, for
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3145 * equivalent elements in the two ranges, elements from the first
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3146 * range will always come before elements from the second.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3147 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3148 * If enough additional memory is available, this takes (__last-__first)-1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3149 * comparisons. Otherwise an NlogN algorithm is used, where N is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3150 * distance(__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3151 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3152 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3153 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3154 inplace_merge(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3155 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3156 _BidirectionalIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3157 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3158 typedef typename iterator_traits<_BidirectionalIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3159 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3160 typedef typename iterator_traits<_BidirectionalIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3161 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3162
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3163 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3164 __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3165 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3166 __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3167 __glibcxx_requires_sorted(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3168 __glibcxx_requires_sorted(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3169
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3170 if (__first == __middle || __middle == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3171 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3172
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3173 _DistanceType __len1 = std::distance(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3174 _DistanceType __len2 = std::distance(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3175
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3176 _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3177 __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3178 if (__buf.begin() == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3179 std::__merge_without_buffer(__first, __middle, __last, __len1, __len2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3180 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3181 std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3182 __buf.begin(), _DistanceType(__buf.size()));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3183 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3184
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3185 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3186 * @brief Merges two sorted ranges in place.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3187 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3188 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3189 * @param __middle Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3190 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3191 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3192 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3193 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3194 * Merges two sorted and consecutive ranges, [__first,__middle) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3195 * [middle,last), and puts the result in [__first,__last). The output will
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3196 * be sorted. The sort is @e stable, that is, for equivalent
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3197 * elements in the two ranges, elements from the first range will always
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3198 * come before elements from the second.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3199 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3200 * If enough additional memory is available, this takes (__last-__first)-1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3201 * comparisons. Otherwise an NlogN algorithm is used, where N is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3202 * distance(__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3203 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3204 * The comparison function should have the same effects on ordering as
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3205 * the function used for the initial sort.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3206 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3207 template<typename _BidirectionalIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3208 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3209 inplace_merge(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3210 _BidirectionalIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3211 _BidirectionalIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3212 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3213 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3214 typedef typename iterator_traits<_BidirectionalIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3215 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3216 typedef typename iterator_traits<_BidirectionalIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3217 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3218
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3219 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3220 __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3221 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3222 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3223 _ValueType, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3224 __glibcxx_requires_sorted_pred(__first, __middle, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3225 __glibcxx_requires_sorted_pred(__middle, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3226
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3227 if (__first == __middle || __middle == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3228 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3229
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3230 const _DistanceType __len1 = std::distance(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3231 const _DistanceType __len2 = std::distance(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3232
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3233 _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3234 __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3235 if (__buf.begin() == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3236 std::__merge_without_buffer(__first, __middle, __last, __len1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3237 __len2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3238 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3239 std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3240 __buf.begin(), _DistanceType(__buf.size()),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3241 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3242 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3243
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3244
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3245 /// This is a helper function for the __merge_sort_loop routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3246 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3247 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3248 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3249 __move_merge(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3250 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3251 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3252 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3253 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3254 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3255 if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3256 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3257 *__result = _GLIBCXX_MOVE(*__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3258 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3259 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3260 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3261 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3262 *__result = _GLIBCXX_MOVE(*__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3263 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3264 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3265 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3266 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3267 return _GLIBCXX_MOVE3(__first2, __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3268 _GLIBCXX_MOVE3(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3269 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3270 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3271
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3272 /// This is a helper function for the __merge_sort_loop routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3273 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3274 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3275 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3276 __move_merge(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3277 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3278 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3279 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3280 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3281 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3282 if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3283 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3284 *__result = _GLIBCXX_MOVE(*__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3285 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3286 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3287 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3288 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3289 *__result = _GLIBCXX_MOVE(*__first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3290 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3291 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3292 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3293 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3294 return _GLIBCXX_MOVE3(__first2, __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3295 _GLIBCXX_MOVE3(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3296 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3297 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3298
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3299 template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3300 typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3301 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3302 __merge_sort_loop(_RandomAccessIterator1 __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3303 _RandomAccessIterator1 __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3304 _RandomAccessIterator2 __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3305 _Distance __step_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3306 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3307 const _Distance __two_step = 2 * __step_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3308
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3309 while (__last - __first >= __two_step)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3310 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3311 __result = std::__move_merge(__first, __first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3312 __first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3313 __first + __two_step, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3314 __first += __two_step;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3315 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3316
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3317 __step_size = std::min(_Distance(__last - __first), __step_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3318 std::__move_merge(__first, __first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3319 __first + __step_size, __last, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3320 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3321
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3322 template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3323 typename _Distance, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3324 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3325 __merge_sort_loop(_RandomAccessIterator1 __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3326 _RandomAccessIterator1 __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3327 _RandomAccessIterator2 __result, _Distance __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3328 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3329 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3330 const _Distance __two_step = 2 * __step_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3331
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3332 while (__last - __first >= __two_step)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3333 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3334 __result = std::__move_merge(__first, __first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3335 __first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3336 __first + __two_step,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3337 __result, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3338 __first += __two_step;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3339 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3340 __step_size = std::min(_Distance(__last - __first), __step_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3341
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3342 std::__move_merge(__first,__first + __step_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3343 __first + __step_size, __last, __result, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3344 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3345
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3346 template<typename _RandomAccessIterator, typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3347 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3348 __chunk_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3349 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3350 _Distance __chunk_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3351 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3352 while (__last - __first >= __chunk_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3353 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3354 std::__insertion_sort(__first, __first + __chunk_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3355 __first += __chunk_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3356 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3357 std::__insertion_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3358 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3359
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3360 template<typename _RandomAccessIterator, typename _Distance,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3361 typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3362 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3363 __chunk_insertion_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3364 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3365 _Distance __chunk_size, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3366 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3367 while (__last - __first >= __chunk_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3368 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3369 std::__insertion_sort(__first, __first + __chunk_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3370 __first += __chunk_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3371 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3372 std::__insertion_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3373 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3374
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3375 enum { _S_chunk_size = 7 };
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3376
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3377 template<typename _RandomAccessIterator, typename _Pointer>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3378 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3379 __merge_sort_with_buffer(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3380 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3381 _Pointer __buffer)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3382 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3383 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3384 _Distance;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3385
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3386 const _Distance __len = __last - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3387 const _Pointer __buffer_last = __buffer + __len;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3388
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3389 _Distance __step_size = _S_chunk_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3390 std::__chunk_insertion_sort(__first, __last, __step_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3391
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3392 while (__step_size < __len)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3393 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3394 std::__merge_sort_loop(__first, __last, __buffer, __step_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3395 __step_size *= 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3396 std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3397 __step_size *= 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3398 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3399 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3400
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3401 template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3402 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3403 __merge_sort_with_buffer(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3404 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3405 _Pointer __buffer, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3406 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3407 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3408 _Distance;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3409
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3410 const _Distance __len = __last - __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3411 const _Pointer __buffer_last = __buffer + __len;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3412
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3413 _Distance __step_size = _S_chunk_size;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3414 std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3415
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3416 while (__step_size < __len)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3417 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3418 std::__merge_sort_loop(__first, __last, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3419 __step_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3420 __step_size *= 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3421 std::__merge_sort_loop(__buffer, __buffer_last, __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3422 __step_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3423 __step_size *= 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3424 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3425 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3426
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3427 template<typename _RandomAccessIterator, typename _Pointer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3428 typename _Distance>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3429 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3430 __stable_sort_adaptive(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3431 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3432 _Pointer __buffer, _Distance __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3433 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3434 const _Distance __len = (__last - __first + 1) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3435 const _RandomAccessIterator __middle = __first + __len;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3436 if (__len > __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3437 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3438 std::__stable_sort_adaptive(__first, __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3439 __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3440 std::__stable_sort_adaptive(__middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3441 __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3442 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3443 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3444 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3445 std::__merge_sort_with_buffer(__first, __middle, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3446 std::__merge_sort_with_buffer(__middle, __last, __buffer);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3447 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3448 std::__merge_adaptive(__first, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3449 _Distance(__middle - __first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3450 _Distance(__last - __middle),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3451 __buffer, __buffer_size);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3452 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3453
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3454 template<typename _RandomAccessIterator, typename _Pointer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3455 typename _Distance, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3456 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3457 __stable_sort_adaptive(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3458 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3459 _Pointer __buffer, _Distance __buffer_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3460 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3461 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3462 const _Distance __len = (__last - __first + 1) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3463 const _RandomAccessIterator __middle = __first + __len;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3464 if (__len > __buffer_size)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3465 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3466 std::__stable_sort_adaptive(__first, __middle, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3467 __buffer_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3468 std::__stable_sort_adaptive(__middle, __last, __buffer,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3469 __buffer_size, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3470 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3471 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3472 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3473 std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3474 std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3475 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3476 std::__merge_adaptive(__first, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3477 _Distance(__middle - __first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3478 _Distance(__last - __middle),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3479 __buffer, __buffer_size,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3480 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3481 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3482
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3483 /// This is a helper function for the stable sorting routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3484 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3485 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3486 __inplace_stable_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3487 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3488 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3489 if (__last - __first < 15)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3490 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3491 std::__insertion_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3492 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3493 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3494 _RandomAccessIterator __middle = __first + (__last - __first) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3495 std::__inplace_stable_sort(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3496 std::__inplace_stable_sort(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3497 std::__merge_without_buffer(__first, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3498 __middle - __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3499 __last - __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3500 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3501
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3502 /// This is a helper function for the stable sorting routines.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3503 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3504 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3505 __inplace_stable_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3506 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3507 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3508 if (__last - __first < 15)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3509 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3510 std::__insertion_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3511 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3512 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3513 _RandomAccessIterator __middle = __first + (__last - __first) / 2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3514 std::__inplace_stable_sort(__first, __middle, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3515 std::__inplace_stable_sort(__middle, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3516 std::__merge_without_buffer(__first, __middle, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3517 __middle - __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3518 __last - __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3519 __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3520 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3521
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3522 // stable_sort
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3523
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3524 // Set algorithms: includes, set_union, set_intersection, set_difference,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3525 // set_symmetric_difference. All of these algorithms have the precondition
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3526 // that their input ranges are sorted and the postcondition that their output
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3527 // ranges are sorted.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3528
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3529 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3530 * @brief Determines whether all elements of a sequence exists in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3531 * @param __first1 Start of search range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3532 * @param __last1 End of search range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3533 * @param __first2 Start of sequence
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3534 * @param __last2 End of sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3535 * @return True if each element in [__first2,__last2) is contained in order
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3536 * within [__first1,__last1). False otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3537 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3538 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3539 * This operation expects both [__first1,__last1) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3540 * [__first2,__last2) to be sorted. Searches for the presence of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3541 * each element in [__first2,__last2) within [__first1,__last1).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3542 * The iterators over each range only move forward, so this is a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3543 * linear algorithm. If an element in [__first2,__last2) is not
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3544 * found before the search iterator reaches @p __last2, false is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3545 * returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3546 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3547 template<typename _InputIterator1, typename _InputIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3548 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3549 includes(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3550 _InputIterator2 __first2, _InputIterator2 __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3551 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3552 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3553 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3554 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3555 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3556
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3557 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3558 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3559 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3560 __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3561 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3562 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3563 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3564
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3565 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3566 if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3567 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3568 else if(*__first1 < *__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3569 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3570 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3571 ++__first1, ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3572
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3573 return __first2 == __last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3574 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3575
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3576 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3577 * @brief Determines whether all elements of a sequence exists in a range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3578 * using comparison.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3579 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3580 * @param __first1 Start of search range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3581 * @param __last1 End of search range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3582 * @param __first2 Start of sequence
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3583 * @param __last2 End of sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3584 * @param __comp Comparison function to use.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3585 * @return True if each element in [__first2,__last2) is contained
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3586 * in order within [__first1,__last1) according to comp. False
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3587 * otherwise. @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3588 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3589 * This operation expects both [__first1,__last1) and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3590 * [__first2,__last2) to be sorted. Searches for the presence of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3591 * each element in [__first2,__last2) within [__first1,__last1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3592 * using comp to decide. The iterators over each range only move
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3593 * forward, so this is a linear algorithm. If an element in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3594 * [__first2,__last2) is not found before the search iterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3595 * reaches @p __last2, false is returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3596 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3597 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3598 typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3599 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3600 includes(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3601 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3602 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3603 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3604 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3605 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3606 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3607 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3608
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3609 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3610 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3611 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3612 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3613 _ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3614 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3615 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3616 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3617 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3618
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3619 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3620 if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3621 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3622 else if(__comp(*__first1, *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3623 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3624 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3625 ++__first1, ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3626
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3627 return __first2 == __last2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3628 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3629
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3630 // nth_element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3631 // merge
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3632 // set_difference
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3633 // set_intersection
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3634 // set_union
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3635 // stable_sort
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3636 // set_symmetric_difference
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3637 // min_element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3638 // max_element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3639
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3640 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3641 * @brief Permute range into the next @e dictionary ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3642 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3643 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3644 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3645 * @return False if wrapped to first permutation, true otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3646 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3647 * Treats all permutations of the range as a set of @e dictionary sorted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3648 * sequences. Permutes the current sequence into the next one of this set.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3649 * Returns true if there are more sequences to generate. If the sequence
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3650 * is the largest of the set, the smallest is generated and false returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3651 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3652 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3653 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3654 next_permutation(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3655 _BidirectionalIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3656 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3657 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3658 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3659 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3660 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3661 typename iterator_traits<_BidirectionalIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3662 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3663
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3664 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3665 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3666 _BidirectionalIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3667 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3668 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3669 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3670 __i = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3671 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3672
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3673 for(;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3674 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3675 _BidirectionalIterator __ii = __i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3676 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3677 if (*__i < *__ii)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3678 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3679 _BidirectionalIterator __j = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3680 while (!(*__i < *--__j))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3681 {}
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3682 std::iter_swap(__i, __j);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3683 std::reverse(__ii, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3684 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3685 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3686 if (__i == __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3687 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3688 std::reverse(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3689 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3690 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3691 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3692 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3693
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3694 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3695 * @brief Permute range into the next @e dictionary ordering using
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3696 * comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3697 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3698 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3699 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3700 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3701 * @return False if wrapped to first permutation, true otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3702 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3703 * Treats all permutations of the range [__first,__last) as a set of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3704 * @e dictionary sorted sequences ordered by @p __comp. Permutes the current
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3705 * sequence into the next one of this set. Returns true if there are more
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3706 * sequences to generate. If the sequence is the largest of the set, the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3707 * smallest is generated and false returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3708 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3709 template<typename _BidirectionalIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3710 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3711 next_permutation(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3712 _BidirectionalIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3713 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3714 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3715 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3716 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3717 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3718 typename iterator_traits<_BidirectionalIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3719 typename iterator_traits<_BidirectionalIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3720 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3721
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3722 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3723 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3724 _BidirectionalIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3725 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3726 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3727 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3728 __i = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3729 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3730
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3731 for(;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3732 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3733 _BidirectionalIterator __ii = __i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3734 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3735 if (__comp(*__i, *__ii))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3736 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3737 _BidirectionalIterator __j = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3738 while (!bool(__comp(*__i, *--__j)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3739 {}
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3740 std::iter_swap(__i, __j);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3741 std::reverse(__ii, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3742 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3743 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3744 if (__i == __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3745 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3746 std::reverse(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3747 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3748 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3749 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3750 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3751
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3752 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3753 * @brief Permute range into the previous @e dictionary ordering.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3754 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3755 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3756 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3757 * @return False if wrapped to last permutation, true otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3758 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3759 * Treats all permutations of the range as a set of @e dictionary sorted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3760 * sequences. Permutes the current sequence into the previous one of this
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3761 * set. Returns true if there are more sequences to generate. If the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3762 * sequence is the smallest of the set, the largest is generated and false
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3763 * returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3764 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3765 template<typename _BidirectionalIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3766 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3767 prev_permutation(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3768 _BidirectionalIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3769 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3770 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3771 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3772 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3773 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3774 typename iterator_traits<_BidirectionalIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3775 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3776
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3777 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3778 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3779 _BidirectionalIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3780 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3781 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3782 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3783 __i = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3784 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3785
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3786 for(;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3787 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3788 _BidirectionalIterator __ii = __i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3789 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3790 if (*__ii < *__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3791 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3792 _BidirectionalIterator __j = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3793 while (!(*--__j < *__i))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3794 {}
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3795 std::iter_swap(__i, __j);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3796 std::reverse(__ii, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3797 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3798 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3799 if (__i == __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3800 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3801 std::reverse(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3802 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3803 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3804 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3805 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3806
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3807 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3808 * @brief Permute range into the previous @e dictionary ordering using
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3809 * comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3810 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3811 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3812 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3813 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3814 * @return False if wrapped to last permutation, true otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3815 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3816 * Treats all permutations of the range [__first,__last) as a set of
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3817 * @e dictionary sorted sequences ordered by @p __comp. Permutes the current
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3818 * sequence into the previous one of this set. Returns true if there are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3819 * more sequences to generate. If the sequence is the smallest of the set,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3820 * the largest is generated and false returned.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3821 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3822 template<typename _BidirectionalIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3823 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3824 prev_permutation(_BidirectionalIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3825 _BidirectionalIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3826 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3827 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3828 __glibcxx_function_requires(_BidirectionalIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3829 _BidirectionalIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3830 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3831 typename iterator_traits<_BidirectionalIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3832 typename iterator_traits<_BidirectionalIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3833 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3834
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3835 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3836 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3837 _BidirectionalIterator __i = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3838 ++__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3839 if (__i == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3840 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3841 __i = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3842 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3843
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3844 for(;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3845 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3846 _BidirectionalIterator __ii = __i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3847 --__i;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3848 if (__comp(*__ii, *__i))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3849 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3850 _BidirectionalIterator __j = __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3851 while (!bool(__comp(*--__j, *__i)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3852 {}
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3853 std::iter_swap(__i, __j);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3854 std::reverse(__ii, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3855 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3856 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3857 if (__i == __first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3858 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3859 std::reverse(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3860 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3861 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3862 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3863 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3864
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3865 // replace
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3866 // replace_if
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3867
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3868 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3869 * @brief Copy a sequence, replacing each element of one value with another
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3870 * value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3871 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3872 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3873 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3874 * @param __old_value The value to be replaced.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3875 * @param __new_value The replacement value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3876 * @return The end of the output sequence, @p result+(last-first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3877 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3878 * Copies each element in the input range @p [__first,__last) to the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3879 * output range @p [__result,__result+(__last-__first)) replacing elements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3880 * equal to @p __old_value with @p __new_value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3881 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3882 template<typename _InputIterator, typename _OutputIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3883 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3884 replace_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3885 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3886 const _Tp& __old_value, const _Tp& __new_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3887 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3888 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3889 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3890 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3891 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3892 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3893 typename iterator_traits<_InputIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3894 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3895
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3896 for (; __first != __last; ++__first, ++__result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3897 if (*__first == __old_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3898 *__result = __new_value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3899 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3900 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3901 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3902 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3903
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3904 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3905 * @brief Copy a sequence, replacing each value for which a predicate
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3906 * returns true with another value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3907 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3908 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3909 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3910 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3911 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3912 * @param __new_value The replacement value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3913 * @return The end of the output sequence, @p __result+(__last-__first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3914 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3915 * Copies each element in the range @p [__first,__last) to the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3916 * @p [__result,__result+(__last-__first)) replacing elements for which
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3917 * @p __pred returns true with @p __new_value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3918 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3919 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3920 typename _Predicate, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3921 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3922 replace_copy_if(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3923 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3924 _Predicate __pred, const _Tp& __new_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3925 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3926 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3927 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3928 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3929 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3930 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3931 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3932 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3933
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3934 for (; __first != __last; ++__first, ++__result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3935 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3936 *__result = __new_value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3937 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3938 *__result = *__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3939 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3940 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3941
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3942 #if __cplusplus >= 201103L
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3943 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3944 * @brief Determines whether the elements of a sequence are sorted.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3945 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3946 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3947 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3948 * @return True if the elements are sorted, false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3949 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3950 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3951 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3952 is_sorted(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3953 { return std::is_sorted_until(__first, __last) == __last; }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3954
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3955 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3956 * @brief Determines whether the elements of a sequence are sorted
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3957 * according to a comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3958 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3959 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3960 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3961 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3962 * @return True if the elements are sorted, false otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3963 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3964 template<typename _ForwardIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3965 inline bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3966 is_sorted(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3967 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3968 { return std::is_sorted_until(__first, __last, __comp) == __last; }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3969
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3970 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3971 * @brief Determines the end of a sorted sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3972 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3973 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3974 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3975 * @return An iterator pointing to the last iterator i in [__first, __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3976 * for which the range [__first, i) is sorted.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3977 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3978 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3979 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3980 is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3981 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3982 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3983 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3984 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3985 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3986 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3987
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3988 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3989 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3990
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3991 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3992 for (++__next; __next != __last; __first = __next, ++__next)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3993 if (*__next < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3994 return __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3995 return __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3996 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3997
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3998 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3999 * @brief Determines the end of a sorted sequence using comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4000 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4001 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4002 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4003 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4004 * @return An iterator pointing to the last iterator i in [__first, __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4005 * for which the range [__first, i) is sorted.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4006 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4007 template<typename _ForwardIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4008 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4009 is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4010 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4011 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4012 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4013 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4014 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4015 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4016 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4017 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4018
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4019 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4020 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4021
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4022 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4023 for (++__next; __next != __last; __first = __next, ++__next)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4024 if (__comp(*__next, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4025 return __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4026 return __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4027 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4028
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4029 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4030 * @brief Determines min and max at once as an ordered pair.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4031 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4032 * @param __a A thing of arbitrary type.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4033 * @param __b Another thing of arbitrary type.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4034 * @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4035 * __b) otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4036 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4037 template<typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4038 inline pair<const _Tp&, const _Tp&>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4039 minmax(const _Tp& __a, const _Tp& __b)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4040 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4041 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4042 __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4043
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4044 return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4045 : pair<const _Tp&, const _Tp&>(__a, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4046 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4047
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4048 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4049 * @brief Determines min and max at once as an ordered pair.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4050 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4051 * @param __a A thing of arbitrary type.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4052 * @param __b Another thing of arbitrary type.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4053 * @param __comp A @link comparison_functors comparison functor @endlink.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4054 * @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4055 * __b) otherwise.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4056 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4057 template<typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4058 inline pair<const _Tp&, const _Tp&>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4059 minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4060 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4061 return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4062 : pair<const _Tp&, const _Tp&>(__a, __b);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4063 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4064
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4065 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4066 * @brief Return a pair of iterators pointing to the minimum and maximum
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4067 * elements in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4068 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4069 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4070 * @param __last End of range.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
4071 * @return make_pair(m, M), where m is the first iterator i in
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4072 * [__first, __last) such that no other element in the range is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4073 * smaller, and where M is the last iterator i in [__first, __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4074 * such that no other element in the range is larger.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4075 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4076 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4077 pair<_ForwardIterator, _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4078 minmax_element(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4079 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4080 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4081 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4082 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4083 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4084 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4085
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4086 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4087 if (__first == __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4088 || ++__next == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4089 return std::make_pair(__first, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4090
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4091 _ForwardIterator __min, __max;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4092 if (*__next < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4093 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4094 __min = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4095 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4096 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4097 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4098 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4099 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4100 __max = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4101 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4102
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4103 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4104 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4105
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4106 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4107 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4108 __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4109 if (++__next == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4110 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4111 if (*__first < *__min)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4112 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4113 else if (!(*__first < *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4114 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4115 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4116 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4117
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4118 if (*__next < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4119 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4120 if (*__next < *__min)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4121 __min = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4122 if (!(*__first < *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4123 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4124 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4125 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4126 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4127 if (*__first < *__min)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4128 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4129 if (!(*__next < *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4130 __max = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4131 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4132
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4133 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4134 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4135 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4136
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4137 return std::make_pair(__min, __max);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4138 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4139
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4140 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4141 * @brief Return a pair of iterators pointing to the minimum and maximum
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4142 * elements in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4143 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4144 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4145 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4146 * @param __comp Comparison functor.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
4147 * @return make_pair(m, M), where m is the first iterator i in
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4148 * [__first, __last) such that no other element in the range is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4149 * smaller, and where M is the last iterator i in [__first, __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4150 * such that no other element in the range is larger.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4151 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4152 template<typename _ForwardIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4153 pair<_ForwardIterator, _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4154 minmax_element(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4155 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4156 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4157 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4158 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4159 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4160 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4161 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4162 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4163
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4164 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4165 if (__first == __last
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4166 || ++__next == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4167 return std::make_pair(__first, __first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4168
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4169 _ForwardIterator __min, __max;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4170 if (__comp(*__next, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4171 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4172 __min = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4173 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4174 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4175 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4176 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4177 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4178 __max = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4179 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4180
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4181 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4182 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4183
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4184 while (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4185 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4186 __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4187 if (++__next == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4188 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4189 if (__comp(*__first, *__min))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4190 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4191 else if (!__comp(*__first, *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4192 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4193 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4194 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4195
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4196 if (__comp(*__next, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4197 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4198 if (__comp(*__next, *__min))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4199 __min = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4200 if (!__comp(*__first, *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4201 __max = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4202 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4203 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4204 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4205 if (__comp(*__first, *__min))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4206 __min = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4207 if (!__comp(*__next, *__max))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4208 __max = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4209 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4210
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4211 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4212 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4213 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4214
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4215 return std::make_pair(__min, __max);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4216 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4217
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4218 // N2722 + DR 915.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4219 template<typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4220 inline _Tp
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4221 min(initializer_list<_Tp> __l)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4222 { return *std::min_element(__l.begin(), __l.end()); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4223
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4224 template<typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4225 inline _Tp
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4226 min(initializer_list<_Tp> __l, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4227 { return *std::min_element(__l.begin(), __l.end(), __comp); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4228
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4229 template<typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4230 inline _Tp
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4231 max(initializer_list<_Tp> __l)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4232 { return *std::max_element(__l.begin(), __l.end()); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4233
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4234 template<typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4235 inline _Tp
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4236 max(initializer_list<_Tp> __l, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4237 { return *std::max_element(__l.begin(), __l.end(), __comp); }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4238
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4239 template<typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4240 inline pair<_Tp, _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4241 minmax(initializer_list<_Tp> __l)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4242 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4243 pair<const _Tp*, const _Tp*> __p =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4244 std::minmax_element(__l.begin(), __l.end());
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4245 return std::make_pair(*__p.first, *__p.second);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4246 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4247
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4248 template<typename _Tp, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4249 inline pair<_Tp, _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4250 minmax(initializer_list<_Tp> __l, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4251 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4252 pair<const _Tp*, const _Tp*> __p =
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4253 std::minmax_element(__l.begin(), __l.end(), __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4254 return std::make_pair(*__p.first, *__p.second);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4255 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4256
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4257 /**
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
4258 * @brief Checks whether a permutation of the second sequence is equal
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4259 * to the first sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4260 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4261 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4262 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4263 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4264 * @return true if there exists a permutation of the elements in the range
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
4265 * [__first2, __first2 + (__last1 - __first1)), beginning with
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4266 * ForwardIterator2 begin, such that equal(__first1, __last1, begin)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4267 * returns true; otherwise, returns false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4268 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4269 template<typename _ForwardIterator1, typename _ForwardIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4270 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4271 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4272 _ForwardIterator2 __first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4273 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4274 // Efficiently compare identical prefixes: O(N) if sequences
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4275 // have the same elements in the same order.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4276 for (; __first1 != __last1; ++__first1, ++__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4277 if (!(*__first1 == *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4278 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4279
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4280 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4281 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4282
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4283 // Establish __last2 assuming equal ranges by iterating over the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4284 // rest of the list.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4285 _ForwardIterator2 __last2 = __first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4286 std::advance(__last2, std::distance(__first1, __last1));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4287 for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4288 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4289 if (__scan != _GLIBCXX_STD_A::find(__first1, __scan, *__scan))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4290 continue; // We've seen this one before.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4291
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4292 auto __matches = std::count(__first2, __last2, *__scan);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4293 if (0 == __matches
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4294 || std::count(__scan, __last1, *__scan) != __matches)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4295 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4296 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4297 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4298 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4299
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4300 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4301 * @brief Checks whether a permutation of the second sequence is equal
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4302 * to the first sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4303 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4304 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4305 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4306 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4307 * @param __pred A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4308 * @return true if there exists a permutation of the elements in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4309 * the range [__first2, __first2 + (__last1 - __first1)),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4310 * beginning with ForwardIterator2 begin, such that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4311 * equal(__first1, __last1, __begin, __pred) returns true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4312 * otherwise, returns false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4313 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4314 template<typename _ForwardIterator1, typename _ForwardIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4315 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4316 bool
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4317 is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4318 _ForwardIterator2 __first2, _BinaryPredicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4319 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4320 // Efficiently compare identical prefixes: O(N) if sequences
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4321 // have the same elements in the same order.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4322 for (; __first1 != __last1; ++__first1, ++__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4323 if (!bool(__pred(*__first1, *__first2)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4324 break;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4325
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4326 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4327 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4328
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4329 // Establish __last2 assuming equal ranges by iterating over the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4330 // rest of the list.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4331 _ForwardIterator2 __last2 = __first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4332 std::advance(__last2, std::distance(__first1, __last1));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4333 for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4334 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4335 using std::placeholders::_1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4336
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4337 if (__scan != _GLIBCXX_STD_A::find_if(__first1, __scan,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4338 std::bind(__pred, _1, *__scan)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4339 continue; // We've seen this one before.
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
4340
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4341 auto __matches = std::count_if(__first2, __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4342 std::bind(__pred, _1, *__scan));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4343 if (0 == __matches
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4344 || std::count_if(__scan, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4345 std::bind(__pred, _1, *__scan)) != __matches)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4346 return false;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4347 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4348 return true;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4349 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4350
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4351 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4352 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4353 * @brief Shuffle the elements of a sequence using a uniform random
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4354 * number generator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4355 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4356 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4357 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4358 * @param __g A UniformRandomNumberGenerator (26.5.1.3).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4359 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4360 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4361 * Reorders the elements in the range @p [__first,__last) using @p __g to
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4362 * provide random numbers.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4363 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4364 template<typename _RandomAccessIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4365 typename _UniformRandomNumberGenerator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4366 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4367 shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4368 _UniformRandomNumberGenerator&& __g)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4369 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4370 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4371 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4372 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4373 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4374
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4375 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4376 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4377
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4378 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4379 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4380
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4381 typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4382 typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4383 typedef typename __distr_type::param_type __p_type;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4384 __distr_type __d;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4385
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4386 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4387 std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4388 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4389 #endif
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4390
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4391 #endif // C++11
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4392
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4393 _GLIBCXX_END_NAMESPACE_VERSION
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4394
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4395 _GLIBCXX_BEGIN_NAMESPACE_ALGO
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4396
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4397 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4398 * @brief Apply a function to every element of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4399 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4400 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4401 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4402 * @param __f A unary function object.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4403 * @return @p __f (std::move(@p __f) in C++0x).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4404 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4405 * Applies the function object @p __f to each element in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4406 * @p [first,last). @p __f must not modify the order of the sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4407 * If @p __f has a return value it is ignored.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4408 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4409 template<typename _InputIterator, typename _Function>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4410 _Function
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4411 for_each(_InputIterator __first, _InputIterator __last, _Function __f)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4412 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4413 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4414 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4415 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4416 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4417 __f(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4418 return _GLIBCXX_MOVE(__f);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4419 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4420
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4421 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4422 * @brief Find the first occurrence of a value in a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4423 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4424 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4425 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4426 * @param __val The value to find.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4427 * @return The first iterator @c i in the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4428 * such that @c *i == @p __val, or @p __last if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4429 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4430 template<typename _InputIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4431 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4432 find(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4433 const _Tp& __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4434 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4435 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4436 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4437 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4438 typename iterator_traits<_InputIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4439 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4440 return std::__find(__first, __last, __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4441 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4442 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4443
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4444 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4445 * @brief Find the first element in a sequence for which a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4446 * predicate is true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4447 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4448 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4449 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4450 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4451 * @return The first iterator @c i in the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4452 * such that @p __pred(*i) is true, or @p __last if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4453 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4454 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4455 inline _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4456 find_if(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4457 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4458 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4459 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4460 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4461 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4462 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4463 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4464 return std::__find_if(__first, __last, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4465 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4466 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4467
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4468 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4469 * @brief Find element from a set in a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4470 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4471 * @param __first1 Start of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4472 * @param __last1 End of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4473 * @param __first2 Start of match candidates.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4474 * @param __last2 End of match candidates.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4475 * @return The first iterator @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4476 * @p [__first1,__last1) such that @c *i == @p *(i2) such that i2 is an
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4477 * iterator in [__first2,__last2), or @p __last1 if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4478 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4479 * Searches the range @p [__first1,__last1) for an element that is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4480 * equal to some element in the range [__first2,__last2). If
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4481 * found, returns an iterator in the range [__first1,__last1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4482 * otherwise returns @p __last1.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4483 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4484 template<typename _InputIterator, typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4485 _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4486 find_first_of(_InputIterator __first1, _InputIterator __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4487 _ForwardIterator __first2, _ForwardIterator __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4488 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4489 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4490 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4491 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4492 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4493 typename iterator_traits<_InputIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4494 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4495 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4496 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4497
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4498 for (; __first1 != __last1; ++__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4499 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4500 if (*__first1 == *__iter)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4501 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4502 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4503 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4504
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4505 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4506 * @brief Find element from a set in a sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4507 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4508 * @param __first1 Start of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4509 * @param __last1 End of range to search.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4510 * @param __first2 Start of match candidates.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4511 * @param __last2 End of match candidates.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4512 * @param __comp Predicate to use.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4513 * @return The first iterator @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4514 * @p [__first1,__last1) such that @c comp(*i, @p *(i2)) is true
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4515 * and i2 is an iterator in [__first2,__last2), or @p __last1 if no
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4516 * such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4517 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4518
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4519 * Searches the range @p [__first1,__last1) for an element that is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4520 * equal to some element in the range [__first2,__last2). If
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4521 * found, returns an iterator in the range [__first1,__last1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4522 * otherwise returns @p __last1.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4523 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4524 template<typename _InputIterator, typename _ForwardIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4525 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4526 _InputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4527 find_first_of(_InputIterator __first1, _InputIterator __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4528 _ForwardIterator __first2, _ForwardIterator __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4529 _BinaryPredicate __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4530 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4531 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4532 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4533 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4534 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4535 typename iterator_traits<_InputIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4536 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4537 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4538 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4539
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4540 for (; __first1 != __last1; ++__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4541 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4542 if (__comp(*__first1, *__iter))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4543 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4544 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4545 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4546
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4547 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4548 * @brief Find two adjacent values in a sequence that are equal.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4549 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4550 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4551 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4552 * @return The first iterator @c i such that @c i and @c i+1 are both
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4553 * valid iterators in @p [__first,__last) and such that @c *i == @c *(i+1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4554 * or @p __last if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4555 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4556 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4557 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4558 adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4559 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4560 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4561 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4562 __glibcxx_function_requires(_EqualityComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4563 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4564 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4565 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4566 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4567 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4568 while(++__next != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4569 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4570 if (*__first == *__next)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4571 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4572 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4573 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4574 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4575 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4576
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4577 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4578 * @brief Find two adjacent values in a sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4579 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4580 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4581 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4582 * @param __binary_pred A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4583 * @return The first iterator @c i such that @c i and @c i+1 are both
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4584 * valid iterators in @p [__first,__last) and such that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4585 * @p __binary_pred(*i,*(i+1)) is true, or @p __last if no such iterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4586 * exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4587 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4588 template<typename _ForwardIterator, typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4589 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4590 adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4591 _BinaryPredicate __binary_pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4592 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4593 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4594 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4595 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4596 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4597 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4598 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4599 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4600 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4601 _ForwardIterator __next = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4602 while(++__next != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4603 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4604 if (__binary_pred(*__first, *__next))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4605 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4606 __first = __next;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4607 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4608 return __last;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4609 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4610
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4611 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4612 * @brief Count the number of copies of a value in a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4613 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4614 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4615 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4616 * @param __value The value to be counted.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4617 * @return The number of iterators @c i in the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4618 * for which @c *i == @p __value
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4619 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4620 template<typename _InputIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4621 typename iterator_traits<_InputIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4622 count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4623 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4624 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4625 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4626 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4627 typename iterator_traits<_InputIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4628 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4629 typename iterator_traits<_InputIterator>::difference_type __n = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4630 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4631 if (*__first == __value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4632 ++__n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4633 return __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4634 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4635
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4636 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4637 * @brief Count the elements of a sequence for which a predicate is true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4638 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4639 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4640 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4641 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4642 * @return The number of iterators @c i in the range @p [__first,__last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4643 * for which @p __pred(*i) is true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4644 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4645 template<typename _InputIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4646 typename iterator_traits<_InputIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4647 count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4648 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4649 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4650 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4651 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4652 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4653 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4654 typename iterator_traits<_InputIterator>::difference_type __n = 0;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4655 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4656 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4657 ++__n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4658 return __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4659 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4660
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4661 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4662 * @brief Search a sequence for a matching sub-sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4663 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4664 * @param __first1 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4665 * @param __last1 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4666 * @param __first2 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4667 * @param __last2 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4668 * @return The first iterator @c i in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4669 * [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4670 * *(__first2+N) for each @c N in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4671 * [0,__last2-__first2), or @p __last1 if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4672 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4673 * Searches the range @p [__first1,__last1) for a sub-sequence that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4674 * compares equal value-by-value with the sequence given by @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4675 * [__first2,__last2) and returns an iterator to the first element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4676 * of the sub-sequence, or @p __last1 if the sub-sequence is not
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4677 * found.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4678 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4679 * Because the sub-sequence must lie completely within the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4680 * [__first1,__last1) it must start at a position less than @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4681 * __last1-(__last2-__first2) where @p __last2-__first2 is the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4682 * length of the sub-sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4683 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4684 * This means that the returned iterator @c i will be in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4685 * @p [__first1,__last1-(__last2-__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4686 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4687 template<typename _ForwardIterator1, typename _ForwardIterator2>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4688 _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4689 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4690 _ForwardIterator2 __first2, _ForwardIterator2 __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4691 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4692 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4693 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4694 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4695 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4696 typename iterator_traits<_ForwardIterator1>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4697 typename iterator_traits<_ForwardIterator2>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4698 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4699 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4700
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4701 // Test for empty ranges
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4702 if (__first1 == __last1 || __first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4703 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4704
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4705 // Test for a pattern of length 1.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4706 _ForwardIterator2 __p1(__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4707 if (++__p1 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4708 return _GLIBCXX_STD_A::find(__first1, __last1, *__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4709
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4710 // General case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4711 _ForwardIterator2 __p;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4712 _ForwardIterator1 __current = __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4713
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4714 for (;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4715 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4716 __first1 = _GLIBCXX_STD_A::find(__first1, __last1, *__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4717 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4718 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4719
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4720 __p = __p1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4721 __current = __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4722 if (++__current == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4723 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4724
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4725 while (*__current == *__p)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4726 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4727 if (++__p == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4728 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4729 if (++__current == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4730 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4731 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4732 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4733 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4734 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4735 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4736
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4737 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4738 * @brief Search a sequence for a matching sub-sequence using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4739 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4740 * @param __first1 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4741 * @param __last1 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4742 * @param __first2 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4743 * @param __last2 A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4744 * @param __predicate A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4745 * @return The first iterator @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4746 * @p [__first1,__last1-(__last2-__first2)) such that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4747 * @p __predicate(*(i+N),*(__first2+N)) is true for each @c N in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4748 * @p [0,__last2-__first2), or @p __last1 if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4749 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4750 * Searches the range @p [__first1,__last1) for a sub-sequence that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4751 * compares equal value-by-value with the sequence given by @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4752 * [__first2,__last2), using @p __predicate to determine equality,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4753 * and returns an iterator to the first element of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4754 * sub-sequence, or @p __last1 if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4755 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4756 * @see search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4757 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4758 template<typename _ForwardIterator1, typename _ForwardIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4759 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4760 _ForwardIterator1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4761 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4762 _ForwardIterator2 __first2, _ForwardIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4763 _BinaryPredicate __predicate)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4764 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4765 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4766 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4767 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4768 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4769 typename iterator_traits<_ForwardIterator1>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4770 typename iterator_traits<_ForwardIterator2>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4771 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4772 __glibcxx_requires_valid_range(__first2, __last2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4773
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4774 // Test for empty ranges
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4775 if (__first1 == __last1 || __first2 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4776 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4777
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4778 // Test for a pattern of length 1.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4779 _ForwardIterator2 __p1(__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4780 if (++__p1 == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4781 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4782 while (__first1 != __last1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4783 && !bool(__predicate(*__first1, *__first2)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4784 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4785 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4786 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4787
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4788 // General case.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4789 _ForwardIterator2 __p;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4790 _ForwardIterator1 __current = __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4791
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4792 for (;;)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4793 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4794 while (__first1 != __last1
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4795 && !bool(__predicate(*__first1, *__first2)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4796 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4797 if (__first1 == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4798 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4799
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4800 __p = __p1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4801 __current = __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4802 if (++__current == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4803 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4804
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4805 while (__predicate(*__current, *__p))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4806 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4807 if (++__p == __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4808 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4809 if (++__current == __last1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4810 return __last1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4811 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4812 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4813 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4814 return __first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4815 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4816
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4817
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4818 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4819 * @brief Search a sequence for a number of consecutive values.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4820 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4821 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4822 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4823 * @param __count The number of consecutive values.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4824 * @param __val The value to find.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4825 * @return The first iterator @c i in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4826 * [__first,__last-__count) such that @c *(i+N) == @p __val for
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4827 * each @c N in the range @p [0,__count), or @p __last if no such
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4828 * iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4829 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4830 * Searches the range @p [__first,__last) for @p count consecutive elements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4831 * equal to @p __val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4832 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4833 template<typename _ForwardIterator, typename _Integer, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4834 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4835 search_n(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4836 _Integer __count, const _Tp& __val)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4837 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4838 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4839 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4840 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4841 typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4842 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4843
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4844 if (__count <= 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4845 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4846 if (__count == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4847 return _GLIBCXX_STD_A::find(__first, __last, __val);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4848 return std::__search_n(__first, __last, __count, __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4849 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4850 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4851
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4852
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4853 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4854 * @brief Search a sequence for a number of consecutive values using a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4855 * predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4856 * @ingroup non_mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4857 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4858 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4859 * @param __count The number of consecutive values.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4860 * @param __val The value to find.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4861 * @param __binary_pred A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4862 * @return The first iterator @c i in the range @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4863 * [__first,__last-__count) such that @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4864 * __binary_pred(*(i+N),__val) is true for each @c N in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4865 * @p [0,__count), or @p __last if no such iterator exists.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4866 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4867 * Searches the range @p [__first,__last) for @p __count
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4868 * consecutive elements for which the predicate returns true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4869 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4870 template<typename _ForwardIterator, typename _Integer, typename _Tp,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4871 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4872 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4873 search_n(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4874 _Integer __count, const _Tp& __val,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4875 _BinaryPredicate __binary_pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4876 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4877 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4878 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4879 __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4880 typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4881 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4882
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4883 if (__count <= 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4884 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4885 if (__count == 1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4886 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4887 while (__first != __last && !bool(__binary_pred(*__first, __val)))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4888 ++__first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4889 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4890 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4891 return std::__search_n(__first, __last, __count, __val, __binary_pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4892 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4893 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4894
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4895
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4896 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4897 * @brief Perform an operation on a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4898 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4899 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4900 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4901 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4902 * @param __unary_op A unary operator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4903 * @return An output iterator equal to @p __result+(__last-__first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4904 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4905 * Applies the operator to each element in the input range and assigns
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4906 * the results to successive elements of the output sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4907 * Evaluates @p *(__result+N)=unary_op(*(__first+N)) for each @c N in the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4908 * range @p [0,__last-__first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4909 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4910 * @p unary_op must not alter its argument.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4911 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4912 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4913 typename _UnaryOperation>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4914 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4915 transform(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4916 _OutputIterator __result, _UnaryOperation __unary_op)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4917 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4918 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4919 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4920 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4921 // "the type returned by a _UnaryOperation"
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4922 __typeof__(__unary_op(*__first))>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4923 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4924
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4925 for (; __first != __last; ++__first, ++__result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4926 *__result = __unary_op(*__first);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4927 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4928 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4929
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4930 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4931 * @brief Perform an operation on corresponding elements of two sequences.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4932 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4933 * @param __first1 An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4934 * @param __last1 An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4935 * @param __first2 An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4936 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4937 * @param __binary_op A binary operator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4938 * @return An output iterator equal to @p result+(last-first).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4939 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4940 * Applies the operator to the corresponding elements in the two
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4941 * input ranges and assigns the results to successive elements of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4942 * output sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4943 * Evaluates @p
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4944 * *(__result+N)=__binary_op(*(__first1+N),*(__first2+N)) for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4945 * @c N in the range @p [0,__last1-__first1).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4946 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4947 * @p binary_op must not alter either of its arguments.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4948 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4949 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4950 typename _OutputIterator, typename _BinaryOperation>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4951 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4952 transform(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4953 _InputIterator2 __first2, _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4954 _BinaryOperation __binary_op)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4955 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4956 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4957 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4958 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4959 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4960 // "the type returned by a _BinaryOperation"
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4961 __typeof__(__binary_op(*__first1,*__first2))>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4962 __glibcxx_requires_valid_range(__first1, __last1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4963
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4964 for (; __first1 != __last1; ++__first1, ++__first2, ++__result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4965 *__result = __binary_op(*__first1, *__first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4966 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4967 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4968
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4969 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4970 * @brief Replace each occurrence of one value in a sequence with another
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4971 * value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4972 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4973 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4974 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4975 * @param __old_value The value to be replaced.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4976 * @param __new_value The replacement value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4977 * @return replace() returns no value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4978 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4979 * For each iterator @c i in the range @p [__first,__last) if @c *i ==
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4980 * @p __old_value then the assignment @c *i = @p __new_value is performed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4981 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4982 template<typename _ForwardIterator, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4983 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4984 replace(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4985 const _Tp& __old_value, const _Tp& __new_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4986 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4987 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4988 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4989 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4990 __glibcxx_function_requires(_EqualOpConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4991 typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4992 __glibcxx_function_requires(_ConvertibleConcept<_Tp,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4993 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4994 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4995
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4996 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4997 if (*__first == __old_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4998 *__first = __new_value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4999 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5000
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5001 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5002 * @brief Replace each value in a sequence for which a predicate returns
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5003 * true with another value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5004 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5005 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5006 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5007 * @param __pred A predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5008 * @param __new_value The replacement value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5009 * @return replace_if() returns no value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5010 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5011 * For each iterator @c i in the range @p [__first,__last) if @p __pred(*i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5012 * is true then the assignment @c *i = @p __new_value is performed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5013 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5014 template<typename _ForwardIterator, typename _Predicate, typename _Tp>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5015 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5016 replace_if(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5017 _Predicate __pred, const _Tp& __new_value)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5018 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5019 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5020 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5021 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5022 __glibcxx_function_requires(_ConvertibleConcept<_Tp,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5023 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5024 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5025 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5026 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5027
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5028 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5029 if (__pred(*__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5030 *__first = __new_value;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5031 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5032
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5033 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5034 * @brief Assign the result of a function object to each value in a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5035 * sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5036 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5037 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5038 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5039 * @param __gen A function object taking no arguments and returning
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5040 * std::iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5041 * @return generate() returns no value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5042 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5043 * Performs the assignment @c *i = @p __gen() for each @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5044 * @p [__first,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5045 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5046 template<typename _ForwardIterator, typename _Generator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5047 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5048 generate(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5049 _Generator __gen)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5050 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5051 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5052 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5053 __glibcxx_function_requires(_GeneratorConcept<_Generator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5054 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5055 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5056
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5057 for (; __first != __last; ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5058 *__first = __gen();
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5059 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5060
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5061 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5062 * @brief Assign the result of a function object to each value in a
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5063 * sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5064 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5065 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5066 * @param __n The length of the sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5067 * @param __gen A function object taking no arguments and returning
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5068 * std::iterator_traits<_ForwardIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5069 * @return The end of the sequence, @p __first+__n
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5070 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5071 * Performs the assignment @c *i = @p __gen() for each @c i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5072 * @p [__first,__first+__n).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5073 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5074 * _GLIBCXX_RESOLVE_LIB_DEFECTS
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5075 * DR 865. More algorithms that throw away information
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5076 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5077 template<typename _OutputIterator, typename _Size, typename _Generator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5078 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5079 generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5080 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5081 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5082 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5083 // "the type returned by a _Generator"
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5084 __typeof__(__gen())>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5085
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5086 for (__decltype(__n + 0) __niter = __n;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5087 __niter > 0; --__niter, ++__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5088 *__first = __gen();
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5089 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5090 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5091
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5092
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5093 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5094 * @brief Copy a sequence, removing consecutive duplicate values.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5095 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5096 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5097 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5098 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5099 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5100 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5101 * Copies each element in the range @p [__first,__last) to the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5102 * beginning at @p __result, except that only the first element is copied
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5103 * from groups of consecutive elements that compare equal.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5104 * unique_copy() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5105 * copied is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5106 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5107 * _GLIBCXX_RESOLVE_LIB_DEFECTS
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5108 * DR 241. Does unique_copy() require CopyConstructible and Assignable?
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
5109 *
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5110 * _GLIBCXX_RESOLVE_LIB_DEFECTS
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
5111 * DR 538. 241 again: Does unique_copy() require CopyConstructible and
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5112 * Assignable?
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5113 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5114 template<typename _InputIterator, typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5115 inline _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5116 unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5117 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5118 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5119 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5120 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5121 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5122 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5123 __glibcxx_function_requires(_EqualityComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5124 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5125 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5126
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5127 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5128 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5129 return std::__unique_copy(__first, __last, __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5130 std::__iterator_category(__first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5131 std::__iterator_category(__result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5132 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5133
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5134 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5135 * @brief Copy a sequence, removing consecutive values using a predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5136 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5137 * @param __first An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5138 * @param __last An input iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5139 * @param __result An output iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5140 * @param __binary_pred A binary predicate.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5141 * @return An iterator designating the end of the resulting sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5142 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5143 * Copies each element in the range @p [__first,__last) to the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5144 * beginning at @p __result, except that only the first element is copied
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5145 * from groups of consecutive elements for which @p __binary_pred returns
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5146 * true.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5147 * unique_copy() is stable, so the relative order of elements that are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5148 * copied is unchanged.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5149 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5150 * _GLIBCXX_RESOLVE_LIB_DEFECTS
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5151 * DR 241. Does unique_copy() require CopyConstructible and Assignable?
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5152 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5153 template<typename _InputIterator, typename _OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5154 typename _BinaryPredicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5155 inline _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5156 unique_copy(_InputIterator __first, _InputIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5157 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5158 _BinaryPredicate __binary_pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5159 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5160 // concept requirements -- predicates checked later
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5161 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5162 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5163 typename iterator_traits<_InputIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5164 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5165
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5166 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5167 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5168 return std::__unique_copy(__first, __last, __result, __binary_pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5169 std::__iterator_category(__first),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5170 std::__iterator_category(__result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5171 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5172
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5173
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5174 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5175 * @brief Randomly shuffle the elements of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5176 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5177 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5178 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5179 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5180 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5181 * Reorder the elements in the range @p [__first,__last) using a random
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5182 * distribution, so that every possible ordering of the sequence is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5183 * equally likely.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5184 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5185 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5186 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5187 random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5188 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5189 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5190 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5191 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5192 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5193
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5194 if (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5195 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5196 std::iter_swap(__i, __first + (std::rand() % ((__i - __first) + 1)));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5197 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5198
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5199 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5200 * @brief Shuffle the elements of a sequence using a random number
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5201 * generator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5202 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5203 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5204 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5205 * @param __rand The RNG functor or function.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5206 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5207 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5208 * Reorders the elements in the range @p [__first,__last) using @p __rand to
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5209 * provide a random distribution. Calling @p __rand(N) for a positive
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5210 * integer @p N should return a randomly chosen integer from the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5211 * range [0,N).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5212 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5213 template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5214 void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5215 random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5216 #if __cplusplus >= 201103L
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5217 _RandomNumberGenerator&& __rand)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5218 #else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5219 _RandomNumberGenerator& __rand)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5220 #endif
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5221 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5222 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5223 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5224 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5225 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5226
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5227 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5228 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5229 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5230 std::iter_swap(__i, __first + __rand((__i - __first) + 1));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5231 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5232
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5233
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5234 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5235 * @brief Move elements for which a predicate is true to the beginning
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5236 * of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5237 * @ingroup mutating_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5238 * @param __first A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5239 * @param __last A forward iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5240 * @param __pred A predicate functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5241 * @return An iterator @p middle such that @p __pred(i) is true for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5242 * iterator @p i in the range @p [__first,middle) and false for each @p i
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5243 * in the range @p [middle,__last).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5244 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5245 * @p __pred must not modify its operand. @p partition() does not preserve
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5246 * the relative ordering of elements in each group, use
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5247 * @p stable_partition() if this is needed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5248 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5249 template<typename _ForwardIterator, typename _Predicate>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5250 inline _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5251 partition(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5252 _Predicate __pred)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5253 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5254 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5255 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5256 _ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5257 __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5258 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5259 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5260
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5261 return std::__partition(__first, __last, __pred,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5262 std::__iterator_category(__first));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5263 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5264
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5265 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5266 * @brief Sort the smallest elements of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5267 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5268 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5269 * @param __middle Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5270 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5271 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5272 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5273 * Sorts the smallest @p (__middle-__first) elements in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5274 * @p [first,last) and moves them to the range @p [__first,__middle). The
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5275 * order of the remaining elements in the range @p [__middle,__last) is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5276 * undefined.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5277 * After the sort if @e i and @e j are iterators in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5278 * @p [__first,__middle) such that i precedes j and @e k is an iterator in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5279 * the range @p [__middle,__last) then *j<*i and *k<*i are both false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5280 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5281 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5282 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5283 partial_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5284 _RandomAccessIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5285 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5286 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5287 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5288 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5289
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5290 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5291 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5292 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5293 __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5294 __glibcxx_requires_valid_range(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5295 __glibcxx_requires_valid_range(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5296
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5297 std::__heap_select(__first, __middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5298 std::sort_heap(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5299 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5300
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5301 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5302 * @brief Sort the smallest elements of a sequence using a predicate
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5303 * for comparison.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5304 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5305 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5306 * @param __middle Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5307 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5308 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5309 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5310 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5311 * Sorts the smallest @p (__middle-__first) elements in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5312 * @p [__first,__last) and moves them to the range @p [__first,__middle). The
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5313 * order of the remaining elements in the range @p [__middle,__last) is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5314 * undefined.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5315 * After the sort if @e i and @e j are iterators in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5316 * @p [__first,__middle) such that i precedes j and @e k is an iterator in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5317 * the range @p [__middle,__last) then @p *__comp(j,*i) and @p __comp(*k,*i)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5318 * are both false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5319 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5320 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5321 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5322 partial_sort(_RandomAccessIterator __first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5323 _RandomAccessIterator __middle,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5324 _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5325 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5326 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5327 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5328 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5329
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5330 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5331 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5332 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5333 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5334 _ValueType, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5335 __glibcxx_requires_valid_range(__first, __middle);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5336 __glibcxx_requires_valid_range(__middle, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5337
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5338 std::__heap_select(__first, __middle, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5339 std::sort_heap(__first, __middle, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5340 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5341
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5342 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5343 * @brief Sort a sequence just enough to find a particular position.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5344 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5345 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5346 * @param __nth Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5347 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5348 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5349 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5350 * Rearranges the elements in the range @p [__first,__last) so that @p *__nth
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5351 * is the same element that would have been in that position had the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5352 * whole sequence been sorted. The elements either side of @p *__nth are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5353 * not completely sorted, but for any iterator @e i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5354 * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5355 * holds that *j < *i is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5356 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5357 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5358 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5359 nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5360 _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5361 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5362 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5363 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5364
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5365 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5366 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5367 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5368 __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5369 __glibcxx_requires_valid_range(__first, __nth);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5370 __glibcxx_requires_valid_range(__nth, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5371
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5372 if (__first == __last || __nth == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5373 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5374
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5375 std::__introselect(__first, __nth, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5376 std::__lg(__last - __first) * 2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5377 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5378
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5379 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5380 * @brief Sort a sequence just enough to find a particular position
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5381 * using a predicate for comparison.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5382 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5383 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5384 * @param __nth Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5385 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5386 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5387 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5388 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5389 * Rearranges the elements in the range @p [__first,__last) so that @p *__nth
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5390 * is the same element that would have been in that position had the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5391 * whole sequence been sorted. The elements either side of @p *__nth are
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5392 * not completely sorted, but for any iterator @e i in the range
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5393 * @p [__first,__nth) and any iterator @e j in the range @p [__nth,__last) it
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5394 * holds that @p __comp(*j,*i) is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5395 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5396 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5397 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5398 nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5399 _RandomAccessIterator __last, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5400 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5401 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5402 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5403
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5404 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5405 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5406 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5407 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5408 _ValueType, _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5409 __glibcxx_requires_valid_range(__first, __nth);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5410 __glibcxx_requires_valid_range(__nth, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5411
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5412 if (__first == __last || __nth == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5413 return;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5414
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5415 std::__introselect(__first, __nth, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5416 std::__lg(__last - __first) * 2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5417 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5418
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5419
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5420 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5421 * @brief Sort the elements of a sequence.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5422 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5423 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5424 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5425 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5426 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5427 * Sorts the elements in the range @p [__first,__last) in ascending order,
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
5428 * such that for each iterator @e i in the range @p [__first,__last-1),
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5429 * *(i+1)<*i is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5430 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5431 * The relative ordering of equivalent elements is not preserved, use
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5432 * @p stable_sort() if this is needed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5433 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5434 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5435 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5436 sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5437 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5438 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5439 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5440
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5441 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5442 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5443 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5444 __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5445 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5446
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5447 if (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5448 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5449 std::__introsort_loop(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5450 std::__lg(__last - __first) * 2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5451 std::__final_insertion_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5452 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5453 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5454
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5455 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5456 * @brief Sort the elements of a sequence using a predicate for comparison.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5457 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5458 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5459 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5460 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5461 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5462 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5463 * Sorts the elements in the range @p [__first,__last) in ascending order,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5464 * such that @p __comp(*(i+1),*i) is false for every iterator @e i in the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5465 * range @p [__first,__last-1).
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5466 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5467 * The relative ordering of equivalent elements is not preserved, use
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5468 * @p stable_sort() if this is needed.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5469 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5470 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5471 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5472 sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5473 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5474 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5475 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5476 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5477
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5478 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5479 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5480 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5481 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare, _ValueType,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5482 _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5483 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5484
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5485 if (__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5486 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5487 std::__introsort_loop(__first, __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5488 std::__lg(__last - __first) * 2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5489 std::__final_insertion_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5490 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5491 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5492
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5493 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5494 * @brief Merges two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5495 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5496 * @param __first1 An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5497 * @param __first2 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5498 * @param __last1 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5499 * @param __last2 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5500 * @param __result An iterator pointing to the end of the merged range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5501 * @return An iterator pointing to the first element <em>not less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5502 * than</em> @e val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5503 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5504 * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5505 * the sorted range @p [__result, __result + (__last1-__first1) +
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5506 * (__last2-__first2)). Both input ranges must be sorted, and the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5507 * output range must not overlap with either of the input ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5508 * The sort is @e stable, that is, for equivalent elements in the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5509 * two ranges, elements from the first range will always come
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5510 * before elements from the second.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5511 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5512 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5513 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5514 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5515 merge(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5516 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5517 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5518 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5519 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5520 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5521 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5522 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5523
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5524 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5525 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5526 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5527 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5528 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5529 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5530 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5531 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5532 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5533 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5534
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5535 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5536 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5537 if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5538 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5539 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5540 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5541 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5542 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5543 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5544 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5545 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5546 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5547 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5548 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5549 return std::copy(__first2, __last2, std::copy(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5550 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5551 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5552
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5553 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5554 * @brief Merges two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5555 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5556 * @param __first1 An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5557 * @param __first2 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5558 * @param __last1 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5559 * @param __last2 Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5560 * @param __result An iterator pointing to the end of the merged range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5561 * @param __comp A functor to use for comparisons.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5562 * @return An iterator pointing to the first element "not less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5563 * than" @e val.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5564 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5565 * Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5566 * the sorted range @p [__result, __result + (__last1-__first1) +
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5567 * (__last2-__first2)). Both input ranges must be sorted, and the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5568 * output range must not overlap with either of the input ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5569 * The sort is @e stable, that is, for equivalent elements in the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5570 * two ranges, elements from the first range will always come
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5571 * before elements from the second.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5572 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5573 * The comparison function should have the same effects on ordering as
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5574 * the function used for the initial sort.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5575 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5576 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5577 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5578 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5579 merge(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5580 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5581 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5582 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5583 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5584 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5585 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5586 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5587
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5588 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5589 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5590 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5591 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5592 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5593 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5594 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5595 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5596 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5597 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5598 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5599
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5600 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5601 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5602 if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5603 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5604 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5605 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5606 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5607 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5608 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5609 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5610 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5611 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5612 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5613 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5614 return std::copy(__first2, __last2, std::copy(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5615 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5616 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5617
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5618
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5619 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5620 * @brief Sort the elements of a sequence, preserving the relative order
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5621 * of equivalent elements.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5622 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5623 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5624 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5625 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5626 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5627 * Sorts the elements in the range @p [__first,__last) in ascending order,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5628 * such that for each iterator @p i in the range @p [__first,__last-1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5629 * @p *(i+1)<*i is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5630 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5631 * The relative ordering of equivalent elements is preserved, so any two
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5632 * elements @p x and @p y in the range @p [__first,__last) such that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5633 * @p x<y is false and @p y<x is false will have the same relative
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5634 * ordering after calling @p stable_sort().
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5635 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5636 template<typename _RandomAccessIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5637 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5638 stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5639 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5640 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5641 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5642 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5643 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5644
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5645 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5646 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5647 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5648 __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5649 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5650
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5651 _Temporary_buffer<_RandomAccessIterator, _ValueType> __buf(__first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5652 __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5653 if (__buf.begin() == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5654 std::__inplace_stable_sort(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5655 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5656 std::__stable_sort_adaptive(__first, __last, __buf.begin(),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5657 _DistanceType(__buf.size()));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5658 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5659
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5660 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5661 * @brief Sort the elements of a sequence using a predicate for comparison,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5662 * preserving the relative order of equivalent elements.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5663 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5664 * @param __first An iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5665 * @param __last Another iterator.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5666 * @param __comp A comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5667 * @return Nothing.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5668 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5669 * Sorts the elements in the range @p [__first,__last) in ascending order,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5670 * such that for each iterator @p i in the range @p [__first,__last-1),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5671 * @p __comp(*(i+1),*i) is false.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5672 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5673 * The relative ordering of equivalent elements is preserved, so any two
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5674 * elements @p x and @p y in the range @p [__first,__last) such that
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5675 * @p __comp(x,y) is false and @p __comp(y,x) is false will have the same
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5676 * relative ordering after calling @p stable_sort().
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5677 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5678 template<typename _RandomAccessIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5679 inline void
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5680 stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5681 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5682 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5683 typedef typename iterator_traits<_RandomAccessIterator>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5684 _ValueType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5685 typedef typename iterator_traits<_RandomAccessIterator>::difference_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5686 _DistanceType;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5687
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5688 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5689 __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5690 _RandomAccessIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5691 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5692 _ValueType,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5693 _ValueType>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5694 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5695
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5696 _Temporary_buffer<_RandomAccessIterator, _ValueType> __buf(__first,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5697 __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5698 if (__buf.begin() == 0)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5699 std::__inplace_stable_sort(__first, __last, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5700 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5701 std::__stable_sort_adaptive(__first, __last, __buf.begin(),
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5702 _DistanceType(__buf.size()), __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5703 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5704
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5705
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5706 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5707 * @brief Return the union of two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5708 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5709 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5710 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5711 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5712 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5713 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5714 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5715 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5716 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5717 * each range in order to the output range. Iterators increment for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5718 * range. When the current element of one range is less than the other,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5719 * that element is copied and the iterator advanced. If an element is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5720 * contained in both ranges, the element from the first range is copied and
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5721 * both ranges advance. The output range may not overlap either input
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5722 * range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5723 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5724 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5725 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5726 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5727 set_union(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5728 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5729 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5730 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5731 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5732 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5733 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5734 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5735
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5736 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5737 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5738 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5739 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5740 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5741 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5742 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5743 __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5744 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5745 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5746 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5747
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5748 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5749 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5750 if (*__first1 < *__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5751 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5752 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5753 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5754 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5755 else if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5756 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5757 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5758 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5759 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5760 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5761 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5762 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5763 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5764 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5765 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5766 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5767 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5768 return std::copy(__first2, __last2, std::copy(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5769 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5770 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5771
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5772 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5773 * @brief Return the union of two sorted ranges using a comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5774 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5775 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5776 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5777 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5778 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5779 * @param __comp The comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5780 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5781 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5782 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5783 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5784 * each range in order to the output range. Iterators increment for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5785 * range. When the current element of one range is less than the other
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5786 * according to @p __comp, that element is copied and the iterator advanced.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5787 * If an equivalent element according to @p __comp is contained in both
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5788 * ranges, the element from the first range is copied and both ranges
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5789 * advance. The output range may not overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5790 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5791 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5792 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5793 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5794 set_union(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5795 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5796 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5797 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5798 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5799 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5800 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5801 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5802
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5803 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5804 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5805 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5806 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5807 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5808 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5809 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5810 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5811 _ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5812 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5813 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5814 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5815 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5816
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5817 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5818 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5819 if (__comp(*__first1, *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5820 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5821 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5822 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5823 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5824 else if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5825 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5826 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5827 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5828 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5829 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5830 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5831 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5832 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5833 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5834 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5835 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5836 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5837 return std::copy(__first2, __last2, std::copy(__first1, __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5838 __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5839 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5840
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5841 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5842 * @brief Return the intersection of two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5843 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5844 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5845 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5846 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5847 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5848 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5849 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5850 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5851 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5852 * both ranges in order to the output range. Iterators increment for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5853 * range. When the current element of one range is less than the other,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5854 * that iterator advances. If an element is contained in both ranges, the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5855 * element from the first range is copied and both ranges advance. The
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5856 * output range may not overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5857 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5858 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5859 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5860 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5861 set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5862 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5863 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5864 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5865 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5866 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5867 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5868 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5869
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5870 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5871 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5872 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5873 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5874 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5875 __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5876 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5877 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5878 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5879
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5880 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5881 if (*__first1 < *__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5882 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5883 else if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5884 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5885 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5886 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5887 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5888 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5889 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5890 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5891 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5892 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5893 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5894
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5895 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5896 * @brief Return the intersection of two sorted ranges using comparison
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5897 * functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5898 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5899 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5900 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5901 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5902 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5903 * @param __comp The comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5904 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5905 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5906 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5907 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5908 * both ranges in order to the output range. Iterators increment for each
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5909 * range. When the current element of one range is less than the other
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5910 * according to @p __comp, that iterator advances. If an element is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5911 * contained in both ranges according to @p __comp, the element from the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5912 * first range is copied and both ranges advance. The output range may not
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5913 * overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5914 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5915 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5916 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5917 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5918 set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5919 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5920 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5921 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5922 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5923 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5924 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5925 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5926
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5927 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5928 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5929 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5930 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5931 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5932 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5933 _ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5934 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5935 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5936 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5937 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5938
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5939 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5940 if (__comp(*__first1, *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5941 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5942 else if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5943 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5944 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5945 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5946 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5947 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5948 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5949 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5950 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5951 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5952 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5953
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5954 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5955 * @brief Return the difference of two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5956 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5957 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5958 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5959 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5960 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5961 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5962 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5963 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5964 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5965 * the first range but not the second in order to the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5966 * Iterators increment for each range. When the current element of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5967 * first range is less than the second, that element is copied and the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5968 * iterator advances. If the current element of the second range is less,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5969 * the iterator advances, but no element is copied. If an element is
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5970 * contained in both ranges, no elements are copied and both ranges
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5971 * advance. The output range may not overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5972 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5973 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5974 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5975 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5976 set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5977 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5978 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5979 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5980 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5981 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5982 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5983 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5984
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5985 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5986 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5987 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5988 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5989 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5990 __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5991 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5992 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5993 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5994
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5995 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5996 if (*__first1 < *__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5997 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5998 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5999 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6000 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6001 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6002 else if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6003 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6004 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6005 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6006 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6007 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6008 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6009 return std::copy(__first1, __last1, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6010 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6011
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6012 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6013 * @brief Return the difference of two sorted ranges using comparison
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6014 * functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6015 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6016 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6017 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6018 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6019 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6020 * @param __comp The comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6021 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6022 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6023 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6024 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6025 * the first range but not the second in order to the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6026 * Iterators increment for each range. When the current element of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6027 * first range is less than the second according to @p __comp, that element
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6028 * is copied and the iterator advances. If the current element of the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6029 * second range is less, no element is copied and the iterator advances.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6030 * If an element is contained in both ranges according to @p __comp, no
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6031 * elements are copied and both ranges advance. The output range may not
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6032 * overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6033 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6034 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6035 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6036 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6037 set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6038 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6039 _OutputIterator __result, _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6040 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6041 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6042 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6043 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6044 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6045
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6046 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6047 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6048 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6049 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6050 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6051 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6052 _ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6053 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6054 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6055 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6056 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6057
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6058 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6059 if (__comp(*__first1, *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6060 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6061 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6062 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6063 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6064 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6065 else if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6066 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6067 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6068 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6069 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6070 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6071 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6072 return std::copy(__first1, __last1, __result);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6073 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6074
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6075 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6076 * @brief Return the symmetric difference of two sorted ranges.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6077 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6078 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6079 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6080 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6081 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6082 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6083 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6084 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6085 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6086 * one range but not the other in order to the output range. Iterators
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6087 * increment for each range. When the current element of one range is less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6088 * than the other, that element is copied and the iterator advances. If an
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6089 * element is contained in both ranges, no elements are copied and both
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6090 * ranges advance. The output range may not overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6091 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6092 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6093 typename _OutputIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6094 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6095 set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6096 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6097 _OutputIterator __result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6098 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6099 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6100 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6101 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6102 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6103
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6104 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6105 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6106 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6107 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6108 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6109 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6110 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6111 __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6112 __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6113 __glibcxx_requires_sorted_set(__first1, __last1, __first2);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6114 __glibcxx_requires_sorted_set(__first2, __last2, __first1);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6115
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6116 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6117 if (*__first1 < *__first2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6118 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6119 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6120 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6121 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6122 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6123 else if (*__first2 < *__first1)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6124 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6125 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6126 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6127 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6128 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6129 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6130 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6131 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6132 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6133 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6134 return std::copy(__first2, __last2, std::copy(__first1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6135 __last1, __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6136 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6137
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6138 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6139 * @brief Return the symmetric difference of two sorted ranges using
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6140 * comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6141 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6142 * @param __first1 Start of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6143 * @param __last1 End of first range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6144 * @param __first2 Start of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6145 * @param __last2 End of second range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6146 * @param __comp The comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6147 * @return End of the output range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6148 * @ingroup set_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6149 *
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6150 * This operation iterates over both ranges, copying elements present in
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6151 * one range but not the other in order to the output range. Iterators
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6152 * increment for each range. When the current element of one range is less
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6153 * than the other according to @p comp, that element is copied and the
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6154 * iterator advances. If an element is contained in both ranges according
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6155 * to @p __comp, no elements are copied and both ranges advance. The output
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6156 * range may not overlap either input range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6157 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6158 template<typename _InputIterator1, typename _InputIterator2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6159 typename _OutputIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6160 _OutputIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6161 set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6162 _InputIterator2 __first2, _InputIterator2 __last2,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6163 _OutputIterator __result,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6164 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6165 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6166 typedef typename iterator_traits<_InputIterator1>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6167 _ValueType1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6168 typedef typename iterator_traits<_InputIterator2>::value_type
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6169 _ValueType2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6170
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6171 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6172 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6173 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6174 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6175 _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6176 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6177 _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6178 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6179 _ValueType1, _ValueType2>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6180 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6181 _ValueType2, _ValueType1>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6182 __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6183 __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6184
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6185 while (__first1 != __last1 && __first2 != __last2)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6186 if (__comp(*__first1, *__first2))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6187 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6188 *__result = *__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6189 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6190 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6191 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6192 else if (__comp(*__first2, *__first1))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6193 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6194 *__result = *__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6195 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6196 ++__result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6197 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6198 else
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6199 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6200 ++__first1;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6201 ++__first2;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6202 }
20715
5b7643257978 Remove trailing whitespace at end of lines.
Rik <rik@octave.org>
parents: 17878
diff changeset
6203 return std::copy(__first2, __last2,
17878
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6204 std::copy(__first1, __last1, __result));
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6205 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6206
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6207
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6208 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6209 * @brief Return the minimum element in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6210 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6211 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6212 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6213 * @return Iterator referencing the first instance of the smallest value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6214 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6215 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6216 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6217 min_element(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6218 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6219 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6220 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6221 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6222 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6223 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6224
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6225 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6226 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6227 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6228 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6229 if (*__first < *__result)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6230 __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6231 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6232 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6233
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6234 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6235 * @brief Return the minimum element in a range using comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6236 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6237 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6238 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6239 * @param __comp Comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6240 * @return Iterator referencing the first instance of the smallest value
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6241 * according to __comp.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6242 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6243 template<typename _ForwardIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6244 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6245 min_element(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6246 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6247 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6248 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6249 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6250 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6251 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6252 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6253 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6254
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6255 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6256 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6257 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6258 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6259 if (__comp(*__first, *__result))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6260 __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6261 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6262 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6263
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6264 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6265 * @brief Return the maximum element in a range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6266 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6267 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6268 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6269 * @return Iterator referencing the first instance of the largest value.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6270 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6271 template<typename _ForwardIterator>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6272 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6273 max_element(_ForwardIterator __first, _ForwardIterator __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6274 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6275 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6276 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6277 __glibcxx_function_requires(_LessThanComparableConcept<
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6278 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6279 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6280
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6281 if (__first == __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6282 return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6283 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6284 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6285 if (*__result < *__first)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6286 __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6287 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6288 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6289
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6290 /**
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6291 * @brief Return the maximum element in a range using comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6292 * @ingroup sorting_algorithms
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6293 * @param __first Start of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6294 * @param __last End of range.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6295 * @param __comp Comparison functor.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6296 * @return Iterator referencing the first instance of the largest value
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6297 * according to __comp.
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6298 */
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6299 template<typename _ForwardIterator, typename _Compare>
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6300 _ForwardIterator
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6301 max_element(_ForwardIterator __first, _ForwardIterator __last,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6302 _Compare __comp)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6303 {
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6304 // concept requirements
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6305 __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6306 __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6307 typename iterator_traits<_ForwardIterator>::value_type,
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6308 typename iterator_traits<_ForwardIterator>::value_type>)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6309 __glibcxx_requires_valid_range(__first, __last);
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6310
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6311 if (__first == __last) return __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6312 _ForwardIterator __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6313 while (++__first != __last)
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6314 if (__comp(*__result, *__first))
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6315 __result = __first;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6316 return __result;
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6317 }
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6318
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6319 _GLIBCXX_END_NAMESPACE_ALGO
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6320 } // namespace std
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6321
0d660785098e work around GCC bug in stl_algo.h (nth_element and sort; bug #40436)
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6322 #endif /* _STL_ALGO_H */