5 #warning "sarray_sort.h" requires "sort.h"
36 #define sarray_permute_ PREFIXED_NAME(sarray_permute_)
37 #define sarray_permute_buf_ PREFIXED_NAME(sarray_permute_buf_)
41 size_t align,
size_t size,
void *
A,
size_t n,
buffer *buf);
43 #define sarray_permute(T,A,n, perm, work) \
44 sarray_permute_(sizeof(T),A,n, perm, work)
45 #define sarray_permute_buf(T,A,n, buf) \
46 sarray_permute_buf_(ALIGNOF(T),sizeof(T),A,n,buf)
48 #define sarray_sort_field(T,A,n, field,is_long, buf,keep) do { \
50 sortp_long(buf,keep, (ulong*)((char*)(A)+offsetof(T,field)),n,sizeof(T)); \
52 sortp (buf,keep, (uint *)((char*)(A)+offsetof(T,field)),n,sizeof(T)); \
55 #define sarray_sort(T,A,n, field,is_long, buf) do { \
56 sarray_sort_field(T,A,n, field,is_long, buf,0); \
57 sarray_permute_buf(T,A,n, buf); \
60 #define sarray_sort_2(T,A,n, field1,is_long1, field2,is_long2, buf) do { \
61 sarray_sort_field(T,A,n, field2,is_long2, buf,0); \
62 sarray_sort_field(T,A,n, field1,is_long1, buf,1); \
63 sarray_permute_buf(T,A,n, buf); \
66 #define sarray_sort_3(T,A,n, field1,is_long1, field2,is_long2, \
67 field3,is_long3, buf) do { \
68 sarray_sort_field(T,A,n, field3,is_long3, buf,0); \
69 sarray_sort_field(T,A,n, field2,is_long2, buf,1); \
70 sarray_sort_field(T,A,n, field1,is_long1, buf,1); \
71 sarray_permute_buf(T,A,n, buf); \
74 #define sarray_sort_4(T,A,n, field1,is_long1, field2,is_long2, \
75 field3,is_long3, field4,is_long4, buf) do { \
76 sarray_sort_field(T,A,n, field4,is_long4, buf,0); \
77 sarray_sort_field(T,A,n, field3,is_long3, buf,1); \
78 sarray_sort_field(T,A,n, field2,is_long2, buf,1); \
79 sarray_sort_field(T,A,n, field1,is_long1, buf,1); \
80 sarray_permute_buf(T,A,n, buf); \
86 uint i;
for(i=0;i<
n;++
i) pinv[perm[i]] = i;
#define sarray_permute_buf_
static void sarray_perm_invert(uint *const pinv, const uint *const perm, const uint n)
static double work[TNR *NS]