Skip to content

Commit e0fa25c

Browse files
committed
nth-radix
1 parent e6ed54d commit e0fa25c

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

libcxx/include/__algorithm/radix_sort.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,12 @@ struct __counting_sort_traits {
107107
constexpr static auto __radix_size = std::__intlog2<uint64_t>(__value_range);
108108
};
109109

110-
template <class _Radix>
111-
_LIBCPP_HIDE_FROM_ABI auto __nth_radix(size_t __radix_number, _Radix __radix) {
112-
return [__radix_number, __radix = std::move(__radix)](auto __n) {
113-
using value_type = decltype(__n);
114-
static_assert(is_unsigned<value_type>::value, "");
115-
using traits = __counting_sort_traits<value_type, _Radix>;
116-
117-
return __radix(static_cast<value_type>(__n >> traits::__radix_size * __radix_number));
118-
};
110+
template <class _Radix, class _Integer>
111+
_LIBCPP_HIDE_FROM_ABI auto __nth_radix(size_t __radix_number, _Radix __radix, _Integer __n) {
112+
static_assert(is_unsigned<_Integer>::value, "");
113+
using traits = __counting_sort_traits<_Integer, _Radix>;
114+
115+
return __radix(static_cast<_Integer>(__n >> traits::__radix_size * __radix_number));
119116
}
120117

121118
template <class _ForwardIterator, class _Map, class _RandomAccessIterator>
@@ -167,7 +164,7 @@ _LIBCPP_HIDE_FROM_ABI bool __collect_impl(
167164
__is_sorted &= (__current >= __previous);
168165
__previous = __current;
169166

170-
(++__counters[_Radices][std::__nth_radix(_Radices, __radix)(__current)], ...);
167+
(++__counters[_Radices][std::__nth_radix(_Radices, __radix, __current)], ...);
171168
});
172169

173170
((__maximums[_Radices] =
@@ -269,7 +266,7 @@ __radix_sort_impl(_RandomAccessIterator1 __first,
269266
std::copy(std::__move_assign_please(__first), std::__move_assign_please(__last), __buffer_begin);
270267
} else {
271268
auto __n0th = [__radix_number, &__map, &__radix](const auto& __v) {
272-
return std::__nth_radix(__radix_number, __radix)(__map(__v));
269+
return std::__nth_radix(__radix_number, __radix, __map(__v));
273270
};
274271
std::__dispose_backward(
275272
std::__move_assign_please(__first),
@@ -283,7 +280,7 @@ __radix_sort_impl(_RandomAccessIterator1 __first,
283280
std::copy(std::__move_assign_please(__buffer_begin), std::__move_assign_please(__buffer_end), __first);
284281
} else {
285282
auto __n1th = [__radix_number, &__map, &__radix](const auto& __v) {
286-
return std::__nth_radix(__radix_number + 1, __radix)(__map(__v));
283+
return std::__nth_radix(__radix_number + 1, __radix, __map(__v));
287284
};
288285
std::__dispose_backward(
289286
std::__move_assign_please(__buffer_begin),

0 commit comments

Comments
 (0)