578dc7cad293b3ce8ff01b5ab56889df9ed09708
[idzebra-moved-to-github.git] / rset / rsnull.c
1 /*
2  * Copyright (C) 1994-1995, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: rsnull.c,v $
7  * Revision 1.10  1998-03-05 08:36:28  adam
8  * New result set model.
9  *
10  * Revision 1.9  1997/12/18 10:54:25  adam
11  * New method result set method rs_hits that returns the number of
12  * hits in result-set (if known). The ranked result set returns real
13  * number of hits but only when not combined with other operands.
14  *
15  * Revision 1.8  1996/10/29 13:55:24  adam
16  * Include of zebrautl.h instead of alexutil.h.
17  *
18  * Revision 1.7  1995/12/11 09:15:25  adam
19  * New set types: sand/sor/snot - ranked versions of and/or/not in
20  * ranked/semi-ranked result sets.
21  * Note: the snot not finished yet.
22  * New rset member: flag.
23  * Bug fix: r_delete in rsrel.c did free bad memory block.
24  *
25  * Revision 1.6  1995/10/12  12:41:57  adam
26  * Private info (buf) moved from struct rset_control to struct rset.
27  * Bug fixes in relevance.
28  *
29  * Revision 1.5  1995/10/10  14:00:04  adam
30  * Function rset_open changed its wflag parameter to general flags.
31  *
32  * Revision 1.4  1995/10/06  14:38:06  adam
33  * New result set method: r_score.
34  * Local no (sysno) and score is transferred to retrieveCtrl.
35  *
36  * Revision 1.3  1995/09/08  14:52:42  adam
37  * Work on relevance feedback.
38  *
39  * Revision 1.2  1995/09/07  13:58:43  adam
40  * New parameter: result-set file descriptor (RSFD) to support multiple
41  * positions within the same result-set.
42  * Boolean operators: and, or, not implemented.
43  *
44  * Revision 1.1  1995/09/06  10:35:44  adam
45  * Null set implemented.
46  *
47  */
48
49 #include <stdio.h>
50 #include <rsnull.h>
51 #include <zebrautl.h>
52
53 static void *r_create(RSET ct, const struct rset_control *sel, void *parms);
54 static RSFD r_open (RSET ct, int flag);
55 static void r_close (RSFD rfd);
56 static void r_delete (RSET ct);
57 static void r_rewind (RSFD rfd);
58 static int r_count (RSET ct);
59 static int r_read (RSFD rfd, void *buf, int *term_index);
60 static int r_write (RSFD rfd, const void *buf);
61
62 static const struct rset_control control = 
63 {
64     "null",
65     r_create,
66     r_open,
67     r_close,
68     r_delete,
69     r_rewind,
70     r_count,
71     r_read,
72     r_write,
73 };
74
75 const struct rset_control *rset_kind_null = &control;
76
77 static void *r_create(RSET ct, const struct rset_control *sel, void *parms)
78 {
79     rset_null_parms *null_parms = parms;
80
81     ct->no_rset_terms = 1;
82     ct->rset_terms = xmalloc (sizeof(*ct->rset_terms));
83     if (parms)
84         ct->rset_terms[0] = null_parms->rset_term;
85     else
86         ct->rset_terms[0] = rset_term_create ("term", -1, "rank-0");
87     ct->rset_terms[0]->nn = 0;
88
89     return NULL;
90 }
91
92 static RSFD r_open (RSET ct, int flag)
93 {
94     if (flag & RSETF_WRITE)
95     {
96         logf (LOG_FATAL, "NULL set type is read-only");
97         return NULL;
98     }
99     return "";
100 }
101
102 static void r_close (RSFD rfd)
103 {
104 }
105
106 static void r_delete (RSET ct)
107 {
108     rset_term_destroy (ct->rset_terms[0]);
109     xfree (ct->rset_terms);
110 }
111
112 static void r_rewind (RSFD rfd)
113 {
114     logf (LOG_DEBUG, "rsnull_rewind");
115 }
116
117 static int r_count (RSET ct)
118 {
119     return 0;
120 }
121
122 static int r_read (RSFD rfd, void *buf, int *term_index)
123 {
124     *term_index = -1;
125     return 0;
126 }
127
128 static int r_write (RSFD rfd, const void *buf)
129 {
130     logf (LOG_FATAL, "NULL set type is read-only");
131     return -1;
132 }
133