X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkinput.c;h=899c5d55d51724ce6dbce278353d26c2a991ba16;hb=1d94ccc48442dc0b08cbc6db585b9ecab261e1ba;hp=9c21b9eadfbbe2545f2d7773aaa2635296f1fc9c;hpb=18793c78b02261258fb05021cc185715f8f16062;p=idzebra-moved-to-github.git diff --git a/index/kinput.c b/index/kinput.c index 9c21b9e..899c5d5 100644 --- a/index/kinput.c +++ b/index/kinput.c @@ -1,4 +1,4 @@ -/* $Id: kinput.c,v 1.69 2005-11-10 11:25:13 adam Exp $ +/* $Id: kinput.c,v 1.74 2006-05-10 08:13:22 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -55,6 +55,14 @@ struct key_file { Res res; }; +#if 0 +static void pkey(const char *b, int mode) +{ + key_logdump_txt(YLOG_LOG, b, mode ? "i" : "d"); +} +#endif + + void getFnameTmp (Res res, char *fname, int no) { const char *pre; @@ -218,6 +226,17 @@ int key_file_read (struct key_file *f, char *key) srcbuf[j] = key_file_getc(f); dst = key + i; iscz1_decode(f->decode_handle, &dst, &src); + +#if 0 + /* debugging */ + if (1) + { + struct it_key k; + memcpy(&k, key+i, sizeof(k)); + if (!k.mem[1]) + yaz_log(YLOG_LOG, "00 KEY"); + } +#endif return i + sizeof(struct it_key); } @@ -230,7 +249,8 @@ struct heap_info { int *ptr; int (*cmp)(const void *p1, const void *p2); struct zebra_register *reg; - ZebraHandle zh; /* only used for raw reading that bypasses the heaps */ + ZebraHandle zh; + int raw_reading; /* 1=raw /mem read. 0=file reading */ int no_diffs; int no_updates; int no_deletions; @@ -246,7 +266,7 @@ static struct heap_info *key_heap_malloc() hi->info.buf = 0; hi->heapnum = 0; hi->ptr = 0; - hi->zh=0; + hi->raw_reading = 0; hi->no_diffs = 0; hi->no_diffs = 0; hi->no_updates = 0; @@ -256,13 +276,15 @@ static struct heap_info *key_heap_malloc() return hi; } -struct heap_info *key_heap_init (int nkeys, - int (*cmp)(const void *p1, const void *p2)) +struct heap_info *key_heap_init_file(ZebraHandle zh, + int nkeys, + int (*cmp)(const void *p1, const void *p2)) { struct heap_info *hi; int i; hi = key_heap_malloc(); + hi->zh = zh; hi->info.file = (struct key_file **) xmalloc (sizeof(*hi->info.file) * (1+nkeys)); hi->info.buf = (char **) xmalloc (sizeof(*hi->info.buf) * (1+nkeys)); @@ -276,21 +298,20 @@ struct heap_info *key_heap_init (int nkeys, return hi; } -struct heap_info *key_heap_init_buff ( ZebraHandle zh, - int (*cmp)(const void *p1, const void *p2)) +struct heap_info *key_heap_init_raw(ZebraHandle zh, + int (*cmp)(const void *p1, const void *p2)) { struct heap_info *hi=key_heap_malloc(); - hi->cmp=cmp; - hi->zh=zh; + hi->cmp = cmp; + hi->zh = zh; + hi->raw_reading = 1; return hi; } void key_heap_destroy (struct heap_info *hi, int nkeys) { int i; - yaz_log (YLOG_DEBUG, "key_heap_destroy"); - yaz_log (YLOG_DEBUG, "key_heap_destroy nk=%d",nkeys); - if (!hi->zh) + if (!hi->raw_reading) for (i = 0; i<=nkeys; i++) xfree (hi->info.buf[i]); @@ -354,17 +375,15 @@ static void key_heap_insert (struct heap_info *hi, const char *buf, int nbytes, } } -static int heap_read_one_raw (struct heap_info *hi, char *name, char *key) +static int heap_read_one_raw(struct heap_info *hi, char *name, char *key) { - ZebraHandle zh=hi->zh; + ZebraHandle zh = hi->zh; size_t ptr_i = zh->reg->ptr_i; char *cp; if (!ptr_i) return 0; --(zh->reg->ptr_i); cp=(zh->reg->key_buf)[zh->reg->ptr_top - ptr_i]; - yaz_log (YLOG_DEBUG, " raw: i=%ld top=%ld cp=%p", (long) ptr_i, - (long) zh->reg->ptr_top, cp); strcpy(name, cp); memcpy(key, cp+strlen(name)+1, KEY_SIZE); hi->no_iterations++; @@ -377,7 +396,7 @@ static int heap_read_one (struct heap_info *hi, char *name, char *key) char rbuf[INP_NAME_MAX]; struct key_file *kf; - if (hi->zh) /* bypass the heap stuff, we have a readymade buffer */ + if (hi->raw_reading) return heap_read_one_raw(hi, name, key); if (!hi->heapnum) @@ -397,14 +416,7 @@ static int heap_read_one (struct heap_info *hi, char *name, char *key) #define PR_KEY_LOW 0 #define PR_KEY_TOP 0 -#if 1 -static void pkey(const char *b, int mode) -{ - key_logdump_txt(YLOG_LOG, b, mode ? "i" : "d"); -} -#endif - -#if 1 +#if 0 /* for debugging only */ static void print_dict_item(ZebraHandle zh, const char *s) { @@ -419,7 +431,7 @@ static void print_dict_item(ZebraHandle zh, const char *s) else { zebraExplain_lookup_ord (zh->reg->zei, - ord, &index_type, &db, 0, 0); + ord, &index_type, &db, 0, 0, 0); zebra_term_untrans(zh, index_type, dst, s + len); @@ -462,7 +474,7 @@ int heap_cread_item2(void *vp, char **dst, int *insertMode) p->look_level++; } memcpy (*dst, p->key_1, p->sz_1); -#if 1 +#if 0 yaz_log(YLOG_LOG, "DUP level=%d", p->look_level); pkey(*dst, *insertMode); #endif @@ -664,6 +676,7 @@ int heap_inpb(struct heap_cread_info *hci, struct heap_info *hi) hi->no_diffs++; #if 0 + assert(hi->zh); print_dict_item(hi->zh, hci->cur_name); #endif if ((dict_info = dict_lookup (hi->reg->dict, hci->cur_name))) @@ -811,7 +824,7 @@ void zebra_index_merge (ZebraHandle zh) progressInfo.totalBytes += kf[i]->length; progressInfo.totalOffset += kf[i]->buf_size; } - hi = key_heap_init (nkeys, key_qsort_compare); + hi = key_heap_init_file(zh, nkeys, key_qsort_compare); hi->reg = zh->reg; for (i = 1; i<=nkeys; i++) @@ -820,7 +833,7 @@ void zebra_index_merge (ZebraHandle zh) } /* use file */ else { /* do not use file, read straight from buffer */ - hi = key_heap_init_buff (zh, key_qsort_compare); + hi = key_heap_init_raw(zh, key_qsort_compare); hi->reg = zh->reg; } @@ -872,3 +885,11 @@ void zebra_index_merge (ZebraHandle zh) key_heap_destroy (hi, nkeys); } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +