40 #ifndef VARIANTKEY_SET_H 41 #define VARIANTKEY_SET_H 46 #define RADIX_SORT_COUNT_BLOCK \ 47 uint32_t c7[256]= {0}, c6[256]= {0}, c5[256]= {0}, c4[256]= {0}, c3[256]= {0}, c2[256]= {0}, c1[256]= {0}, c0[256]= {0}; \ 48 uint32_t o7=0, o6=0, o5=0, o4=0, o3=0, o2=0, o1=0, o0=0; \ 49 uint32_t t7, t6, t5, t4, t3, t2, t1, t0; \ 52 for(i = 0; i < nitems; i++) \ 56 c6[((v >> 8) & 0xff)]++; \ 57 c5[((v >> 16) & 0xff)]++; \ 58 c4[((v >> 24) & 0xff)]++; \ 59 c3[((v >> 32) & 0xff)]++; \ 60 c2[((v >> 40) & 0xff)]++; \ 61 c1[((v >> 48) & 0xff)]++; \ 62 c0[((v >> 56) & 0xff)]++; \ 64 for(i = 0; i < 256; i++) \ 92 #define RADIX_SORT_ITERATION_BLOCK(A, B, BYTE, SHIFT) \ 93 for (i = 0; i < nitems; i++) \ 96 (B)[c##BYTE[((v >> (SHIFT)) & 0xff)]++] = v; \ 106 static inline void sort_uint64_t(uint64_t *arr, uint64_t *tmp, uint32_t nitems)
128 static inline void order_uint64_t(uint64_t *arr, uint64_t *tmp, uint32_t *idx, uint32_t *tdx, uint32_t nitems)
132 for (i = 0; i < nitems; i++)
141 for (i = 0; i < nitems; i++)
144 t6 = ((v >> 8) & 0xff);
150 for (i = 0; i < nitems; i++)
153 t5 = ((v >> 16) & 0xff);
159 for (i = 0; i < nitems; i++)
162 t4 = ((v >> 24) & 0xff);
168 for (i = 0; i < nitems; i++)
171 t3 = ((v >> 32) & 0xff);
177 for (i = 0; i < nitems; i++)
180 t2 = ((v >> 40) & 0xff);
186 for (i = 0; i < nitems; i++)
189 t1 = ((v >> 48) & 0xff);
195 for (i = 0; i < nitems; i++)
198 t0 = ((v >> 56) & 0xff);
214 uint64_t *last = (arr + nitems);
216 while ((arr != last) && (arr != --last))
238 uint64_t *last = (arr + nitems);
240 while (++arr != last)
242 if ((*p != *arr) && (*p++ != *arr))
261 static inline uint64_t *
intersection_uint64_t(uint64_t *a_arr, uint64_t a_nitems, uint64_t *b_arr, uint64_t b_nitems, uint64_t *o_arr)
263 uint64_t *a_last = (a_arr + a_nitems);
264 uint64_t *b_last = (b_arr + b_nitems);
265 while ((a_arr != a_last) && (b_arr != b_last))
272 if (*a_arr == *b_arr)
292 static inline uint64_t *
union_uint64_t(uint64_t *a_arr, uint64_t a_nitems, uint64_t *b_arr, uint64_t b_nitems, uint64_t *o_arr)
294 uint64_t *a_last = (a_arr + a_nitems);
295 uint64_t *b_last = (b_arr + b_nitems);
296 while ((a_arr != a_last) && (b_arr != b_last))
311 while (a_arr != a_last)
315 while (b_arr != b_last)
322 #endif // VARIANTKEY_SET_H #define RADIX_SORT_COUNT_BLOCK
Definition: set.h:46
static void order_uint64_t(uint64_t *arr, uint64_t *tmp, uint32_t *idx, uint32_t *tdx, uint32_t nitems)
Definition: set.h:128
static void sort_uint64_t(uint64_t *arr, uint64_t *tmp, uint32_t nitems)
Definition: set.h:106
#define RADIX_SORT_ITERATION_BLOCK(A, B, BYTE, SHIFT)
Definition: set.h:92
static uint64_t * union_uint64_t(uint64_t *a_arr, uint64_t a_nitems, uint64_t *b_arr, uint64_t b_nitems, uint64_t *o_arr)
Definition: set.h:292
static uint64_t * intersection_uint64_t(uint64_t *a_arr, uint64_t a_nitems, uint64_t *b_arr, uint64_t b_nitems, uint64_t *o_arr)
Definition: set.h:261
static void reverse_uint64_t(uint64_t *arr, uint64_t nitems)
Definition: set.h:212
static uint64_t * unique_uint64_t(uint64_t *arr, uint64_t nitems)
Definition: set.h:232