experimental processing-instruction based indexing XSLT added
[idzebra-moved-to-github.git] / rset / rsnull.c
1 /* $Id: rsnull.c,v 1.40 2007-01-15 15:10:19 adam Exp $
2    Copyright (C) 1995-2007
3    Index Data ApS
4
5 This file is part of the Zebra server.
6
7 Zebra is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20
21 */
22
23 #include <stdio.h>
24 #include <assert.h>
25 #include <idzebra/util.h>
26 #include <rset.h>
27
28 static RSFD r_open(RSET ct, int flag);
29 static void r_close(RSFD rfd);
30 static void r_delete(RSET ct);
31 static void r_pos(RSFD rfd, double *current, double *total);
32 static int r_read(RSFD rfd, void *buf, TERMID *term);
33 static int r_write(RSFD rfd, const void *buf);
34
35 static const struct rset_control control = 
36 {
37     "null",
38     r_delete,
39     rset_get_one_term,
40     r_open,
41     r_close,
42     0, /* no forward */
43     r_pos,
44     r_read,
45     r_write,
46 };
47
48 RSET rset_create_null(NMEM nmem, struct rset_key_control *kcontrol,
49                       TERMID term)
50 {
51     RSET rnew = rset_create_base(&control, nmem, kcontrol, 0, term, 0, 0);
52     rnew->priv = 0;
53     return rnew;
54 }
55
56 static RSFD r_open(RSET ct, int flag)
57 {
58     RSFD rfd;
59     if (flag & RSETF_WRITE)
60     {
61         yaz_log (YLOG_FATAL, "NULL set type is read-only");
62         return NULL;
63     }
64     rfd = rfd_create_base(ct);
65     rfd->priv = 0;
66     return rfd;
67 }
68
69 static void r_close(RSFD rfd)
70 {
71 }
72
73 static void r_delete(RSET ct)
74 {
75 }
76
77 static void r_pos(RSFD rfd, double *current, double *total)
78 {
79     assert(rfd);
80     assert(current);
81     assert(total);
82     *total = 0;
83     *current = 0;
84 }
85
86 static int r_read(RSFD rfd, void *buf, TERMID *term)
87 {
88     if (term)
89         *term = 0;
90     return 0;
91 }
92
93 static int r_write(RSFD rfd, const void *buf)
94 {
95     yaz_log(YLOG_FATAL, "NULL set type is read-only");
96     return -1;
97 }
98 /*
99  * Local variables:
100  * c-basic-offset: 4
101  * indent-tabs-mode: nil
102  * End:
103  * vim: shiftwidth=4 tabstop=8 expandtab
104  */
105