-/* $Id: key_block.c,v 1.3 2006-11-21 17:48:08 adam Exp $
- Copyright (C) 1995-2006
+/* $Id: key_block.c,v 1.8 2007-01-15 15:10:16 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <pthread.h>
#endif
-#include <yaz/nmem.h>
-#include "index.h"
#include "key_block.h"
+#include <yaz/nmem.h>
+#include <yaz/xmalloc.h>
struct zebra_key_block {
char **key_buf;
char buf[ENCODE_BUFLEN];
};
-static int log_level = 0;
-
#define USE_SHELLSORT 0
#if USE_SHELLSORT
{
zebra_key_block_t p = xmalloc(sizeof(*p));
+#if YAZ_POSIX_THREADS
+ /* we'll be making two memory areas so cut in half */
+ if (use_threads)
+ mem = mem / 2;
+#endif
p->key_buf = (char**) xmalloc (mem);
p->ptr_top = mem/sizeof(char*);
p->ptr_i = 0;
}
}
-void key_block_write(zebra_key_block_t p, SYSNO sysno, struct it_key *key_in,
+void key_block_write(zebra_key_block_t p, zint sysno, struct it_key *key_in,
int cmd, const char *str_buf, size_t str_len,
zint staticrank, int static_rank_enable)
{
((char*)p->key_buf)[(p->key_buf_used)++] = cmd;
if (static_rank_enable)
+ {
+ assert(staticrank >= 0);
key_out.mem[j++] = staticrank;
+ }
if (key_in->mem[1]) /* filter specified record ID */
key_out.mem[j++] = key_in->mem[1];
(p->key_file_no)++;
yaz_log(YLOG_LOG, "sorting section %d", (p->key_file_no));
- yaz_log(log_level, " sort_buff at %p n=%d",
- key_buf + ptr_top - ptr_i,ptr_i);
-
#if USE_SHELLSORT
shellsort(key_buf + ptr_top - ptr_i, ptr_i,