X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frstemp.c;h=f43e5e2383179c68f837148b4da9716b4457ab13;hb=5b886a7358c16434d5c9f5f0d4af2f6e2e5d5c73;hp=f5df094508cf3fe18c865ba08e8d619a4e030154;hpb=b9093505b17a074e79137ed64595c8269f77d330;p=idzebra-moved-to-github.git diff --git a/rset/rstemp.c b/rset/rstemp.c index f5df094..f43e5e2 100644 --- a/rset/rstemp.c +++ b/rset/rstemp.c @@ -4,7 +4,15 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rstemp.c,v $ - * Revision 1.21 1997-09-17 12:19:23 adam + * Revision 1.23 1997-12-18 10:54:25 adam + * New method result set method rs_hits that returns the number of + * hits in result-set (if known). The ranked result set returns real + * number of hits but only when not combined with other operands. + * + * Revision 1.22 1997/10/31 12:38:12 adam + * Bug fix: added missing xfree() call. + * + * Revision 1.21 1997/09/17 12:19:23 adam * Zebra version corresponds to YAZ version 1.4. * Changed Zebra server so that it doesn't depend on global common_resource. * @@ -99,6 +107,7 @@ static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); static int r_count (RSET ct); +static int r_hits (RSET ct, void *oi); static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static int r_score (RSFD rfd, int *score); @@ -112,6 +121,7 @@ static const rset_control control = r_delete, r_rewind, r_count, + r_hits, r_read, r_write, r_score @@ -130,6 +140,7 @@ struct rset_temp_info { size_t pos_buf; /* position of first byte in window */ size_t pos_border; /* position of last byte+1 in window */ int dirty; /* window is dirty */ + int hits; /* no of hits */ char *temp_path; }; @@ -153,6 +164,7 @@ static void *r_create(const struct rset_control *sel, void *parms, int *flags) info->pos_end = 0; info->pos_buf = 0; info->dirty = 0; + info->hits = -1; if (!temp_parms->temp_path) info->temp_path = NULL; else @@ -245,6 +257,7 @@ static void r_close (RSFD rfd) close (info->fd); info->fd = -1; } + xfree (rfd); } static void r_delete (RSET ct) @@ -321,6 +334,13 @@ static int r_count (RSET ct) return info->pos_end / info->key_size; } +static int r_hits (RSET ct, void *oi) +{ + struct rset_temp_info *info = ct->buf; + + return info->hits; +} + static int r_read (RSFD rfd, void *buf) { struct rset_temp_info *info = ((struct rset_temp_rfd*)rfd)->info;