X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fsorter%2Fs-fixint.h;h=20cce74b114998e12d4b5cdb6ddd13312e91e58b;hb=ca2850c6c8941faecb6e07be3379127330feb04a;hp=7aafa7de8965dce8e096b9fc8a256b21a3c121fa;hpb=15a2b6d5ef43218fc66b95e4c24b152934feb77e;p=libucw.git diff --git a/lib/sorter/s-fixint.h b/lib/sorter/s-fixint.h index 7aafa7de..20cce74b 100644 --- a/lib/sorter/s-fixint.h +++ b/lib/sorter/s-fixint.h @@ -12,9 +12,11 @@ #define ASORT_PREFIX(x) SORT_PREFIX(array_##x) #define ASORT_KEY_TYPE P(key) #define ASORT_LT(x,y) (P(compare)(&(x), &(y)) < 0) -#define ASORT_PAGE_ALIGNED #ifdef SORT_INTERNAL_RADIX -#define ASORT_HASH(x) P(hash)(&(x)) +# define ASORT_HASH(x) P(hash)(&(x)) +# ifdef SORT_LONG_HASH +# define ASORT_LONG_HASH +# endif #endif #include "lib/sorter/array.h" @@ -56,7 +58,7 @@ static int P(internal)(struct sort_context *ctx, struct sort_bucket *bin, struct P(key) *buf = ctx->big_buf; uns maxkeys = P(internal_num_keys)(ctx); - SORT_XTRACE(4, "s-fixint: Reading (maxkeys=%u, hash_bits=%d)", maxkeys, bin->hash_bits); + SORT_XTRACE(5, "s-fixint: Reading (maxkeys=%u, hash_bits=%d)", maxkeys, bin->hash_bits); uns n = 0; while (n < maxkeys && P(read_key)(in, &buf[n])) n++; @@ -64,22 +66,22 @@ static int P(internal)(struct sort_context *ctx, struct sort_bucket *bin, struct return 0; void *workspace UNUSED = ALIGN_PTR(&buf[n], CPU_PAGE_SIZE); - SORT_XTRACE(3, "s-fixint: Sorting %u items (%s items, %s workspace)", + SORT_XTRACE(4, "s-fixint: Sorting %u items (%s items, %s workspace)", n, stk_fsize(n * sizeof(P(key))), stk_fsize(n * P(internal_workspace)())); timestamp_t timer; init_timer(&timer); - buf = P(array_sort)(buf, n, + buf = P(array_sort)(buf, n #ifdef SORT_INTERNAL_RADIX - workspace, bin->hash_bits -#else - NULL, 0 + , workspace, bin->hash_bits #endif ); + if ((void *)buf != ctx->big_buf) + workspace = ctx->big_buf; ctx->total_int_time += get_timer(&timer); - SORT_XTRACE(4, "s-fixint: Writing"); + SORT_XTRACE(5, "s-fixint: Writing"); if (n < maxkeys) bout = bout_only; struct fastbuf *out = sbuck_write(bout); @@ -111,7 +113,7 @@ static int P(internal)(struct sort_context *ctx, struct sort_bucket *bin, struct P(write_key)(out, &buf[i]); } #ifdef SORT_UNIFY - SORT_XTRACE(3, "Merging reduced %d records", merged); + SORT_XTRACE(4, "Merging reduced %u records", merged); #endif return (n == maxkeys);