aboutsummaryrefslogtreecommitdiff
path: root/dict.c
diff options
context:
space:
mode:
authorIan Wienand <ianw@ieee.org>2006-02-20 22:44:45 +0100
committerIan Wienand <ianw@debian.org>2006-02-20 22:44:45 +0100
commit9a2ad351a1c3215dc596ff3e2e3fd4bc24445a6b (patch)
tree01bd7628615527758c5a4d0f4242b8cc87508082 /dict.c
parent5570a7769869a4df25ef85f302f74a7feb6c0cd3 (diff)
downloadltrace-9a2ad351a1c3215dc596ff3e2e3fd4bc24445a6b.tar.gz
Switched to SVN (initial import)
Diffstat (limited to 'dict.c')
-rw-r--r--dict.c87
1 files changed, 40 insertions, 47 deletions
diff --git a/dict.c b/dict.c
index a1ec8c1..8d97220 100644
--- a/dict.c
+++ b/dict.c
@@ -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;
}
+