diff options
author | Ian Wienand <ianw@ieee.org> | 2006-02-20 22:44:45 +0100 |
---|---|---|
committer | Ian Wienand <ianw@debian.org> | 2006-02-20 22:44:45 +0100 |
commit | 9a2ad351a1c3215dc596ff3e2e3fd4bc24445a6b (patch) | |
tree | 01bd7628615527758c5a4d0f4242b8cc87508082 /dict.c | |
parent | 5570a7769869a4df25ef85f302f74a7feb6c0cd3 (diff) | |
download | ltrace-9a2ad351a1c3215dc596ff3e2e3fd4bc24445a6b.tar.gz |
Switched to SVN (initial import)
Diffstat (limited to 'dict.c')
-rw-r--r-- | dict.c | 87 |
1 files changed, 40 insertions, 47 deletions
@@ -13,27 +13,26 @@ struct dict_entry { unsigned int hash; - void *key; - void *value; - struct dict_entry *next; + void * key; + void * value; + struct dict_entry * next; }; /* #define DICTTABLESIZE 97 */ -#define DICTTABLESIZE 997 /* Semi-randomly selected prime number. */ +#define DICTTABLESIZE 997 /* Semi-randomly selected prime number. */ /* #define DICTTABLESIZE 9973 */ /* #define DICTTABLESIZE 99991 */ /* #define DICTTABLESIZE 999983 */ struct dict { - struct dict_entry *buckets[DICTTABLESIZE]; - unsigned int (*key2hash) (void *); - int (*key_cmp) (void *, void *); + struct dict_entry * buckets[DICTTABLESIZE]; + unsigned int (*key2hash)(void *); + int (*key_cmp)(void *, void *); }; -struct dict *dict_init(unsigned int (*key2hash) (void *), - int (*key_cmp) (void *, void *)) -{ - struct dict *d; +struct dict * +dict_init(unsigned int (*key2hash)(void *), int (*key_cmp)(void *, void *)) { + struct dict * d; int i; d = malloc(sizeof(struct dict)); @@ -41,7 +40,7 @@ struct dict *dict_init(unsigned int (*key2hash) (void *), perror("malloc()"); exit(1); } - for (i = 0; i < DICTTABLESIZE; i++) { /* better use memset()? */ + for (i = 0; i < DICTTABLESIZE; i++) { /* better use memset()? */ d->buckets[i] = NULL; } d->key2hash = key2hash; @@ -49,10 +48,10 @@ struct dict *dict_init(unsigned int (*key2hash) (void *), return d; } -void dict_clear(struct dict *d) -{ +void +dict_clear(struct dict * d) { int i; - struct dict_entry *entry, *nextentry; + struct dict_entry * entry, * nextentry; assert(d); for (i = 0; i < DICTTABLESIZE; i++) { @@ -65,9 +64,9 @@ void dict_clear(struct dict *d) free(d); } -int dict_enter(struct dict *d, void *key, void *value) -{ - struct dict_entry *entry, *newentry; +int +dict_enter(struct dict * d, void * key, void * value) { + struct dict_entry * entry, * newentry; unsigned int hash = d->key2hash(key); unsigned int bucketpos = hash % DICTTABLESIZE; @@ -78,30 +77,26 @@ int dict_enter(struct dict *d, void *key, void *value) exit(1); } - newentry->hash = hash; - newentry->key = key; + newentry->hash = hash; + newentry->key = key; newentry->value = value; - newentry->next = NULL; + newentry->next = NULL; entry = d->buckets[bucketpos]; - while (entry && entry->next) - entry = entry->next; + while (entry && entry->next) entry = entry->next; - if (entry) - entry->next = newentry; - else - d->buckets[bucketpos] = newentry; + if (entry) entry->next = newentry; + else d->buckets[bucketpos] = newentry; - debug(3, "new dict entry at %p[%d]: (%p,%p)\n", d, bucketpos, key, - value); + debug(3, "new dict entry at %p[%d]: (%p,%p)", d, bucketpos, key, value); return 0; } -void *dict_find_entry(struct dict *d, void *key) -{ +void * +dict_find_entry(struct dict * d, void * key) { unsigned int hash = d->key2hash(key); unsigned int bucketpos = hash % DICTTABLESIZE; - struct dict_entry *entry; + struct dict_entry * entry; assert(d); for (entry = d->buckets[bucketpos]; entry; entry = entry->next) { @@ -116,16 +111,14 @@ void *dict_find_entry(struct dict *d, void *key) } void -dict_apply_to_all(struct dict *d, - void (*func) (void *key, void *value, void *data), void *data) -{ +dict_apply_to_all(struct dict * d, void (*func)(void *key, void *value, void *data), void *data) { int i; if (!d) { return; } for (i = 0; i < DICTTABLESIZE; i++) { - struct dict_entry *entry = d->buckets[i]; + struct dict_entry * entry = d->buckets[i]; while (entry) { func(entry->key, entry->value, data); entry = entry->next; @@ -135,35 +128,35 @@ dict_apply_to_all(struct dict *d, /*****************************************************************************/ -unsigned int dict_key2hash_string(void *key) -{ - const char *s = (const char *)key; +unsigned int +dict_key2hash_string(void * key) { + const char * s = (const char *)key; unsigned int total = 0, shift = 0; assert(key); while (*s) { total = total ^ ((*s) << shift); shift += 5; - if (shift > 24) - shift -= 24; + if (shift > 24) shift -= 24; s++; } return total; } -int dict_key_cmp_string(void *key1, void *key2) -{ +int +dict_key_cmp_string(void * key1, void * key2) { assert(key1); assert(key2); return strcmp((const char *)key1, (const char *)key2); } -unsigned int dict_key2hash_int(void *key) -{ +unsigned int +dict_key2hash_int(void * key) { return (unsigned long)key; } -int dict_key_cmp_int(void *key1, void *key2) -{ +int +dict_key_cmp_int(void * key1, void * key2) { return key1 - key2; } + |