7
7
// libx86simdsortcpp.so
8
8
void keyvalue_qsort_float_sizet (float * , size_t * , size_t );
9
9
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 );
10
12
11
13
// struct definition, we will sort an array of these:
12
14
struct Point {
13
15
int x ;
14
16
int y ;
15
17
float distance ;
18
+ size_t metric ;
16
19
};
17
20
18
21
#define SWAP (a , b , type ) {type temp = a; a = b; b = temp;}
@@ -21,17 +24,17 @@ struct Point {
21
24
void object_qsort (struct Point * arr , size_t size )
22
25
{
23
26
/* (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 ));
25
28
size_t * arg = malloc (size * sizeof (size_t ));
26
29
bool * done = malloc (size * sizeof (bool ));
27
30
for (size_t ii = 0 ; ii < size ; ++ ii ) {
28
- key [ii ] = arr [ii ].distance ;
31
+ key [ii ] = arr [ii ].metric ;
29
32
arg [ii ] = ii ;
30
33
done [ii ] = false;
31
34
}
32
35
33
36
/* (2) IndexSort using the keyvalue_qsort */
34
- keyvalue_qsort_float_sizet (key , arg , size );
37
+ keyvalue_qsort_sizet_sizet (key , arg , size );
35
38
36
39
/* (3) Permute obj array in-place */
37
40
for (size_t ii = 0 ; ii < size ; ++ ii ) {
@@ -58,6 +61,7 @@ int main() {
58
61
// Initialize:
59
62
for (size_t ii = 0 ; ii < size ; ++ ii ) {
60
63
arr [ii ].distance = (float ) rand () / RAND_MAX ;
64
+ arr [ii ].metric = rand () % 100 ;
61
65
}
62
66
63
67
// sort:
@@ -66,7 +70,7 @@ int main() {
66
70
// check if it is sorted:
67
71
printf ("arr = " );
68
72
for (size_t ii = 0 ; ii < size ; ++ ii ) {
69
- printf ("%f , " , arr [ii ].distance );
73
+ printf ("%ld , " , arr [ii ].metric );
70
74
}
71
75
printf ("\n" );
72
76
return 0 ;
0 commit comments