GDestroyNotify value_destroy_func;
};
-#define G_HASH_TABLE_RESIZE(hash_table) \
- G_STMT_START { \
- if ((hash_table->size >= 3 * hash_table->nnodes && \
- hash_table->size > HASH_TABLE_MIN_SIZE) || \
- (3 * hash_table->size <= hash_table->nnodes && \
- hash_table->size < HASH_TABLE_MAX_SIZE)) \
- g_hash_table_resize (hash_table); \
- } G_STMT_END
-
static void g_hash_table_resize (GHashTable *hash_table);
static GHashNode** g_hash_table_lookup_node (GHashTable *hash_table,
gconstpointer key,
static void g_hash_table_remove_all_nodes (GHashTable *hash_table,
gboolean notify);
+static inline void
+g_hash_table_maybe_resize (GHashTable *hash_table)
+{
+ gint nnodes = hash_table->nnodes;
+ gint size = hash_table->size;
+
+ if ((size >= 3 * nnodes && size > HASH_TABLE_MIN_SIZE) ||
+ (3 * size <= nnodes && size < HASH_TABLE_MAX_SIZE))
+ g_hash_table_resize (hash_table);
+}
/**
* g_hash_table_new:
{
*node = g_hash_node_new (key, value, key_hash);
hash_table->nnodes++;
- G_HASH_TABLE_RESIZE (hash_table);
+ g_hash_table_maybe_resize (hash_table);
}
}
return FALSE;
g_hash_table_remove_node (hash_table, &node_ptr, notify);
- G_HASH_TABLE_RESIZE (hash_table);
+ g_hash_table_maybe_resize (hash_table);
return TRUE;
}
g_return_if_fail (hash_table != NULL);
g_hash_table_remove_all_nodes (hash_table, TRUE);
- G_HASH_TABLE_RESIZE (hash_table);
+ g_hash_table_maybe_resize (hash_table);
}
/**
g_return_if_fail (hash_table != NULL);
g_hash_table_remove_all_nodes (hash_table, FALSE);
- G_HASH_TABLE_RESIZE (hash_table);
+ g_hash_table_maybe_resize (hash_table);
}
/**
else
node_ptr = &node->next;
- G_HASH_TABLE_RESIZE (hash_table);
+ g_hash_table_maybe_resize (hash_table);
return deleted;
}