From 175aced6e1fba324771b361822e8a27a38e567bb Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 30 Apr 2002 08:28:37 +0000 Subject: [PATCH] isamb fixes for pp_read. Statistics --- index/invstat.c | 25 +++++++++++++++++-------- isamb/isamb.c | 14 ++++++++------ test/gils/zebra.cfg | 4 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/index/invstat.c b/index/invstat.c index 7310b29..ca44bda 100644 --- a/index/invstat.c +++ b/index/invstat.c @@ -20,10 +20,9 @@ struct inv_stat_info { int isam_bounds[20]; int isam_occurrences[20]; char tmp[128]; - int isamb_levels[10]; + int isamb_levels[10][5]; int isamb_sizes[10]; int isamb_blocks[10]; - int isamb_no[10]; }; #define SINGLETON_TYPE 8 /* the type to use for singletons that */ @@ -126,13 +125,15 @@ static int inv_stat_handle (char *name, const char *info, int pos, int blocks; pp = isamb_pp_open_x(stat_info->zh->reg->isamb, isam_p, &level); + while (isamb_pp_read(pp, &key)) occur++; isamb_pp_close_x (pp, &size, &blocks); - stat_info->isamb_no[cat]++; - stat_info->isamb_levels[cat] += level; stat_info->isamb_blocks[cat] += blocks; stat_info->isamb_sizes[cat] += size; + if (level > 4) + level = 4; + stat_info->isamb_levels[cat][level] ++; } while (occur > stat_info->isam_bounds[i] && stat_info->isam_bounds[i]) @@ -189,10 +190,11 @@ void zebra_register_statistics (ZebraHandle zh) for (i = 0; i<10; i++) { - stat_info.isamb_levels[i] = 0; + int j; + for (j = 0; j<5; j++) + stat_info.isamb_levels[i][j] = 0; stat_info.isamb_sizes[i] = 0; stat_info.isamb_blocks[i] = 0; - stat_info.isamb_no[i] = 0; } dict_scan (zh->reg->dict, term_dict, &before, &after, &stat_info, @@ -255,16 +257,20 @@ void zebra_register_statistics (ZebraHandle zh) { for (i = 0; i<4; i++) { + int j; int bsize = isamb_block_info(zh->reg->isamb, i); if (bsize < 0) break; fprintf (stderr, "Category %d\n", i); fprintf (stderr, "Block size %d\n", bsize); - fprintf (stderr, "Lists: %d\n", stat_info.isamb_no[i]); fprintf (stderr, "Blocks: %d\n", stat_info.isamb_blocks[i]); fprintf (stderr, "Size: %d\n", stat_info.isamb_sizes[i]); fprintf (stderr, "Total %d\n", stat_info.isamb_blocks[i]* bsize); + for (j = 0; j<5; j++) + if (stat_info.isamb_levels[i][j]) + fprintf (stderr, "Level%d %d\n", j, + stat_info.isamb_levels[i][j]); } } @@ -287,7 +293,10 @@ void zebra_register_statistics (ZebraHandle zh) /* * * $Log: invstat.c,v $ - * Revision 1.26 2002-04-29 18:03:46 adam + * Revision 1.27 2002-04-30 08:28:37 adam + * isamb fixes for pp_read. Statistics + * + * Revision 1.26 2002/04/29 18:03:46 adam * More isamb statistics * * Revision 1.25 2002/04/26 08:44:47 adam diff --git a/isamb/isamb.c b/isamb/isamb.c index 8578f96..1625774 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -2,7 +2,7 @@ * Copyright (c) 2000-2002, Index Data. * See the file LICENSE for details. * - * $Id: isamb.c,v 1.11 2002-04-29 18:03:46 adam Exp $ + * $Id: isamb.c,v 1.12 2002-04-30 08:28:37 adam Exp $ */ #include #include @@ -39,7 +39,7 @@ struct ISAMB_s { }; struct ISAMB_block { - int pos; + ISAMB_P pos; int cat; int size; int leaf; @@ -52,6 +52,7 @@ struct ISAMB_block { struct ISAMB_PP_s { ISAMB isamb; + ISAMB_P pos; int level; int total_size; int no_blocks; @@ -78,7 +79,7 @@ ISAMB isamb_open (BFiles bfs, const char *name, int writeflag, ISAMC_M method) isamb->bfs = bfs; isamb->method = (ISAMC_M) xmalloc (sizeof(*method)); memcpy (isamb->method, method, sizeof(*method)); - isamb->no_cat = 4; + isamb->no_cat = 3; isamb->file = xmalloc (sizeof(*isamb->file) * isamb->no_cat); for (i = 0; ino_cat; i++) @@ -567,6 +568,7 @@ ISAMB_PP isamb_pp_open_x (ISAMB isamb, ISAMB_P pos, int *level) pp->isamb = isamb; pp->block = xmalloc (10 * sizeof(*pp->block)); + pp->pos = pos; pp->level = 0; pp->total_size = 0; pp->no_blocks = 0; @@ -579,7 +581,7 @@ ISAMB_PP isamb_pp_open_x (ISAMB isamb, ISAMB_P pos, int *level) pp->total_size += p->size; pp->no_blocks++; - if (p->bytes[0]) /* leaf */ + if (p->leaf) break; decode_ptr (&src, &pos); @@ -643,7 +645,7 @@ int isamb_pp_read (ISAMB_PP pp, void *buf) pp->block[pp->level] = 0; (pp->level)--; p = pp->block[pp->level]; - assert (p->bytes[0] == 0); /* must be int */ + assert (!p->leaf); /* must be int */ } src = p->bytes + p->offset; @@ -673,7 +675,7 @@ int isamb_pp_read (ISAMB_PP pp, void *buf) } } assert (p->offset < p->size); - assert (p->bytes[0]); + assert (p->leaf); src = p->bytes + p->offset; (*pp->isamb->method->code_item)(ISAMC_DECODE, p->decodeClientData, &dst, &src); diff --git a/test/gils/zebra.cfg b/test/gils/zebra.cfg index 33a5872..3241173 100644 --- a/test/gils/zebra.cfg +++ b/test/gils/zebra.cfg @@ -1,5 +1,5 @@ # Simple Zebra configuration file -# $Id: zebra.cfg,v 1.14 2002-04-17 08:17:13 adam Exp $ +# $Id: zebra.cfg,v 1.15 2002-04-30 08:28:37 adam Exp $ # # Where the schema files, attribute files, etc are located. profilePath: .:../../tab:../../../yaz/tab @@ -14,4 +14,4 @@ recordtype: grs.sgml #storekeys: 1 #storedata: 1 #recordId: (bib1,identifier-standard) -isam: b +isam: c -- 1.7.10.4