From: Adam Dickmeiss Date: Tue, 10 Feb 1998 11:56:46 +0000 (+0000) Subject: Implemented rset_dup. X-Git-Tag: ZEBRA.1.0~241 X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=commitdiff_plain;h=bfaff2a3d97a1980b3318fedf628222ebf1a7225 Implemented rset_dup. --- diff --git a/include/rset.h b/include/rset.h index 12f08f3..fd89b66 100644 --- a/include/rset.h +++ b/include/rset.h @@ -1,10 +1,13 @@ /* - * Copyright (C) 1994-1997, Index Data I/S + * Copyright (C) 1994-1998, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: rset.h,v $ - * Revision 1.13 1997-12-18 10:54:24 adam + * Revision 1.14 1998-02-10 11:56:46 adam + * Implemented rset_dup. + * + * Revision 1.13 1997/12/18 10:54:24 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. @@ -89,6 +92,7 @@ typedef struct rset { const rset_control *control; int flags; + int count; void *buf; } rset; @@ -108,6 +112,8 @@ RSET rset_create(const rset_control *sel, void *parms); /* parameters? */ void rset_delete(RSET rs); +RSET rset_dup (RSET rs); + /* void rset_rewind(RSET rs); */ #define rset_rewind(rs, rfd) (*(rs)->control->f_rewind)((rfd)) diff --git a/rset/rset.c b/rset/rset.c index b86b981..e0d1d80 100644 --- a/rset/rset.c +++ b/rset/rset.c @@ -1,10 +1,13 @@ /* - * Copyright (C) 1994-1995, Index Data I/S + * Copyright (C) 1994-1998, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: rset.c,v $ - * Revision 1.9 1996-10-29 13:55:21 adam + * Revision 1.10 1998-02-10 11:56:46 adam + * Implemented rset_dup. + * + * Revision 1.9 1996/10/29 13:55:21 adam * Include of zebrautl.h instead of alexutil.h. * * Revision 1.8 1995/12/11 09:15:23 adam @@ -53,12 +56,21 @@ RSET rset_create(const rset_control *sel, void *parms) rnew = xmalloc(sizeof(*rnew)); rnew->control = sel; rnew->flags = 0; + rnew->count = 1; rnew->buf = (*sel->f_create)(sel, parms, &rnew->flags); return rnew; } void rset_delete (RSET rs) { - (*rs->control->f_delete)(rs); + (rs->count)--; + if (!rs->count) + (*rs->control->f_delete)(rs); xfree(rs); } + +RSET rset_dup (RSET rs) +{ + (rs->count)++; + return rs; +}