X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkinput.c;h=1e9e9a5f836ae786005f3ba838c98ff93946ed1e;hb=07bf224c54711e9b9fb09344ba2da0f02c6f67ab;hp=748ced9edc2e7e71c8931e692200d03f7cdadef8;hpb=1fde4f52fc72af8e10a600a81c6f0924105add6a;p=idzebra-moved-to-github.git diff --git a/index/kinput.c b/index/kinput.c index 748ced9..1e9e9a5 100644 --- a/index/kinput.c +++ b/index/kinput.c @@ -1,4 +1,4 @@ -/* $Id: kinput.c,v 1.67 2005-09-16 09:58:39 adam Exp $ +/* $Id: kinput.c,v 1.75 2006-05-17 17:46:45 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,26 +416,27 @@ static int heap_read_one (struct heap_info *hi, char *name, char *key) #define PR_KEY_LOW 0 #define PR_KEY_TOP 0 -static void pkey(const char *b, int mode) -{ - key_logdump_txt(YLOG_LOG, b, mode ? "i" : "d"); -} - -#if 1 +#if 0 /* for debugging only */ -static void print_dict_item (ZebraHandle zh, const char *s) +static void print_dict_item(ZebraHandle zh, const char *s) { char dst[IT_MAX_WORD+1]; int ord; - int len = key_SU_decode (&ord, (const unsigned char *) s); + int len = key_SU_decode(&ord, (const unsigned char *) s); int index_type; const char *db = 0; - zebraExplain_lookup_ord (zh->reg->zei, - ord, &index_type, &db, 0, 0); + if (!zh) + yaz_log(YLOG_LOG, "ord=%d", ord); + else + { + zebraExplain_lookup_ord (zh->reg->zei, + ord, &index_type, &db, 0, 0, 0); - zebra_term_untrans(zh, index_type, dst, s + len); - yaz_log (YLOG_LOG, "%s", dst); + zebra_term_untrans(zh, index_type, dst, s + len); + + yaz_log(YLOG_LOG, "ord=%d term=%s", ord, dst); + } } #endif @@ -454,8 +474,8 @@ int heap_cread_item2(void *vp, char **dst, int *insertMode) p->look_level++; } memcpy (*dst, p->key_1, p->sz_1); -#if PR_KEY_TOP - yaz_log(YLOG_LOG, "DUP!"); +#if 0 + yaz_log(YLOG_LOG, "DUP level=%d", p->look_level); pkey(*dst, *insertMode); #endif (*dst) += p->sz_1; @@ -529,7 +549,7 @@ int heap_cread_item2(void *vp, char **dst, int *insertMode) } p->look_level = level; memcpy (*dst, p->key_1, p->sz_1); -#if PR_KEY_TOP +#if 0 pkey(*dst, *insertMode); #endif (*dst) += p->sz_1; @@ -583,7 +603,7 @@ int heap_inpc (struct heap_cread_info *hci, struct heap_info *hi) char *dict_info; strcpy (this_name, hci->cur_name); - assert (hci->cur_name[1]); + assert (hci->cur_name[0]); hi->no_diffs++; if ((dict_info = dict_lookup (hi->reg->dict, hci->cur_name))) { @@ -628,7 +648,7 @@ int heap_inp0(struct heap_cread_info *hci, struct heap_info *hi) int mode; strcpy (this_name, hci->cur_name); - assert (hci->cur_name[1]); + assert (hci->cur_name[0]); hi->no_diffs++; while (heap_cread_item2(hci, &dst, &mode)) @@ -652,11 +672,12 @@ int heap_inpb(struct heap_cread_info *hci, struct heap_info *hi) char *dict_info; strcpy (this_name, hci->cur_name); - assert (hci->cur_name[1]); + assert (hci->cur_name[0]); hi->no_diffs++; #if 0 - print_dict_item (hi->zh, hci->cur_name); + assert(hi->zh); + print_dict_item(hi->zh, hci->cur_name); #endif if ((dict_info = dict_lookup (hi->reg->dict, hci->cur_name))) { @@ -705,7 +726,7 @@ int heap_inps (struct heap_cread_info *hci, struct heap_info *hi) char *dict_info; strcpy (this_name, hci->cur_name); - assert (hci->cur_name[1]); + assert (hci->cur_name[0]); hi->no_diffs++; if (!(dict_info = dict_lookup (hi->reg->dict, hci->cur_name))) { @@ -803,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++) @@ -812,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; } @@ -864,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 + */ +