From c9fc602ad5c318d50707393caf62d1468697f500 Mon Sep 17 00:00:00 2001 From: graham.gower Date: Wed, 18 Nov 2009 19:24:08 -0500 Subject: Simplify hash_table somewhat. - Use djb2 hash http://www.cse.yorku.ca/~oz/hash.html Performs similarly to the existing function, but removes the need for a prime number of buckets. Doesn't need to do an strlen every insert either. - Add some more heuristics. Collected in realtime (cheap), no postprocessing. git-svn-id: http://opkg.googlecode.com/svn/trunk@336 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libopkg/opkg_conf.c') diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c index c69c3d1..04be3df 100644 --- a/libopkg/opkg_conf.c +++ b/libopkg/opkg_conf.c @@ -235,7 +235,7 @@ int opkg_conf_init(opkg_conf_t *conf, const args_t *args) pkg_hash_init("pkg-hash", &conf->pkg_hash, OPKG_CONF_DEFAULT_HASH_LEN); hash_table_init("file-hash", &conf->file_hash, OPKG_CONF_DEFAULT_HASH_LEN); - hash_table_init("obs-file-hash", &conf->obs_file_hash, OPKG_CONF_DEFAULT_HASH_LEN); + hash_table_init("obs-file-hash", &conf->obs_file_hash, OPKG_CONF_DEFAULT_HASH_LEN/16); if (conf->lists_dir == NULL) conf->lists_dir = xstrdup(OPKG_CONF_LISTS_DIR); @@ -381,31 +381,9 @@ void opkg_conf_deinit(opkg_conf_t *conf) #endif if (conf->verbosity >= OPKG_DEBUG) { - int i; - hash_table_t *hashes[] = { - &conf->pkg_hash, - &conf->file_hash, - &conf->obs_file_hash }; - for (i = 0; i < 3; i++) { - hash_table_t *hash = hashes[i]; - int c = 0; - int n_conflicts = 0; - int j; - for (j = 0; j < hash->n_entries; j++) { - int len = 0; - hash_entry_t *e = &hash->entries[j]; - if (e->next) - n_conflicts++; - while (e && e->key) { - len++; - e = e->next; - } - if (len > c) - c = len; - } - opkg_message(conf, OPKG_DEBUG, "hash_table[%s] n_buckets=%d n_elements=%d max_conflicts=%d n_conflicts=%d\n", - hash->name, hash->n_entries, hash->n_elements, c, n_conflicts); - } + hash_print_stats(&conf->pkg_hash); + hash_print_stats(&conf->file_hash); + hash_print_stats(&conf->obs_file_hash); } if (&conf->pkg_hash) -- cgit v0.9.1