Implemented rset_dup.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 10 Feb 1998 11:56:46 +0000 (11:56 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 10 Feb 1998 11:56:46 +0000 (11:56 +0000)
include/rset.h
rset/rset.c

index 12f08f3..fd89b66 100644 (file)
@@ -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))
 
index b86b981..e0d1d80 100644 (file)
@@ -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;
+}