Lines Matching refs:hash
93 static HashNode *_del_HashNode(HashTable *hash, HashNode *node);
94 static HashNode *_new_HashNode(HashTable *hash, const char *name, int code,
96 static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket,
98 static HashBucket *_find_HashBucket(HashTable *hash, const char *name);
216 HashTable *hash; /* The table to be returned */ in _new_HashTable() local
237 hash = (HashTable *) _new_FreeListNode(mem->hash_memory); in _new_HashTable()
238 if(!hash) { in _new_HashTable()
249 hash->mem = mem; in _new_HashTable()
250 hash->internal_mem = allocate_mem; in _new_HashTable()
251 hash->case_sensitive = hcase==HONOUR_CASE; in _new_HashTable()
252 hash->size = size; in _new_HashTable()
253 hash->bucket = NULL; in _new_HashTable()
254 hash->keycmp = hash->case_sensitive ? _ht_strcmp : _ht_lower_strcmp; in _new_HashTable()
255 hash->app_data = app_data; in _new_HashTable()
256 hash->del_fn = del_fn; in _new_HashTable()
260 hash->bucket = (HashBucket *) malloc(sizeof(HashBucket) * size); in _new_HashTable()
261 if(!hash->bucket) { in _new_HashTable()
263 return _del_HashTable(hash); in _new_HashTable()
269 HashBucket *b = hash->bucket + i; in _new_HashTable()
276 return hash; in _new_HashTable()
287 HashTable *_del_HashTable(HashTable *hash) in _del_HashTable() argument
289 if(hash) { in _del_HashTable()
293 if(hash->bucket) { in _del_HashTable()
294 _clear_HashTable(hash); in _del_HashTable()
295 free(hash->bucket); in _del_HashTable()
296 hash->bucket = NULL; in _del_HashTable()
301 if(hash->del_fn) in _del_HashTable()
302 hash->del_fn(hash->app_data); in _del_HashTable()
308 if(hash->internal_mem) in _del_HashTable()
309 _del_HashMemory(hash->mem, 1); in _del_HashTable()
311 hash = (HashTable *) _del_FreeListNode(hash->mem->hash_memory, hash); in _del_HashTable()
340 Symbol *_new_HashSymbol(HashTable *hash, const char *name, int code, in _new_HashSymbol() argument
348 if(!hash || !name) { in _new_HashSymbol()
355 bucket = _find_HashBucket(hash, name); in _new_HashSymbol()
359 node = _find_HashNode(hash, bucket, name, NULL); in _new_HashSymbol()
366 node->symbol.data = node->symbol.del_fn(hash->app_data, node->symbol.code, in _new_HashSymbol()
373 node = _new_HashNode(hash, name, code, fn, data, del_fn); in _new_HashSymbol()
395 Symbol *_del_HashSymbol(HashTable *hash, const char *name) in _del_HashSymbol() argument
397 if(hash && name) { in _del_HashSymbol()
398 HashBucket *bucket = _find_HashBucket(hash, name); in _del_HashSymbol()
400 HashNode *node = _find_HashNode(hash, bucket, name, &prev); in _del_HashSymbol()
420 (void) _del_HashNode(hash, node); in _del_HashSymbol()
436 Symbol *_find_HashSymbol(HashTable *hash, const char *name) in _find_HashSymbol() argument
443 if(!hash) in _find_HashSymbol()
453 bucket = _find_HashBucket(hash, name); in _find_HashSymbol()
457 node = _find_HashNode(hash, bucket, name, NULL); in _find_HashSymbol()
478 static HashNode *_new_HashNode(HashTable *hash, const char *name, int code, in _new_HashNode() argument
486 node = (HashNode *) _new_FreeListNode(hash->mem->node_memory); in _new_HashNode()
504 node->symbol.name = _new_StringMemString(hash->mem->string_memory, len); in _new_HashNode()
506 return _del_HashNode(hash, node); in _new_HashNode()
511 if(hash->case_sensitive) { in _new_HashNode()
535 static HashNode *_del_HashNode(HashTable *hash, HashNode *node) in _del_HashNode() argument
538 node->symbol.name = _del_StringMemString(hash->mem->string_memory, in _del_HashNode()
544 node->symbol.data = node->symbol.del_fn(hash->app_data, in _del_HashNode()
551 node = (HashNode *) _del_FreeListNode(hash->mem->node_memory, node); in _del_HashNode()
570 static HashBucket *_find_HashBucket(HashTable *hash, const char *name) in _find_HashBucket() argument
574 if(hash->case_sensitive) { in _find_HashBucket()
581 return hash->bucket + (h % hash->size); in _find_HashBucket()
600 static HashNode *_find_HashNode(HashTable *hash, HashBucket *bucket, in _find_HashNode() argument
609 node && hash->keycmp(node->symbol.name, name)!=0; in _find_HashNode()
675 int _clear_HashTable(HashTable *hash) in _clear_HashTable() argument
681 if(!hash) in _clear_HashTable()
686 for(i=0; i<hash->size; i++) { in _clear_HashTable()
687 HashBucket *bucket = hash->bucket + i; in _clear_HashTable()
694 (void) _del_HashNode(hash, node); in _clear_HashTable()
721 int _scan_HashTable(HashTable *hash, HASH_SCAN_FN(*scan_fn), void *context) in _scan_HashTable() argument
727 if(!hash || !scan_fn) in _scan_HashTable()
732 for(i=0; i<hash->size; i++) { in _scan_HashTable()
733 HashBucket *bucket = hash->bucket + i; in _scan_HashTable()