X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftermlists.c;h=19517d7778d2a0aa432d869d41208e837f7ab93e;hb=4b0c3f7b760ec6aaa688c09791b07cfa53d9ec47;hp=e586169bdf2184d764f2fa2f2d7c5e44fa6bc3e4;hpb=41b3d6e76417912fda803543325e1edba21896ba;p=pazpar2-moved-to-github.git diff --git a/src/termlists.c b/src/termlists.c index e586169..19517d7 100644 --- a/src/termlists.c +++ b/src/termlists.c @@ -1,9 +1,10 @@ /* - * $Id: termlists.c,v 1.2 2007-01-08 12:43:41 adam Exp $ + * $Id: termlists.c,v 1.5 2007-01-15 19:01:15 quinn Exp $ */ #include #include +#include #include #if HAVE_CONFIG_H @@ -69,7 +70,7 @@ struct termlist *termlist_create(NMEM nmem, int numterms, int highscore_size) hashsize <<= 1; res = nmem_malloc(nmem, sizeof(struct termlist)); res->hashtable = nmem_malloc(nmem, hashsize * sizeof(struct termlist_bucket*)); - bzero(res->hashtable, hashsize * sizeof(struct termlist_bucket*)); + memset(res->hashtable, 0, hashsize * sizeof(struct termlist_bucket*)); res->hashtable_size = hashsize; res->nmem = nmem; res->hashmask = hashsize - 1; // Creates a bitmask @@ -88,7 +89,7 @@ static void update_highscore(struct termlist *tl, struct termlist_score *t) int smallest; int me = -1; - if (t->frequency < tl->highscore_min) + if (tl->highscore_num > tl->highscore_size && t->frequency < tl->highscore_min) return; smallest = 0; @@ -101,6 +102,8 @@ static void update_highscore(struct termlist *tl, struct termlist_score *t) } if (tl->highscore_num) tl->highscore_min = tl->highscore[smallest]->frequency; + if (t->frequency < tl->highscore_min) + tl->highscore_min = t->frequency; if (me >= 0) return; if (tl->highscore_num < tl->highscore_size) @@ -122,11 +125,19 @@ void termlist_insert(struct termlist *tl, const char *term) { unsigned int bucket; struct termlist_bucket **p; + char buf[256], *cp; + + if (strlen(term) > 255) + return; + strcpy(buf, term); + for (cp = buf + strlen(buf) - 1; cp > buf && + (*cp == ',' || *cp == '.' || *cp == ' '); cp--) + *cp = '\0'; - bucket = hash((unsigned char *)term) & tl->hashmask; + bucket = hash((unsigned char *)buf) & tl->hashmask; for (p = &tl->hashtable[bucket]; *p; p = &(*p)->next) { - if (!strcmp(term, (*p)->term.term)) + if (!strcmp(buf, (*p)->term.term)) { (*p)->term.frequency++; update_highscore(tl, &((*p)->term)); @@ -137,7 +148,7 @@ void termlist_insert(struct termlist *tl, const char *term) { struct termlist_bucket *new = nmem_malloc(tl->nmem, sizeof(struct termlist_bucket)); - new->term.term = nmem_strdup(tl->nmem, term); + new->term.term = nmem_strdup(tl->nmem, buf); new->term.frequency = 1; new->next = 0; *p = new;