* Sebastian Hammer, Adam Dickmeiss
*
* $Log: rsrel.c,v $
- * Revision 1.7 1995-10-12 12:41:57 adam
+ * Revision 1.9 1995-12-11 09:15:26 adam
+ * New set types: sand/sor/snot - ranked versions of and/or/not in
+ * ranked/semi-ranked result sets.
+ * Note: the snot not finished yet.
+ * New rset member: flag.
+ * Bug fix: r_delete in rsrel.c did free bad memory block.
+ *
+ * Revision 1.8 1995/12/05 11:25:45 adam
+ * Doesn't include math.h.
+ *
+ * Revision 1.7 1995/10/12 12:41:57 adam
* Private info (buf) moved from struct rset_control to struct rset.
* Bug fixes in relevance.
*
#include <stdio.h>
#include <stdlib.h>
-#include <math.h>
#include <assert.h>
#include <isam.h>
#include <rsrel.h>
#include <alexutil.h>
-static void *r_create(const struct rset_control *sel, void *parms);
+static void *r_create(const struct rset_control *sel, void *parms,
+ int *flags);
static RSFD r_open (RSET ct, int flag);
static void r_close (RSFD rfd);
static void r_delete (RSET ct);
static const rset_control control =
{
- "relevance set type",
+ "relevance",
r_create,
r_open,
r_close,
/* find min with lowest sysno */
for (i = 0; i<parms->no_isam_positions; i++)
if (isam_r[i] &&
- (min < 0 || (*parms->cmp)(isam_buf[i], isam_buf[min]) < 1))
+ (min < 0 || (*parms->cmp)(isam_buf[i], isam_buf[min]) < 2))
min = i;
if (min < 0)
break;
for (i = 0; i<parms->no_isam_positions; i++)
score += wgt[i];
/* if value is in the top score, then save it - don't emit yet */
- add_rec (info, score, isam_tmp_buf);
+ add_rec (info, score/parms->no_isam_positions, isam_tmp_buf);
}
for (i = 0; i<info->no_rec; i++)
info->sysno_idx[i] = i;
xfree (wgt);
}
-static void *r_create (const struct rset_control *sel, void *parms)
+static void *r_create (const struct rset_control *sel, void *parms,
+ int *flags)
{
rset_relevance_parms *r_parms = parms;
struct rset_rel_info *info;
+ *flags |= RSET_FLAG_RANKED;
info = xmalloc (sizeof(struct rset_rel_info));
info->key_size = r_parms->key_size;
assert (info->key_size > 1);
xfree (info->sort_idx);
xfree (info->sysno_idx);
xfree (info);
- xfree (ct);
}
static void r_rewind (RSFD rfd)