Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/c++/11/parallel/sort.h
$ cat -n /usr/include/c++/11/parallel/sort.h 1 // -*- C++ -*- 2 3 // Copyright (C) 2007-2021 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the terms 7 // of the GNU General Public License as published by the Free Software 8 // Foundation; either version 3, or (at your option) any later 9 // version. 10 11 // This library is distributed in the hope that it will be useful, but 12 // WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 // General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 //
. 24 25 /** @file parallel/sort.h 26 * @brief Parallel sorting algorithm switch. 27 * This file is a GNU parallel extension to the Standard C++ Library. 28 */ 29 30 // Written by Johannes Singler. 31 32 #ifndef _GLIBCXX_PARALLEL_SORT_H 33 #define _GLIBCXX_PARALLEL_SORT_H 1 34 35 #include
36 #include
37 #include
38 39 #if _GLIBCXX_PARALLEL_ASSERTIONS 40 #include
41 #endif 42 43 #if _GLIBCXX_MERGESORT 44 #include
45 #endif 46 47 #if _GLIBCXX_QUICKSORT 48 #include
49 #endif 50 51 #if _GLIBCXX_BAL_QUICKSORT 52 #include
53 #endif 54 55 namespace __gnu_parallel 56 { 57 //prototype 58 template
60 void 61 __parallel_sort(_RAIter __begin, _RAIter __end, 62 _Compare __comp, _Parallelism __parallelism); 63 64 /** 65 * @brief Choose multiway mergesort, splitting variant at run-time, 66 * for parallel sorting. 67 * @param __begin Begin iterator of input sequence. 68 * @param __end End iterator of input sequence. 69 * @param __comp Comparator. 70 * @tparam __stable Sort stable. 71 * @callgraph 72 */ 73 template
74 inline void 75 __parallel_sort(_RAIter __begin, _RAIter __end, 76 _Compare __comp, multiway_mergesort_tag __parallelism) 77 { 78 _GLIBCXX_CALL(__end - __begin) 79 80 if(_Settings::get().sort_splitting == EXACT) 81 parallel_sort_mwms<__stable, true> 82 (__begin, __end, __comp, __parallelism.__get_num_threads()); 83 else 84 parallel_sort_mwms<__stable, false> 85 (__begin, __end, __comp, __parallelism.__get_num_threads()); 86 } 87 88 /** 89 * @brief Choose multiway mergesort with exact splitting, 90 * for parallel sorting. 91 * @param __begin Begin iterator of input sequence. 92 * @param __end End iterator of input sequence. 93 * @param __comp Comparator. 94 * @tparam __stable Sort stable. 95 * @callgraph 96 */ 97 template
98 inline void 99 __parallel_sort(_RAIter __begin, _RAIter __end, 100 _Compare __comp, 101 multiway_mergesort_exact_tag __parallelism) 102 { 103 _GLIBCXX_CALL(__end - __begin) 104 105 parallel_sort_mwms<__stable, true> 106 (__begin, __end, __comp, __parallelism.__get_num_threads()); 107 } 108 109 /** 110 * @brief Choose multiway mergesort with splitting by sampling, 111 * for parallel sorting. 112 * @param __begin Begin iterator of input sequence. 113 * @param __end End iterator of input sequence. 114 * @param __comp Comparator. 115 * @tparam __stable Sort stable. 116 * @callgraph 117 */ 118 template
119 inline void 120 __parallel_sort(_RAIter __begin, _RAIter __end, 121 _Compare __comp, 122 multiway_mergesort_sampling_tag __parallelism) 123 { 124 _GLIBCXX_CALL(__end - __begin) 125 126 parallel_sort_mwms<__stable, false> 127 (__begin, __end, __comp, __parallelism.__get_num_threads()); 128 } 129 130 /** 131 * @brief Choose quicksort for parallel sorting. 132 * @param __begin Begin iterator of input sequence. 133 * @param __end End iterator of input sequence. 134 * @param __comp Comparator. 135 * @tparam __stable Sort stable. 136 * @callgraph 137 */ 138 template
139 inline void 140 __parallel_sort(_RAIter __begin, _RAIter __end, 141 _Compare __comp, quicksort_tag __parallelism) 142 { 143 _GLIBCXX_CALL(__end - __begin) 144 145 _GLIBCXX_PARALLEL_ASSERT(__stable == false); 146 147 __parallel_sort_qs(__begin, __end, __comp, 148 __parallelism.__get_num_threads()); 149 } 150 151 /** 152 * @brief Choose balanced quicksort for parallel sorting. 153 * @param __begin Begin iterator of input sequence. 154 * @param __end End iterator of input sequence. 155 * @param __comp Comparator. 156 * @tparam __stable Sort stable. 157 * @callgraph 158 */ 159 template
160 inline void 161 __parallel_sort(_RAIter __begin, _RAIter __end, 162 _Compare __comp, balanced_quicksort_tag __parallelism) 163 { 164 _GLIBCXX_CALL(__end - __begin) 165 166 _GLIBCXX_PARALLEL_ASSERT(__stable == false); 167 168 __parallel_sort_qsb(__begin, __end, __comp, 169 __parallelism.__get_num_threads()); 170 } 171 172 /** 173 * @brief Choose multiway mergesort with exact splitting, 174 * for parallel sorting. 175 * @param __begin Begin iterator of input sequence. 176 * @param __end End iterator of input sequence. 177 * @param __comp Comparator. 178 * @tparam __stable Sort stable. 179 * @callgraph 180 */ 181 template
182 inline void 183 __parallel_sort(_RAIter __begin, _RAIter __end, 184 _Compare __comp, default_parallel_tag __parallelism) 185 { 186 _GLIBCXX_CALL(__end - __begin) 187 188 __parallel_sort<__stable> 189 (__begin, __end, __comp, 190 multiway_mergesort_exact_tag(__parallelism.__get_num_threads())); 191 } 192 193 /** 194 * @brief Choose a parallel sorting algorithm. 195 * @param __begin Begin iterator of input sequence. 196 * @param __end End iterator of input sequence. 197 * @param __comp Comparator. 198 * @tparam __stable Sort stable. 199 * @callgraph 200 */ 201 template
202 inline void 203 __parallel_sort(_RAIter __begin, _RAIter __end, 204 _Compare __comp, parallel_tag __parallelism) 205 { 206 _GLIBCXX_CALL(__end - __begin) 207 typedef std::iterator_traits<_RAIter> _TraitsType; 208 typedef typename _TraitsType::value_type _ValueType; 209 typedef typename _TraitsType::difference_type _DifferenceType; 210 211 if (false) ; 212 #if _GLIBCXX_MERGESORT 213 else if (__stable || _Settings::get().sort_algorithm == MWMS) 214 { 215 if(_Settings::get().sort_splitting == EXACT) 216 parallel_sort_mwms<__stable, true> 217 (__begin, __end, __comp, __parallelism.__get_num_threads()); 218 else 219 parallel_sort_mwms
220 (__begin, __end, __comp, __parallelism.__get_num_threads()); 221 } 222 #endif 223 #if _GLIBCXX_QUICKSORT 224 else if (_Settings::get().sort_algorithm == QS) 225 __parallel_sort_qs(__begin, __end, __comp, 226 __parallelism.__get_num_threads()); 227 #endif 228 #if _GLIBCXX_BAL_QUICKSORT 229 else if (_Settings::get().sort_algorithm == QS_BALANCED) 230 __parallel_sort_qsb(__begin, __end, __comp, 231 __parallelism.__get_num_threads()); 232 #endif 233 else 234 __gnu_sequential::sort(__begin, __end, __comp); 235 } 236 } // end namespace __gnu_parallel 237 238 #endif /* _GLIBCXX_PARALLEL_SORT_H */
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™