Skip to content

Commit f47e520

Browse files
author
Raghuveer Devulapalli
committed
Add C-API to key-value sort size_t arrays
1 parent 04429e1 commit f47e520

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
@@ -278,4 +278,14 @@ extern "C" {
278278
{
279279
x86simdsort::keyvalue_qsort(key, val, size, true);
280280
}
281+
XSS_EXPORT_SYMBOL
282+
void keyvalue_qsort_sizet_uint32(size_t* key, uint32_t* val, uint32_t size)
283+
{
284+
x86simdsort::keyvalue_qsort(key, val, size, true);
285+
}
286+
XSS_EXPORT_SYMBOL
287+
void keyvalue_qsort_sizet_sizet(size_t* key, size_t* val, size_t size)
288+
{
289+
x86simdsort::keyvalue_qsort(key, val, size, true);
290+
}
281291
}

0 commit comments

Comments
 (0)