From c7fe2f0507c101f823010fc6eaaf4f5c6b4f25a8 Mon Sep 17 00:00:00 2001 From: Richard Thier Date: Thu, 11 Mar 2021 22:19:29 +0100 Subject: [PATCH] little refactor to maybe avoid manual digit misery --- magyarsort.h | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/magyarsort.h b/magyarsort.h index 898f9fb..21a28b5 100644 --- a/magyarsort.h +++ b/magyarsort.h @@ -36,22 +36,11 @@ namespace MagyarSort { static inline void calcOccurences(uint32_t arr[], size_t size, size_t *radicsOut) { for(size_t i = 0; i < size; ++i) { - auto d0 = getDigit<0>(arr[i]); - auto d1 = getDigit<1>(arr[i]); - auto d2 = getDigit<2>(arr[i]); - auto d3 = getDigit<3>(arr[i]); - - /* // DEBUG: - printf("d0:%u, arr[i]: %u\n", d0, arr[i]); - printf("d1:%u, arr[i]: %u\n", d1, arr[i]); - printf("d2:%u, arr[i]: %u\n", d2, arr[i]); - printf("d3:%u, arr[i]: %u\n", d3, arr[i]); - */ - - ++radicsOut[d0]; - ++radicsOut[d1 + DIGIT_RANGE * 1]; - ++radicsOut[d2 + DIGIT_RANGE * 2]; - ++radicsOut[d3 + DIGIT_RANGE * 3]; + // TODO: manual digits! + ++radicsOut[getDigit<0>(arr[i]) + DIGIT_RANGE * 0]; + ++radicsOut[getDigit<1>(arr[i]) + DIGIT_RANGE * 1]; + ++radicsOut[getDigit<2>(arr[i]) + DIGIT_RANGE * 2]; + ++radicsOut[getDigit<3>(arr[i]) + DIGIT_RANGE * 3]; } } @@ -78,12 +67,14 @@ namespace MagyarSort { // Calculate prefix sums // TODO: Maybe should use better ILP here? // but maybe this is more cache friendly? + // TODO: manual digits! prefixSum<0>(radics); prefixSum<1>(radics); prefixSum<2>(radics); prefixSum<3>(radics); /* // DEBUG: + */ for(size_t j = 0; j < DIGITS; ++j) { printf("d%d: ", j); for(size_t i = 0; i < DIGIT_RANGE; ++i) { @@ -91,7 +82,6 @@ namespace MagyarSort { } printf("\n\n"); } - */ } };