-/* $Id: limit.c,v 1.2 2005-05-09 10:16:13 adam Exp $
- Copyright (C) 1995-2005
- Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+ Copyright (C) 1994-2009 Index Data
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
*/
#include <stdio.h>
#include <yaz/diagbib1.h>
#include "index.h"
+#define ZEBRA_LIMIT_DEBUG 0
+
struct zebra_limit {
int complement_flag;
zint *ids;
{
struct zebra_limit *zl = 0;
size_t i;
- for (i = 0; ids && ids[i]; i++)
- ;
- if (i)
+ if (ids)
{
+ for (i = 0; ids[i]; i++)
+ ;
zl = xmalloc(sizeof(*zl));
zl->ids = xmalloc((i+1) * sizeof(*ids));
memcpy(zl->ids, ids, (i+1) * sizeof(*ids));
const struct it_key *key = buf;
size_t i;
- if (key->len != 3)
- return 1;
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, "zebra_limit_filter_cb zl=%p key->len=%d", zl, key->len);
+#endif
for (i = 0; zl->ids[i]; i++)
+ {
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, " i=%d ids=" ZINT_FORMAT " mem=" ZINT_FORMAT,
+ i, zl->ids[i], key->mem[1]);
+#endif
if (zl->ids[i] == key->mem[1])
+ {
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, " match. Ret=%d", zl->complement_flag ? 0:1);
+#endif
return zl->complement_flag ? 0 : 1;
- return zl->complement_flag ? 0 : 1;
+ }
+ }
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, " no match. Ret=%d", zl->complement_flag ? 1:0);
+#endif
+ return zl->complement_flag ? 1 : 0;
}
static void zebra_limit_destroy_cb(void *data)
void (**filter_destroy)(void *data),
void **filter_data)
{
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, "zebra_limit_for_rset debug enabled zl=%p", zl);
+#endif
if (zl && zl->ids)
{
struct zebra_limit *hl;
+#if ZEBRA_LIMIT_DEBUG
+ yaz_log(YLOG_LOG, "enable limit");
+#endif
hl = zebra_limit_create(zl->complement_flag, zl->ids);
*filter_data = hl;
*filter_func = zebra_limit_filter_cb;
}
}
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+