X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frsrel.c;h=2f7af4c0e6982b5142d1c7f1f12b3cf8c85f12b1;hb=7b0a5daa703117cde2dc0d54d5a39941a1c01ce8;hp=63736e74fcb221e37f0c5b9bc7b0cf8aacf28722;hpb=62f6cad37f14a19d9c1ce763ea54a61b350c7881;p=idzebra-moved-to-github.git diff --git a/rset/rsrel.c b/rset/rsrel.c index 63736e7..2f7af4c 100644 --- a/rset/rsrel.c +++ b/rset/rsrel.c @@ -4,7 +4,14 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rsrel.c,v $ - * Revision 1.8 1995-12-05 11:25:45 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 @@ -40,7 +47,8 @@ #include #include -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); @@ -52,7 +60,7 @@ static int r_score (RSFD rfd, int *score); static const rset_control control = { - "relevance set type", + "relevance", r_create, r_open, r_close, @@ -164,7 +172,7 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) /* find min with lowest sysno */ for (i = 0; ino_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; @@ -197,7 +205,7 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) for (i = 0; ino_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; ino_rec; i++) info->sysno_idx[i] = i; @@ -216,11 +224,13 @@ static void relevance (struct rset_rel_info *info, rset_relevance_parms *parms) 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); @@ -284,7 +294,6 @@ static void r_delete (RSET ct) xfree (info->sort_idx); xfree (info->sysno_idx); xfree (info); - xfree (ct); } static void r_rewind (RSFD rfd)