Home | History | Annotate | Download | only in minzip

Lines Matching refs:pHashTable

53     HashTable* pHashTable;
57 pHashTable = (HashTable*) malloc(sizeof(*pHashTable));
58 if (pHashTable == NULL)
61 pHashTable->tableSize = roundUpPower2(initialSize);
62 pHashTable->numEntries = pHashTable->numDeadEntries = 0;
63 pHashTable->freeFunc = freeFunc;
64 pHashTable->pEntries =
65 (HashEntry*) calloc((size_t)pHashTable->tableSize, sizeof(HashTable));
66 if (pHashTable->pEntries == NULL) {
67 free(pHashTable);
71 return pHashTable;
77 void mzHashTableClear(HashTable* pHashTable)
82 pEnt = pHashTable->pEntries;
83 for (i = 0; i < pHashTable->tableSize; i++, pEnt++) {
89 if (pHashTable->freeFunc != NULL)
90 (*pHashTable->freeFunc)(pEnt->data);
95 pHashTable->numEntries = 0;
96 pHashTable->numDeadEntries = 0;
102 void mzHashTableFree(HashTable* pHashTable)
104 if (pHashTable == NULL)
106 mzHashTableClear(pHashTable);
107 free(pHashTable->pEntries);
108 free(pHashTable);
115 static int countTombStones(HashTable* pHashTable)
119 for (count = i = 0; i < pHashTable->tableSize; i++) {
120 if (pHashTable->pEntries[i].data == HASH_TOMBSTONE)
137 static bool resizeHash(HashTable* pHashTable, int newSize)
142 assert(countTombStones(pHashTable) == pHashTable->numDeadEntries);
143 //LOGI("before: dead=%d\n", pHashTable->numDeadEntries);
149 for (i = 0; i < pHashTable->tableSize; i++) {
150 void* data = pHashTable->pEntries[i].data;
152 int hashValue = pHashTable->pEntries[i].hashValue;
165 free(pHashTable->pEntries);
166 pHashTable->pEntries = pNewEntries;
167 pHashTable->tableSize = newSize;
168 pHashTable->numDeadEntries = 0;
170 assert(countTombStones(pHashTable) == 0);
179 void* mzHashTableLookup(HashTable* pHashTable, unsigned int itemHash, void* item,
186 assert(pHashTable->tableSize > 0);
191 pEntry = &pHashTable->pEntries[itemHash & (pHashTable->tableSize-1)];
192 pEnd = &pHashTable->pEntries[pHashTable->tableSize];
199 //LOGD("+++ match on entry %d\n", pEntry - pHashTable->pEntries);
205 if (pHashTable->tableSize == 1)
207 pEntry = pHashTable->pEntries;
210 //LOGI("+++ look probing %d...\n", pEntry - pHashTable->pEntries);
217 pHashTable->numEntries++;
222 if ((pHashTable->numEntries+pHashTable->numDeadEntries) * LOAD_DENOM
223 > pHashTable->tableSize * LOAD_NUMER)
225 if (!resizeHash(pHashTable, pHashTable->tableSize * 2)) {
233 // pHashTable->numEntries, pHashTable->tableSize,
234 // (pHashTable->tableSize * LOAD_NUMER) / LOAD_DENOM);
238 assert(pHashTable->numEntries < pHashTable->tableSize);
255 bool mzHashTableRemove(HashTable* pHashTable, unsigned int itemHash, void* item)
260 assert(pHashTable->tableSize > 0);
263 pEntry = &pHashTable->pEntries[itemHash & (pHashTable->tableSize-1)];
264 pEnd = &pHashTable->pEntries[pHashTable->tableSize];
267 //LOGI("+++ stepping on entry %d\n", pEntry - pHashTable->pEntries);
269 pHashTable->numEntries--;
270 pHashTable->numDeadEntries++;
276 if (pHashTable->tableSize == 1)
278 pEntry = pHashTable->pEntries;
281 //LOGI("+++ del probing %d...\n", pEntry - pHashTable->pEntries);
292 int mzHashForeach(HashTable* pHashTable, HashForeachFunc func, void* arg)
296 for (i = 0; i < pHashTable->tableSize; i++) {
297 HashEntry* pEnt = &pHashTable->pEntries[i];
315 int countProbes(HashTable* pHashTable, unsigned int itemHash, const void* item,
322 assert(pHashTable->tableSize > 0);
327 pEntry = &pHashTable->pEntries[itemHash & (pHashTable->tableSize-1)];
328 pEnd = &pHashTable->pEntries[pHashTable->tableSize];
340 if (pHashTable->tableSize == 1)
342 pEntry = pHashTable->pEntries;
361 void mzHashTableProbeCount(HashTable* pHashTable, HashCalcFunc calcFunc,
370 for (mzHashIterBegin(pHashTable, &iter); !mzHashIterDone(&iter);
376 count = countProbes(pHashTable, (*calcFunc)(data), data, cmpFunc);
388 minProbe, maxProbe, totalProbe, numEntries, pHashTable->tableSize,