Home | History | Annotate | Download | only in src

Lines Matching refs:hash_table

430   GHashTable* hash_table = g_new0(GHashTable, 1);
432 hash_table->ref_count = 1;
433 hash_table->num_items = 0;
434 hash_table->capacity = HASH_MIN_CAPACITY;
435 hash_table->entries = g_new0(GHashEntry, hash_table->capacity);
436 hash_table->hash_func = hash_func ? hash_func : &_gpointer_hash;
437 hash_table->key_equal_func = key_equal_func;
439 return hash_table;
443 static void _g_hash_table_remove_all(GHashTable* hash_table) {
445 hash_table->num_items = 0;
446 memset(hash_table->entries,
448 sizeof(hash_table->entries[0]) * hash_table->capacity);
452 GHashTable* g_hash_table_ref(GHashTable* hash_table) {
453 if (!hash_table)
456 g_atomic_int_inc(&hash_table->ref_count);
457 return hash_table;
461 void g_hash_table_unref(GHashTable* hash_table) {
462 if (!hash_table)
465 if (!g_atomic_int_dec_and_test(&hash_table->ref_count))
468 _g_hash_table_remove_all(hash_table);
470 g_free(hash_table->entries);
471 hash_table->capacity = 0;
472 hash_table->entries = NULL;
474 g_free(hash_table);
478 void g_hash_table_destroy(GHashTable* hash_table) {
479 if (!hash_table)
482 _g_hash_table_remove_all(hash_table);
483 g_hash_table_unref(hash_table);
491 static guint _g_hash_table_lookup_index(GHashTable* hash_table,
494 guint hash = _g_hash_table_hash(hash_table, key);
497 guint probe_mask = (hash_table->capacity - 1);
502 GHashEntry* probe = &hash_table->entries[probe_index];
505 if (hash_table->key_equal_func) {
506 if (hash_table->key_equal_func(probe->key, key))
517 probe = &hash_table->entries[probe_index];
527 void* g_hash_table_lookup(GHashTable* hash_table,
530 guint probe_index = _g_hash_table_lookup_index(hash_table, key, &key_hash);
531 GHashEntry* entry = &hash_table->entries[probe_index];
538 static void _g_hash_table_remove_index(GHashTable* hash_table,
540 GHashEntry* entry = &hash_table->entries[i];
547 gboolean g_hash_table_remove(GHashTable* hash_table,
550 guint probe_index = _g_hash_table_lookup_index(hash_table, key, &key_hash);
551 GHashEntry* entry = &hash_table->entries[probe_index];
555 _g_hash_table_remove_index(hash_table, probe_index);
556 hash_table->num_items--;
561 static void _g_hash_table_resize(GHashTable* hash_table) {
562 guint old_capacity = hash_table->capacity;
565 guint new_size = hash_table->num_items * 2;
573 GHashEntry* old_entry = &hash_table->entries[n];
591 g_free(hash_table->entries);
592 hash_table->entries = new_entries;
593 hash_table->capacity = new_capacity;
594 hash_table->num_used = hash_table->num_items;
598 static void _g_hash_table_maybe_resize(GHashTable* hash_table) {
599 guint count = hash_table->num_items;
600 guint capacity = hash_table->capacity;
615 _g_hash_table_resize(hash_table);
619 static void _g_hash_table_insert_index(GHashTable* hash_table,
624 GHashEntry* entry = &hash_table->entries[key_index];
636 hash_table->num_items++;
642 hash_table->num_used++;
643 _g_hash_table_maybe_resize(hash_table);
646 void g_hash_table_insert(GHashTable* hash_table,
651 _g_hash_table_lookup_index(hash_table, key, &key_hash);
653 _g_hash_table_insert_index(hash_table, key_index, key_hash, key, value);
657 void g_hash_table_foreach(GHashTable* hash_table,
661 for (n = 0; n < hash_table->capacity; ++n) {
662 GHashEntry* entry = &hash_table->entries[n];
669 gpointer g_hash_table_find(GHashTable* hash_table,
673 for (n = 0; n < hash_table->capacity; ++n) {
674 GHashEntry* entry = &hash_table->entries[n];
684 guint g_hash_table_size(GHashTable* hash_table) {
685 return hash_table->num_items;