diff options
Diffstat (limited to 'nsprpub/lib/ds/plhash.c')
-rw-r--r-- | nsprpub/lib/ds/plhash.c | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/nsprpub/lib/ds/plhash.c b/nsprpub/lib/ds/plhash.c index 0011df336..95497f06f 100644 --- a/nsprpub/lib/ds/plhash.c +++ b/nsprpub/lib/ds/plhash.c @@ -51,8 +51,9 @@ DefaultAllocEntry(void *pool, const void *key) static void PR_CALLBACK DefaultFreeEntry(void *pool, PLHashEntry *he, PRUintn flag) { - if (flag == HT_FREE_ENTRY) + if (flag == HT_FREE_ENTRY) { PR_Free(he); + } } static PLHashAllocOps defaultHashAllocOps = { @@ -72,15 +73,19 @@ PL_NewHashTable(PRUint32 n, PLHashFunction keyHash, n = MINBUCKETSLOG2; } else { n = PR_CeilingLog2(n); - if ((PRInt32)n < 0) + if ((PRInt32)n < 0) { return 0; + } } - if (!allocOps) allocOps = &defaultHashAllocOps; + if (!allocOps) { + allocOps = &defaultHashAllocOps; + } ht = (PLHashTable*)((*allocOps->allocTable)(allocPriv, sizeof *ht)); - if (!ht) - return 0; + if (!ht) { + return 0; + } memset(ht, 0, sizeof *ht); ht->shift = PL_HASH_BITS - n; n = 1 << n; @@ -202,7 +207,7 @@ PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep, oldbuckets = ht->buckets; nb = 2 * n * sizeof(PLHashEntry *); ht->buckets = (PLHashEntry**) - ((*ht->allocOps->allocTable)(ht->allocPriv, nb)); + ((*ht->allocOps->allocTable)(ht->allocPriv, nb)); if (!ht->buckets) { ht->buckets = oldbuckets; return 0; @@ -231,8 +236,9 @@ PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep, /* Make a new key value entry */ he = (*ht->allocOps->allocEntry)(ht->allocPriv, key); - if (!he) - return 0; + if (!he) { + return 0; + } he->keyHash = keyHash; he->key = key; he->value = value; @@ -256,8 +262,9 @@ PL_HashTableAdd(PLHashTable *ht, const void *key, void *value) /* key,value pair is already present in table */ return he; } - if (he->value) + if (he->value) { (*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_VALUE); + } he->value = value; return he; } @@ -280,7 +287,7 @@ PL_HashTableRawRemove(PLHashTable *ht, PLHashEntry **hep, PLHashEntry *he) oldbuckets = ht->buckets; nb = n * sizeof(PLHashEntry*) / 2; ht->buckets = (PLHashEntry**)( - (*ht->allocOps->allocTable)(ht->allocPriv, nb)); + (*ht->allocOps->allocTable)(ht->allocPriv, nb)); if (!ht->buckets) { ht->buckets = oldbuckets; return; @@ -315,8 +322,9 @@ PL_HashTableRemove(PLHashTable *ht, const void *key) keyHash = (*ht->keyHash)(key); hep = PL_HashTableRawLookup(ht, keyHash, key); - if ((he = *hep) == 0) + if ((he = *hep) == 0) { return PR_FALSE; + } /* Hit; remove element */ PL_HashTableRawRemove(ht, hep, he); @@ -414,11 +422,13 @@ PL_HashTableDumpMeter(PLHashTable *ht, PLHashEnumerator dump, FILE *fp) nbuckets = NBUCKETS(ht); for (i = 0; i < nbuckets; i++) { he = ht->buckets[i]; - if (!he) + if (!he) { continue; + } nchains++; - for (n = 0; he; he = he->next) + for (n = 0; he; he = he->next) { n++; + } variance += n * n; if (n > maxChainLen) { maxChainLen = n; @@ -434,15 +444,16 @@ PL_HashTableDumpMeter(PLHashTable *ht, PLHashEnumerator dump, FILE *fp) fprintf(fp, " number of grows: %u\n", ht->ngrows); fprintf(fp, " number of shrinks: %u\n", ht->nshrinks); fprintf(fp, " mean steps per hash: %g\n", (double)ht->nsteps - / ht->nlookups); + / ht->nlookups); fprintf(fp, "mean hash chain length: %g\n", mean); fprintf(fp, " standard deviation: %g\n", sqrt(variance)); fprintf(fp, " max hash chain length: %u\n", maxChainLen); fprintf(fp, " max hash chain: [%u]\n", maxChain); for (he = ht->buckets[maxChain], i = 0; he; he = he->next, i++) - if ((*dump)(he, i, fp) != HT_ENUMERATE_NEXT) + if ((*dump)(he, i, fp) != HT_ENUMERATE_NEXT) { break; + } } #endif /* HASHMETER */ @@ -465,8 +476,9 @@ PL_HashString(const void *key) const PRUint8 *s; h = 0; - for (s = (const PRUint8*)key; *s; s++) + for (s = (const PRUint8*)key; *s; s++) { h = PR_ROTATE_LEFT32(h, 4) ^ *s; + } return h; } |