summaryrefslogtreecommitdiffstats
path: root/libopkg/opkg_conf.c
diff options
context:
space:
mode:
authorgraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2009-11-18 19:24:08 (EST)
committer graham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2009-11-18 19:24:08 (EST)
commitc9fc602ad5c318d50707393caf62d1468697f500 (patch)
treed120cc65e972a48cb2ee51349e12834715595868 /libopkg/opkg_conf.c
parent8d9e0ecb10ca5fd8b3ae1bdcf244291e75654740 (diff)
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
Diffstat (limited to 'libopkg/opkg_conf.c')
-rw-r--r--libopkg/opkg_conf.c30
1 files changed, 4 insertions, 26 deletions
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)