-/* $Id: rsbool.c,v 1.26 2004-05-30 18:09:31 adam Exp $
+/* $Id: rsbool.c,v 1.30 2004-06-16 20:32:07 adam Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
02111-1307, USA.
*/
-#define RSET_DEBUG 0
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rsbool.h>
#include <zebrautl.h>
-/* for key_logdump. Debugging only */
-#include <../index/index.h>
+#ifndef RSET_DEBUG
+#define RSET_DEBUG 0
+#endif
static void *r_create(RSET ct, const struct rset_control *sel, void *parms);
static RSFD r_open (RSET ct, int flag);
RSET rset_r;
int term_index_s;
int (*cmp)(const void *p1, const void *p2);
+ void (*log_item)(int logmask, const void *p, const char *txt);
struct rset_bool_rfd *rfd_list;
};
if (rset_is_volatile(info->rset_l) || rset_is_volatile(info->rset_r))
ct->flags |= RSET_FLAG_VOLATILE;
info->cmp = bool_parms->cmp;
+ info->log_item = bool_parms->log_item;
info->rfd_list = NULL;
info->term_index_s = info->rset_l->no_rset_terms;
{
struct rset_bool_info *info = ((struct rset_bool_rfd*)rfd)->info;
struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd;
- int cmp=0;
int rc;
#if RSET_DEBUG
rfd, rc, p->more_l, p->more_r);
#endif
return rc;
-
- if (p->more_l && p->more_r)
- cmp = (*info->cmp)(p->buf_l, p->buf_r);
- else if (p->more_l)
- cmp = -2;
- else
- cmp = 2;
- if ( (cmp<0) && (p->more_l) )
- {
- memcpy (buf, p->buf_l, info->key_size);
- *term_index = p->term_index_l;
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward returning L (cmp=%d)",cmp);
-#endif
- return 1;
- } else if ( (cmp>0) && (p->more_r) )
- {
- memcpy (buf, p->buf_r, info->key_size);
- *term_index = p->term_index_r + info->term_index_s;
-#if RSET_DEBUG
- logf (LOG_DEBUG, "rsbool_forward returning R (cmp=%d)",cmp);
-#endif
- return 1;
- }
- /* return ( p->more_l || p->more_r); */
- return 0;
}
static int r_count (RSET ct)
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] looping: m=%d/%d c=%d t=%d",
rfd, p->more_l, p->more_r, cmp, p->tail);
- key_logdump(LOG_DEBUG,p->buf_l);
- key_logdump(LOG_DEBUG,p->buf_r);
+ (*info->log_item)(LOG_DEBUG, p->buf_l, "left ");
+ (*info->log_item)(LOG_DEBUG, p->buf_r, "right ");
#endif
if (!cmp)
{
logf (LOG_DEBUG, "r_read_and [%p] returning R m=%d/%d c=%d",
rfd, p->more_l, p->more_r, cmp);
key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] returning L m=%d/%d c=%d",
rfd, p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and returning C m=%d/%d c=%d",
p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] returning R tail m=%d/%d c=%d",
rfd, p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
- } else
+ }
+ else
{
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] about to forward R m=%d/%d c=%d",
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] returning R tail m=%d/%d c=%d",
rfd, p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_and [%p] returning L tail m=%d/%d c=%d",
rfd, p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_or returning A m=%d/%d c=%d",
p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_or returning B m=%d/%d c=%d",
p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
#if RSET_DEBUG
logf (LOG_DEBUG, "r_read_or returning C m=%d/%d c=%d",
p->more_l, p->more_r, cmp);
- key_logdump(LOG_DEBUG,buf);
+ (*info->log_item)(LOG_DEBUG, buf, "");
#endif
return 1;
}
return 1;
}
else if (cmp > 1)
+ {
#if 0
p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r,
&p->term_index_r);
#else
- p->more_r = rset_forward(
- info->rset_r, p->rfd_r,
- p->buf_r, &p->term_index_r,
- (info->cmp), p->buf_l);
+ p->more_r = rset_forward(
+ info->rset_r, p->rfd_r,
+ p->buf_r, &p->term_index_r,
+ (info->cmp), p->buf_l);
#endif
+ }
else
{
memcpy (buf, p->buf_l, info->key_size);