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) {
|
static inline void calcOccurences(uint32_t arr[], size_t size, size_t *radicsOut) {
|
||||||
for(size_t i = 0; i < size; ++i) {
|
for(size_t i = 0; i < size; ++i) {
|
||||||
auto d0 = getDigit<0>(arr[i]);
|
// TODO: manual digits!
|
||||||
auto d1 = getDigit<1>(arr[i]);
|
++radicsOut[getDigit<0>(arr[i]) + DIGIT_RANGE * 0];
|
||||||
auto d2 = getDigit<2>(arr[i]);
|
++radicsOut[getDigit<1>(arr[i]) + DIGIT_RANGE * 1];
|
||||||
auto d3 = getDigit<3>(arr[i]);
|
++radicsOut[getDigit<2>(arr[i]) + DIGIT_RANGE * 2];
|
||||||
|
++radicsOut[getDigit<3>(arr[i]) + DIGIT_RANGE * 3];
|
||||||
/* // 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];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,12 +67,14 @@ namespace MagyarSort {
|
|||||||
// Calculate prefix sums
|
// Calculate prefix sums
|
||||||
// TODO: Maybe should use better ILP here?
|
// TODO: Maybe should use better ILP here?
|
||||||
// but maybe this is more cache friendly?
|
// but maybe this is more cache friendly?
|
||||||
|
// TODO: manual digits!
|
||||||
prefixSum<0>(radics);
|
prefixSum<0>(radics);
|
||||||
prefixSum<1>(radics);
|
prefixSum<1>(radics);
|
||||||
prefixSum<2>(radics);
|
prefixSum<2>(radics);
|
||||||
prefixSum<3>(radics);
|
prefixSum<3>(radics);
|
||||||
|
|
||||||
/* // DEBUG:
|
/* // DEBUG:
|
||||||
|
*/
|
||||||
for(size_t j = 0; j < DIGITS; ++j) {
|
for(size_t j = 0; j < DIGITS; ++j) {
|
||||||
printf("d%d: ", j);
|
printf("d%d: ", j);
|
||||||
for(size_t i = 0; i < DIGIT_RANGE; ++i) {
|
for(size_t i = 0; i < DIGIT_RANGE; ++i) {
|
||||||
@ -91,7 +82,6 @@ namespace MagyarSort {
|
|||||||
}
|
}
|
||||||
printf("\n\n");
|
printf("\n\n");
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user