X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftermlists.c;h=b40e5b026cf413e0edab895be20b731e282bebbb;hb=82ea73ba3f80b690a9c72e316f893561e05291f1;hp=892e6d9a5229bf6dd3c95f1fcd28f47a885a78b5;hpb=85a4a8d3f48c3d2c95efb6437b25f0804d966161;p=pazpar2-moved-to-github.git diff --git a/src/termlists.c b/src/termlists.c index 892e6d9..b40e5b0 100644 --- a/src/termlists.c +++ b/src/termlists.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2009 Index Data + Copyright (C) 2006-2010 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -42,8 +42,7 @@ struct termlist_bucket struct termlist { struct termlist_bucket **hashtable; - int hashtable_size; - int hashmask; + unsigned hash_size; struct termlist_score **highscore; int highscore_size; @@ -53,24 +52,14 @@ struct termlist NMEM nmem; }; -struct termlist *termlist_create(NMEM nmem, int numterms, int highscore_size) +struct termlist *termlist_create(NMEM nmem, int highscore_size) { - int hashsize = 1; - int halfnumterms; - struct termlist *res; - - // Calculate a hash size smallest power of 2 larger than 50% of expected numterms - halfnumterms = numterms >> 1; - if (halfnumterms < 0) - halfnumterms = 1; - while (hashsize < halfnumterms) - hashsize <<= 1; - res = nmem_malloc(nmem, sizeof(struct termlist)); - res->hashtable = nmem_malloc(nmem, hashsize * sizeof(struct termlist_bucket*)); - memset(res->hashtable, 0, hashsize * sizeof(struct termlist_bucket*)); - res->hashtable_size = hashsize; + struct termlist *res = nmem_malloc(nmem, sizeof(struct termlist)); + res->hash_size = 399; + res->hashtable = + nmem_malloc(nmem, res->hash_size * sizeof(struct termlist_bucket*)); + memset(res->hashtable, 0, res->hash_size * sizeof(struct termlist_bucket*)); res->nmem = nmem; - res->hashmask = hashsize - 1; // Creates a bitmask res->highscore = nmem_malloc(nmem, highscore_size * sizeof(struct termlist_score *)); res->highscore_size = highscore_size; @@ -131,7 +120,7 @@ void termlist_insert(struct termlist *tl, const char *term) for (cp = buf + strlen(buf); cp != buf && strchr(",. -", cp[-1]); cp--) cp[-1] = '\0'; - bucket = jenkins_hash((unsigned char *)buf) & tl->hashmask; + bucket = jenkins_hash((unsigned char *)buf) % tl->hash_size; for (p = &tl->hashtable[bucket]; *p; p = &(*p)->next) { if (!strcmp(buf, (*p)->term.term))