[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 02/10] tools/xenstore: do some cleanup of hashtable.c
Do the following cleanups: - hashtable_count() isn't used at all, so remove it - replace prime_table_length and max_load_factor with macros - make hash() static - add a loadlimit() helper function - remove the /***/ lines between functions - do some style corrections Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/xenstore/hashtable.c | 74 ++++++++++++++------------------------ tools/xenstore/hashtable.h | 10 ------ 2 files changed, 27 insertions(+), 57 deletions(-) diff --git a/tools/xenstore/hashtable.c b/tools/xenstore/hashtable.c index 1c8656e016..d312004d70 100644 --- a/tools/xenstore/hashtable.c +++ b/tools/xenstore/hashtable.c @@ -40,22 +40,25 @@ static const unsigned int primes[] = { 50331653, 100663319, 201326611, 402653189, 805306457, 1610612741 }; -const unsigned int prime_table_length = sizeof(primes)/sizeof(primes[0]); -const unsigned int max_load_factor = 65; /* percentage */ -/*****************************************************************************/ -/* indexFor */ -static inline unsigned int -indexFor(unsigned int tablelength, unsigned int hashvalue) { +#define PRIME_TABLE_LEN ARRAY_SIZE(primes) +#define MAX_LOAD_PERCENT 65 + +static inline unsigned int indexFor(unsigned int tablelength, + unsigned int hashvalue) +{ return (hashvalue % tablelength); } -/*****************************************************************************/ -struct hashtable * -create_hashtable(const void *ctx, unsigned int minsize, - unsigned int (*hashf) (void*), - int (*eqf) (void*,void*), - unsigned int flags) +static unsigned int loadlimit(unsigned int pindex) +{ + return ((uint64_t)primes[pindex] * MAX_LOAD_PERCENT) / 100; +} + +struct hashtable *create_hashtable(const void *ctx, unsigned int minsize, + unsigned int (*hashf) (void *), + int (*eqf) (void *,void *), + unsigned int flags) { struct hashtable *h; unsigned int pindex, size = primes[0]; @@ -64,7 +67,7 @@ create_hashtable(const void *ctx, unsigned int minsize, if (minsize > (1u << 30)) return NULL; /* Enforce size as prime */ - for (pindex=0; pindex < prime_table_length; pindex++) { + for (pindex=0; pindex < PRIME_TABLE_LEN; pindex++) { if (primes[pindex] > minsize) { size = primes[pindex]; break; } } @@ -81,7 +84,7 @@ create_hashtable(const void *ctx, unsigned int minsize, h->entrycount = 0; h->hashfn = hashf; h->eqfn = eqf; - h->loadlimit = (unsigned int)(((uint64_t)size * max_load_factor) / 100); + h->loadlimit = loadlimit(pindex); return h; err1: @@ -90,9 +93,7 @@ err0: return NULL; } -/*****************************************************************************/ -unsigned int -hash(struct hashtable *h, void *k) +static unsigned int hash(struct hashtable *h, void *k) { /* Aim to protect against poor hash functions by adding logic here * - logic taken from java 1.4 hashtable source */ @@ -104,9 +105,7 @@ hash(struct hashtable *h, void *k) return i; } -/*****************************************************************************/ -static int -hashtable_expand(struct hashtable *h) +static int hashtable_expand(struct hashtable *h) { /* Double the size of the table to accomodate more entries */ struct entry **newtable; @@ -114,7 +113,7 @@ hashtable_expand(struct hashtable *h) struct entry **pE; unsigned int newsize, i, index; /* Check we're not hitting max capacity */ - if (h->primeindex == (prime_table_length - 1)) return 0; + if (h->primeindex == (PRIME_TABLE_LEN - 1)) return 0; newsize = primes[++(h->primeindex)]; newtable = talloc_realloc(h, h->table, struct entry *, newsize); @@ -144,21 +143,11 @@ hashtable_expand(struct hashtable *h) } h->tablelength = newsize; - h->loadlimit = (unsigned int) - (((uint64_t)newsize * max_load_factor) / 100); + h->loadlimit = loadlimit(h->primeindex); return -1; } -/*****************************************************************************/ -unsigned int -hashtable_count(struct hashtable *h) -{ - return h->entrycount; -} - -/*****************************************************************************/ -int -hashtable_insert(struct hashtable *h, void *k, void *v) +int hashtable_insert(struct hashtable *h, void *k, void *v) { /* This method allows duplicate keys - but they shouldn't be used */ unsigned int index; @@ -182,9 +171,7 @@ hashtable_insert(struct hashtable *h, void *k, void *v) return -1; } -/*****************************************************************************/ -void * /* returns value associated with key */ -hashtable_search(struct hashtable *h, void *k) +void *hashtable_search(struct hashtable *h, void *k) { struct entry *e; unsigned int hashvalue, index; @@ -200,9 +187,7 @@ hashtable_search(struct hashtable *h, void *k) return NULL; } -/*****************************************************************************/ -void * /* returns value associated with key */ -hashtable_remove(struct hashtable *h, void *k) +void *hashtable_remove(struct hashtable *h, void *k) { /* TODO: consider compacting the table when the load factor drops enough, * or provide a 'compact' method. */ @@ -235,10 +220,8 @@ hashtable_remove(struct hashtable *h, void *k) return NULL; } -/*****************************************************************************/ -int -hashtable_iterate(struct hashtable *h, - int (*func)(void *k, void *v, void *arg), void *arg) +int hashtable_iterate(struct hashtable *h, + int (*func)(void *k, void *v, void *arg), void *arg) { int ret; unsigned int i; @@ -261,10 +244,7 @@ hashtable_iterate(struct hashtable *h, return 0; } -/*****************************************************************************/ -/* destroy */ -void -hashtable_destroy(struct hashtable *h) +void hashtable_destroy(struct hashtable *h) { unsigned int i; struct entry *e; diff --git a/tools/xenstore/hashtable.h b/tools/xenstore/hashtable.h index 07fdc1a82b..f1caef0d4f 100644 --- a/tools/xenstore/hashtable.h +++ b/tools/xenstore/hashtable.h @@ -75,16 +75,6 @@ hashtable_search(struct hashtable *h, void *k); void * /* returns value */ hashtable_remove(struct hashtable *h, void *k); -/***************************************************************************** - * hashtable_count - - * @name hashtable_count - * @param h the hashtable - * @return the number of items stored in the hashtable - */ -unsigned int -hashtable_count(struct hashtable *h); - /***************************************************************************** * hashtable_iterate -- 2.35.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |