little refactor to maybe avoid manual digit misery
This commit is contained in:
parent
e076ab662b
commit
c7fe2f0507
24
magyarsort.h
24
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");
|
||||
}
|
||||
*/
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user