X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=rset%2Frsrel.c;h=2f7af4c0e6982b5142d1c7f1f12b3cf8c85f12b1;hb=85df66537199c30a492ad54be4fbe25fa77e18c8;hp=30dd4edcd225cfec97cfbafede2723f8e7e6a318;hpb=5c7ad71f534d092eaf97f04dd39c5e874e0d45b0;p=idzebra-moved-to-github.git diff --git a/rset/rsrel.c b/rset/rsrel.c index 30dd4ed..2f7af4c 100644 --- a/rset/rsrel.c +++ b/rset/rsrel.c @@ -4,7 +4,17 @@ * 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. * @@ -31,14 +41,14 @@ #include #include -#include #include #include #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); @@ -50,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, @@ -162,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; @@ -195,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; @@ -214,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); @@ -282,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)