X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=91d362797339cfdb7516f97a7e9441cd1e10b761;hb=70effaa5a4a18f1bef9c6111dc082bb8714e4c19;hp=11ac10116a4223011a5a95da6f9be6e7194317aa;hpb=863d336f803da454e03f39ee2225719fed05021e;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index 11ac101..91d3627 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.57 2004-08-20 14:44:46 heikki Exp $ +/* $Id: zsets.c,v 1.59 2004-08-31 10:43:35 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -46,6 +46,7 @@ struct zebra_set { char *name; RSET rset; NMEM nmem; + NMEM rset_nmem; /* for creating the rsets in */ zint hits; int num_bases; char **basenames; @@ -88,6 +89,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, zebraSet->locked = 1; zebraSet->rpn = 0; zebraSet->nmem = m; + zebraSet->rset_nmem=nmem_create(); /* FIXME - where to free this ?? */ zebraSet->num_bases = num_bases; zebraSet->basenames = @@ -96,8 +98,8 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, zebraSet->basenames[i] = nmem_strdup (zebraSet->nmem, basenames[i]); - zebraSet->rset = rpn_search (zh, zebraSet->nmem, rpn, - zebraSet->num_bases, + zebraSet->rset = rpn_search (zh, zebraSet->nmem, zebraSet->rset_nmem, + rpn, zebraSet->num_bases, zebraSet->basenames, zebraSet->name, zebraSet); zh->hits = zebraSet->hits; @@ -237,6 +239,7 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) s->term_entries = 0; s->hits = 0; s->rset = 0; + s->rset_nmem=0; s->nmem = 0; s->rpn = 0; return s; @@ -254,7 +257,7 @@ ZebraSet resultSetGet (ZebraHandle zh, const char *name) NMEM nmem = nmem_create (); yaz_log (LOG_LOG, "research %s", name); s->rset = - rpn_search (zh, nmem, s->rpn, s->num_bases, + rpn_search (zh, nmem, s->rset_nmem, s->rpn, s->num_bases, s->basenames, s->name, s); nmem_destroy (nmem); } @@ -272,6 +275,9 @@ void resultSetInvalidate (ZebraHandle zh) if (s->rset) rset_delete (s->rset); s->rset = 0; + if (s->rset_nmem) + nmem_destroy(s->rset_nmem); + s->rset_nmem=0; } } @@ -312,6 +318,8 @@ void resultSetDestroy (ZebraHandle zh, int num, char **names,int *statuses) nmem_destroy (s->nmem); if (s->rset) rset_delete (s->rset); + if (s->rset_nmem) + nmem_destroy(s->rset_nmem); xfree (s->name); xfree (s); } @@ -395,7 +403,7 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, while (num_i < num && positions[num_i] < position) num_i++; rfd = rset_open (rset, RSETF_READ); - while (num_i < num && rset_read (rset, rfd, &key)) + while (num_i < num && rset_read (rfd, &key)) { #if IT_KEY_NEW zint this_sys = key.mem[0]; @@ -425,7 +433,7 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, } } } - rset_close (rset, rfd); + rset_close (rfd); } } return sr; @@ -682,7 +690,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, } } rfd = rset_open (rset, RSETF_READ); - while (rset_read (rset, rfd, &key)) + while (rset_read (rfd, &key)) { #if IT_KEY_NEW zint this_sys = key.mem[0]; @@ -697,7 +705,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, sort_criteria, num_criteria, psysno); } } - rset_close (rset, rfd); + rset_close (rfd); #if 0 for (i = 0; i < rset->no_rset_terms; i++) @@ -752,7 +760,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) } rc = rank_class->control; - if (rset_read (rset, rfd, &key)) + if (rset_read (rfd, &key)) { #if IT_KEY_NEW zint psysno = key.mem[0]; @@ -788,7 +796,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) if ( (est==-2) && (zebraSet->hits==esthits)) { /* time to estimate the hits */ - rset_pos(rset,rfd,&cur,&tot); + rset_pos(rfd,&cur,&tot); if (tot>0) { ratio=cur/tot; est=(zint)(0.5+zebraSet->hits/ratio); @@ -808,13 +816,13 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) } } } - while (rset_read (rset, rfd, &key) && (est<0) ); + while (rset_read (rfd, &key) && (est<0) ); score = (*rc->calc) (handle, psysno); resultSetInsertRank (zh, sort_info, psysno, score, 'A'); (*rc->end) (zh->reg, handle); } - rset_close (rset, rfd); + rset_close (rfd); /* for (i = 0; i < rset->no_rset_terms; i++) {