Lines Matching refs:hash

91 static HashNode *_del_HashNode(HashTable *hash, HashNode *node);
92 static HashNode *_new_HashNode(HashTable *hash, const char *name, int code,
94 static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket,
96 static HashBucket *_find_HashBucket(HashTable *hash, const char *name);
214 HashTable *hash; /* The table to be returned */ in _new_HashTable() local
235 hash = (HashTable *) _new_FreeListNode(mem->hash_memory); in _new_HashTable()
236 if(!hash) { in _new_HashTable()
247 hash->mem = mem; in _new_HashTable()
248 hash->internal_mem = allocate_mem; in _new_HashTable()
249 hash->case_sensitive = hcase==HONOUR_CASE; in _new_HashTable()
250 hash->size = size; in _new_HashTable()
251 hash->bucket = NULL; in _new_HashTable()
252 hash->keycmp = hash->case_sensitive ? _ht_strcmp : _ht_lower_strcmp; in _new_HashTable()
253 hash->app_data = app_data; in _new_HashTable()
254 hash->del_fn = del_fn; in _new_HashTable()
258 hash->bucket = (HashBucket *) malloc(sizeof(HashBucket) * size); in _new_HashTable()
259 if(!hash->bucket) { in _new_HashTable()
261 return _del_HashTable(hash); in _new_HashTable()
267 HashBucket *b = hash->bucket + i; in _new_HashTable()
274 return hash; in _new_HashTable()
285 HashTable *_del_HashTable(HashTable *hash) in _del_HashTable() argument
287 if(hash) { in _del_HashTable()
291 if(hash->bucket) { in _del_HashTable()
292 _clear_HashTable(hash); in _del_HashTable()
293 free(hash->bucket); in _del_HashTable()
294 hash->bucket = NULL; in _del_HashTable()
299 if(hash->del_fn) in _del_HashTable()
300 hash->del_fn(hash->app_data); in _del_HashTable()
306 if(hash->internal_mem) in _del_HashTable()
307 _del_HashMemory(hash->mem, 1); in _del_HashTable()
309 hash = (HashTable *) _del_FreeListNode(hash->mem->hash_memory, hash); in _del_HashTable()
338 Symbol *_new_HashSymbol(HashTable *hash, const char *name, int code, in _new_HashSymbol() argument
346 if(!hash || !name) { in _new_HashSymbol()
353 bucket = _find_HashBucket(hash, name); in _new_HashSymbol()
357 node = _find_HashNode(hash, bucket, name, NULL); in _new_HashSymbol()
364 node->symbol.data = node->symbol.del_fn(hash->app_data, node->symbol.code, in _new_HashSymbol()
371 node = _new_HashNode(hash, name, code, fn, data, del_fn); in _new_HashSymbol()
393 Symbol *_del_HashSymbol(HashTable *hash, const char *name) in _del_HashSymbol() argument
395 if(hash && name) { in _del_HashSymbol()
396 HashBucket *bucket = _find_HashBucket(hash, name); in _del_HashSymbol()
398 HashNode *node = _find_HashNode(hash, bucket, name, &prev); in _del_HashSymbol()
418 (void) _del_HashNode(hash, node); in _del_HashSymbol()
434 Symbol *_find_HashSymbol(HashTable *hash, const char *name) in _find_HashSymbol() argument
441 if(!hash) in _find_HashSymbol()
451 bucket = _find_HashBucket(hash, name); in _find_HashSymbol()
455 node = _find_HashNode(hash, bucket, name, NULL); in _find_HashSymbol()
476 static HashNode *_new_HashNode(HashTable *hash, const char *name, int code, in _new_HashNode() argument
484 node = (HashNode *) _new_FreeListNode(hash->mem->node_memory); in _new_HashNode()
502 node->symbol.name = _new_StringMemString(hash->mem->string_memory, len); in _new_HashNode()
504 return _del_HashNode(hash, node); in _new_HashNode()
509 if(hash->case_sensitive) { in _new_HashNode()
533 static HashNode *_del_HashNode(HashTable *hash, HashNode *node) in _del_HashNode() argument
536 node->symbol.name = _del_StringMemString(hash->mem->string_memory, in _del_HashNode()
542 node->symbol.data = node->symbol.del_fn(hash->app_data, in _del_HashNode()
549 node = (HashNode *) _del_FreeListNode(hash->mem->node_memory, node); in _del_HashNode()
568 static HashBucket *_find_HashBucket(HashTable *hash, const char *name) in _find_HashBucket() argument
572 if(hash->case_sensitive) { in _find_HashBucket()
579 return hash->bucket + (h % hash->size); in _find_HashBucket()
598 static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket, in _find_HashNode() argument
607 node && hash->keycmp(node->symbol.name, name)!=0; in _find_HashNode()
673 int _clear_HashTable(HashTable *hash) in _clear_HashTable() argument
679 if(!hash) in _clear_HashTable()
684 for(i=0; i<hash->size; i++) { in _clear_HashTable()
685 HashBucket *bucket = hash->bucket + i; in _clear_HashTable()
692 (void) _del_HashNode(hash, node); in _clear_HashTable()
719 int _scan_HashTable(HashTable *hash, HASH_SCAN_FN(*scan_fn), void *context) in _scan_HashTable() argument
725 if(!hash || !scan_fn) in _scan_HashTable()
730 for(i=0; i<hash->size; i++) { in _scan_HashTable()
731 HashBucket *bucket = hash->bucket + i; in _scan_HashTable()