X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frset.c;h=e0d1d8089c732add50f06552ffa9e08ade0b62bf;hb=bfaff2a3d97a1980b3318fedf628222ebf1a7225;hp=2b5e57fb1ead185ee9a26c56eafa836d65e23e2f;hpb=c427496a1254a039887e02c8bb7ce1d673bb251b;p=idzebra-moved-to-github.git diff --git a/rset/rset.c b/rset/rset.c index 2b5e57f..e0d1d80 100644 --- a/rset/rset.c +++ b/rset/rset.c @@ -1,10 +1,38 @@ /* - * Copyright (C) 1994, 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.3 1995-09-04 15:20:39 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 + * New set types: sand/sor/snot - ranked versions of and/or/not in + * ranked/semi-ranked result sets. + * Note: the snot not finished yet. + * New rset member: flag. + * Bug fix: r_delete in rsrel.c did free bad memory block. + * + * Revision 1.7 1995/10/12 12:41:56 adam + * Private info (buf) moved from struct rset_control to struct rset. + * Bug fixes in relevance. + * + * Revision 1.6 1995/09/08 14:52:41 adam + * Work on relevance feedback. + * + * Revision 1.5 1995/09/07 13:58:43 adam + * New parameter: result-set file descriptor (RSFD) to support multiple + * positions within the same result-set. + * Boolean operators: and, or, not implemented. + * + * Revision 1.4 1995/09/06 16:11:56 adam + * More work on boolean sets. + * + * Revision 1.3 1995/09/04 15:20:39 adam * More work on temp sets. is_open member removed. * * Revision 1.2 1995/09/04 12:33:56 adam @@ -16,23 +44,33 @@ */ #include -#include +#include #include RSET rset_create(const rset_control *sel, void *parms) { - RSET new; + RSET rnew; - new = xmalloc(sizeof(*new)); /* make dynamic alloc scheme */ - if (!(new->control = (*sel->f_create)(sel, parms))) - return 0; - return new; + logf (LOG_DEBUG, "rs_create(%s)", sel->desc); + 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) +void rset_delete (RSET rs) { - rset_close(rs); - (*rs->control->f_delete)(rs->control); + (rs->count)--; + if (!rs->count) + (*rs->control->f_delete)(rs); xfree(rs); } + +RSET rset_dup (RSET rs) +{ + (rs->count)++; + return rs; +}