Skip to content

Commit 2198421

Browse files
author
Raghuveer Devulapalli
committed
Add C-API to key-value sort size_t arrays
1 parent 09fc019 commit 2198421

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

example.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
// libx86simdsortcpp.so
88
void keyvalue_qsort_float_sizet(float*, size_t*, size_t);
99
void keyvalue_qsort_float_uint32(float*, uint32_t*, uint32_t);
10+
void keyvalue_qsort_sizet_sizet(size_t*, size_t*, size_t);
11+
void keyvalue_qsort_sizet_uint32(size_t*, uint32_t*, uint32_t);
1012

1113
// struct definition, we will sort an array of these:
1214
struct Point {
1315
int x;
1416
int y;
1517
float distance;
18+
size_t metric;
1619
};
1720

1821
#define SWAP(a, b, type) {type temp = a; a = b; b = temp;}
@@ -21,17 +24,17 @@ struct Point {
2124
void object_qsort(struct Point* arr, size_t size)
2225
{
2326
/* (1) Create and initialize arrays of key and value */
24-
float* key = malloc(size * sizeof(float));
27+
size_t* key = malloc(size * sizeof(size_t));
2528
size_t* arg = malloc(size * sizeof(size_t));
2629
bool* done = malloc(size * sizeof(bool));
2730
for (size_t ii = 0; ii < size; ++ii) {
28-
key[ii] = arr[ii].distance;
31+
key[ii] = arr[ii].metric;
2932
arg[ii] = ii;
3033
done[ii] = false;
3134
}
3235

3336
/* (2) IndexSort using the keyvalue_qsort */
34-
keyvalue_qsort_float_sizet(key, arg, size);
37+
keyvalue_qsort_sizet_sizet(key, arg, size);
3538

3639
/* (3) Permute obj array in-place */
3740
for (size_t ii = 0; ii < size; ++ii) {
@@ -58,6 +61,7 @@ int main() {
5861
// Initialize:
5962
for (size_t ii = 0; ii < size; ++ii) {
6063
arr[ii].distance = (float) rand() / RAND_MAX;
64+
arr[ii].metric = rand() % 100;
6165
}
6266

6367
// sort:
@@ -66,7 +70,7 @@ int main() {
6670
// check if it is sorted:
6771
printf("arr = ");
6872
for (size_t ii = 0; ii < size; ++ii) {
69-
printf("%f, ", arr[ii].distance);
73+
printf("%ld, ", arr[ii].metric);
7074
}
7175
printf("\n");
7276
return 0;

lib/x86simdsort.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,14 @@ extern "C" {
236236
{
237237
x86simdsort::keyvalue_qsort(key, val, size, true);
238238
}
239+
XSS_EXPORT_SYMBOL
240+
void keyvalue_qsort_sizet_uint32(size_t* key, uint32_t* val, uint32_t size)
241+
{
242+
x86simdsort::keyvalue_qsort(key, val, size, true);
243+
}
244+
XSS_EXPORT_SYMBOL
245+
void keyvalue_qsort_sizet_sizet(size_t* key, size_t* val, size_t size)
246+
{
247+
x86simdsort::keyvalue_qsort(key, val, size, true);
248+
}
239249
}

0 commit comments

Comments
 (0)