77// libx86simdsortcpp.so
88void keyvalue_qsort_float_sizet (float * , size_t * , size_t );
99void 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:
1214struct 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 {
2124void 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 ;
0 commit comments