Lines Matching defs:ht

49 /* Compute the number of buckets in ht */
50 #define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
116 PLHashTable *ht;
129 ht = (PLHashTable*)((*allocOps->allocTable)(allocPriv, sizeof *ht));
130 if (!ht)
132 memset(ht, 0, sizeof *ht);
133 ht->shift = PL_HASH_BITS - n;
137 (*allocOps->freeTable)(allocPriv, ht);
142 ht->buckets = (PLHashEntry**)((*allocOps->allocTable)(allocPriv, nb));
143 if (!ht->buckets) {
144 (*allocOps->freeTable)(allocPriv, ht);
147 memset(ht->buckets, 0, nb);
149 ht->keyHash = keyHash;
150 ht->keyCompare = keyCompare;
151 ht->valueCompare = valueCompare;
152 ht->allocOps = allocOps;
153 ht->allocPriv = allocPriv;
154 return ht;
158 PL_HashTableDestroy(PLHashTable *ht)
162 const PLHashAllocOps *allocOps = ht->allocOps;
163 void *allocPriv = ht->allocPriv;
165 n = NBUCKETS(ht);
167 for (he = ht->buckets[i]; he; he = next) {
173 memset(ht->buckets, 0xDB, n * sizeof ht->buckets[0]);
175 (*allocOps->freeTable)(allocPriv, ht->buckets);
177 memset(ht, 0xDB, sizeof *ht);
179 (*allocOps->freeTable)(allocPriv, ht);
188 PL_HashTableRawLookup(PLHashTable *ht, PLHashNumber keyHash, const void *key)
194 ht->nlookups++;
197 h >>= ht->shift;
198 hep = hep0 = &ht->buckets[h];
200 if (he->keyHash == keyHash && (*ht->keyCompare)(key, he->key)) {
211 ht->nsteps++;
221 PL_HashTableRawLookupConst(PLHashTable *ht, PLHashNumber keyHash,
228 ht->nlookups++;
231 h >>= ht->shift;
232 hep = &ht->buckets[h];
234 if (he->keyHash == keyHash && (*ht->keyCompare)(key, he->key)) {
239 ht->nsteps++;
246 PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep,
254 n = NBUCKETS(ht);
255 if (ht->nentries >= OVERLOADED(n)) {
256 oldbuckets = ht->buckets;
262 ht->buckets = (PLHashEntry**)
263 ((*ht->allocOps->allocTable)(ht->allocPriv, nb));
264 if (!ht->buckets) {
265 ht->buckets = oldbuckets;
268 memset(ht->buckets, 0, nb);
270 ht->ngrows++;
272 ht->shift--;
277 hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
286 (*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
287 hep = PL_HashTableRawLookup(ht, keyHash, key);
291 he = (*ht->allocOps->allocEntry)(ht->allocPriv, key);
299 ht->nentries++;
304 PL_HashTableAdd(PLHashTable *ht, const void *key, void *value)
309 keyHash = (*ht->keyHash)(key);
310 hep = PL_HashTableRawLookup(ht, keyHash, key);
313 if ((*ht->valueCompare)(he->value, value)) {
318 (*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_VALUE);
322 return PL_HashTableRawAdd(ht, hep, keyHash, key, value);
326 PL_HashTableRawRemove(PLHashTable *ht, PLHashEntry **hep, PLHashEntry *he)
333 (*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_ENTRY);
336 n = NBUCKETS(ht);
337 if (--ht->nentries < UNDERLOADED(n)) {
338 oldbuckets = ht->buckets;
340 ht->buckets = (PLHashEntry**)(
341 (*ht->allocOps->allocTable)(ht->allocPriv, nb));
342 if (!ht->buckets) {
343 ht->buckets = oldbuckets;
346 memset(ht->buckets, 0, nb);
348 ht->nshrinks++;
350 ht->shift++;
355 hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
364 (*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
369 PL_HashTableRemove(PLHashTable *ht, const void *key)
374 keyHash = (*ht->keyHash)(key);
375 hep = PL_HashTableRawLookup(ht, keyHash, key);
380 PL_HashTableRawRemove(ht, hep, he);
385 PL_HashTableLookup(PLHashTable *ht, const void *key)
390 keyHash = (*ht->keyHash)(key);
391 hep = PL_HashTableRawLookup(ht, keyHash, key);
402 PL_HashTableLookupConst(PLHashTable *ht, const void *key)
407 keyHash = (*ht->keyHash)(key);
408 hep = PL_HashTableRawLookupConst(ht, keyHash, key);
421 PL_HashTableEnumerateEntries(PLHashTable *ht, PLHashEnumerator f, void *arg)
428 nbuckets = NBUCKETS(ht);
430 hep = &ht->buckets[i];
452 PL_HashTableRawRemove(ht, hep, he);
462 PL_HashTableDumpMeter(PLHashTable *ht, PLHashEnumerator dump, FILE *fp)
472 nbuckets = NBUCKETS(ht);
474 he = ht->buckets[i];
486 mean = (double)ht->nentries / nchains;
490 fprintf(fp, " number of lookups: %u\n", ht->nlookups);
491 fprintf(fp, " number of entries: %u\n", ht->nentries);
492 fprintf(fp, " number of grows: %u\n", ht->ngrows);
493 fprintf(fp, " number of shrinks: %u\n", ht->nshrinks);
494 fprintf(fp, " mean steps per hash: %g\n", (double)ht->nsteps
495 / ht->nlookups);
501 for (he = ht->buckets[maxChain], i = 0; he; he = he->next, i++)
508 PL_HashTableDump(PLHashTable *ht, PLHashEnumerator dump, FILE *fp)
512 count = PL_HashTableEnumerateEntries(ht, dump, fp);
514 PL_HashTableDumpMeter(ht, dump, fp);