33
33
#include < __bit/countl.h>
34
34
#include < __config>
35
35
#include < __functional/identity.h>
36
+ #include < __iterator/access.h>
36
37
#include < __iterator/distance.h>
37
38
#include < __iterator/iterator_traits.h>
38
39
#include < __iterator/move_iterator.h>
@@ -67,7 +68,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
67
68
#if _LIBCPP_STD_VER >= 14
68
69
69
70
template <class _InputIterator , class _OutputIterator >
70
- _LIBCPP_HIDE_FROM_ABI pair<_OutputIterator, __iter_value_type<_InputIterator>>
71
+ _LIBCPP_HIDE_FROM_ABI constexpr pair<_OutputIterator, __iter_value_type<_InputIterator>>
71
72
__partial_sum_max (_InputIterator __first, _InputIterator __last, _OutputIterator __result) {
72
73
if (__first == __last)
73
74
return {__result, 0 };
@@ -109,15 +110,15 @@ struct __counting_sort_traits {
109
110
};
110
111
111
112
template <class _Radix , class _Integer >
112
- _LIBCPP_HIDE_FROM_ABI auto __nth_radix (size_t __radix_number, _Radix __radix, _Integer __n) {
113
+ _LIBCPP_HIDE_FROM_ABI constexpr auto __nth_radix (size_t __radix_number, _Radix __radix, _Integer __n) {
113
114
static_assert (is_unsigned<_Integer>::value);
114
115
using __traits = __counting_sort_traits<_Integer, _Radix>;
115
116
116
117
return __radix (static_cast <_Integer>(__n >> __traits::__radix_size * __radix_number));
117
118
}
118
119
119
120
template <class _ForwardIterator , class _Map , class _RandomAccessIterator >
120
- _LIBCPP_HIDE_FROM_ABI void
121
+ _LIBCPP_HIDE_FROM_ABI constexpr void
121
122
__collect (_ForwardIterator __first, _ForwardIterator __last, _Map __map, _RandomAccessIterator __counters) {
122
123
using __value_type = __iter_value_type<_ForwardIterator>;
123
124
using __traits = __counting_sort_traits<__value_type, _Map>;
@@ -129,7 +130,7 @@ __collect(_ForwardIterator __first, _ForwardIterator __last, _Map __map, _Random
129
130
}
130
131
131
132
template <class _ForwardIterator , class _RandomAccessIterator1 , class _Map , class _RandomAccessIterator2 >
132
- _LIBCPP_HIDE_FROM_ABI void
133
+ _LIBCPP_HIDE_FROM_ABI constexpr void
133
134
__dispose (_ForwardIterator __first,
134
135
_ForwardIterator __last,
135
136
_RandomAccessIterator1 __result,
@@ -147,7 +148,7 @@ template <class _ForwardIterator,
147
148
class _RandomAccessIterator1 ,
148
149
class _RandomAccessIterator2 ,
149
150
size_t ... _Radices>
150
- _LIBCPP_HIDE_FROM_ABI bool __collect_impl (
151
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __collect_impl (
151
152
_ForwardIterator __first,
152
153
_ForwardIterator __last,
153
154
_Map __map,
@@ -177,7 +178,7 @@ _LIBCPP_HIDE_FROM_ABI bool __collect_impl(
177
178
}
178
179
179
180
template <class _ForwardIterator , class _Map , class _Radix , class _RandomAccessIterator1 , class _RandomAccessIterator2 >
180
- _LIBCPP_HIDE_FROM_ABI bool
181
+ _LIBCPP_HIDE_FROM_ABI constexpr bool
181
182
__collect (_ForwardIterator __first,
182
183
_ForwardIterator __last,
183
184
_Map __map,
@@ -191,7 +192,7 @@ __collect(_ForwardIterator __first,
191
192
}
192
193
193
194
template <class _BidirectionalIterator , class _RandomAccessIterator1 , class _Map , class _RandomAccessIterator2 >
194
- _LIBCPP_HIDE_FROM_ABI void __dispose_backward (
195
+ _LIBCPP_HIDE_FROM_ABI constexpr void __dispose_backward (
195
196
_BidirectionalIterator __first,
196
197
_BidirectionalIterator __last,
197
198
_RandomAccessIterator1 __result,
@@ -206,7 +207,7 @@ _LIBCPP_HIDE_FROM_ABI void __dispose_backward(
206
207
}
207
208
208
209
template <class _ForwardIterator , class _RandomAccessIterator , class _Map >
209
- _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator
210
+ _LIBCPP_HIDE_FROM_ABI constexpr _RandomAccessIterator
210
211
__counting_sort_impl (_ForwardIterator __first, _ForwardIterator __last, _RandomAccessIterator __result, _Map __map) {
211
212
using __value_type = __iter_value_type<_ForwardIterator>;
212
213
using __traits = __counting_sort_traits<__value_type, _Map>;
@@ -225,7 +226,7 @@ template <class _RandomAccessIterator1,
225
226
class _Radix ,
226
227
enable_if_t < __radix_sort_traits<__iter_value_type<_RandomAccessIterator1>, _Map, _Radix>::__radix_count == 1 ,
227
228
int > = 0 >
228
- _LIBCPP_HIDE_FROM_ABI void __radix_sort_impl (
229
+ _LIBCPP_HIDE_FROM_ABI constexpr void __radix_sort_impl (
229
230
_RandomAccessIterator1 __first,
230
231
_RandomAccessIterator1 __last,
231
232
_RandomAccessIterator2 __buffer,
@@ -245,7 +246,7 @@ template <
245
246
class _Radix ,
246
247
enable_if_t < __radix_sort_traits<__iter_value_type<_RandomAccessIterator1>, _Map, _Radix>::__radix_count % 2 == 0 ,
247
248
int > = 0 >
248
- _LIBCPP_HIDE_FROM_ABI void __radix_sort_impl (
249
+ _LIBCPP_HIDE_FROM_ABI constexpr void __radix_sort_impl (
249
250
_RandomAccessIterator1 __first,
250
251
_RandomAccessIterator1 __last,
251
252
_RandomAccessIterator2 __buffer_begin,
@@ -307,7 +308,7 @@ struct __low_byte_fn {
307
308
};
308
309
309
310
template <class _RandomAccessIterator1 , class _RandomAccessIterator2 , class _Map , class _Radix >
310
- _LIBCPP_HIDE_FROM_ABI void
311
+ _LIBCPP_HIDE_FROM_ABI constexpr void
311
312
__radix_sort (_RandomAccessIterator1 __first,
312
313
_RandomAccessIterator1 __last,
313
314
_RandomAccessIterator2 __buffer,
@@ -318,7 +319,7 @@ __radix_sort(_RandomAccessIterator1 __first,
318
319
}
319
320
320
321
template <class _RandomAccessIterator1 , class _RandomAccessIterator2 >
321
- _LIBCPP_HIDE_FROM_ABI void
322
+ _LIBCPP_HIDE_FROM_ABI constexpr void
322
323
__radix_sort (_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, _RandomAccessIterator2 __buffer) {
323
324
std::__radix_sort (__first, __last, __buffer, __identity{}, __low_byte_fn{});
324
325
}
0 commit comments