diff options
author | Tanu Kaskinen <tanuk@iki.fi> | 2009-06-29 18:35:06 +0300 |
---|---|---|
committer | Tanu Kaskinen <tanuk@iki.fi> | 2009-06-29 18:35:06 +0300 |
commit | 0bc538b08ca5c4efea86700cb6c4685da3f34345 (patch) | |
tree | e5b0fe4b967ecb7e9251faf21904bbbe825aaab7 /src/pulsecore/hashmap.c | |
parent | b152f3a052eca7225870a7dc4d8a719bee107f0f (diff) | |
parent | 2654eb7781ddcfe53064745bbad77bffe5c8eada (diff) |
Merge branch 'master' into dbus-work
Conflicts:
src/daemon/daemon-conf.c
src/daemon/daemon-conf.h
src/daemon/main.c
src/pulsecore/dbus-util.h
Diffstat (limited to 'src/pulsecore/hashmap.c')
-rw-r--r-- | src/pulsecore/hashmap.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/pulsecore/hashmap.c b/src/pulsecore/hashmap.c index e957c5ba..1fac97eb 100644 --- a/src/pulsecore/hashmap.c +++ b/src/pulsecore/hashmap.c @@ -237,6 +237,39 @@ at_end: return NULL; } +void *pa_hashmap_iterate_backwards(pa_hashmap *h, void **state, const void **key) { + struct hashmap_entry *e; + + pa_assert(h); + pa_assert(state); + + if (*state == (void*) -1) + goto at_beginning; + + if (!*state && !h->iterate_list_tail) + goto at_beginning; + + e = *state ? *state : h->iterate_list_tail; + + if (e->iterate_previous) + *state = e->iterate_previous; + else + *state = (void*) -1; + + if (key) + *key = e->key; + + return e->value; + +at_beginning: + *state = (void *) -1; + + if (key) + *key = NULL; + + return NULL; +} + void* pa_hashmap_first(pa_hashmap *h) { pa_assert(h); @@ -246,6 +279,15 @@ void* pa_hashmap_first(pa_hashmap *h) { return h->iterate_list_head->value; } +void* pa_hashmap_last(pa_hashmap *h) { + pa_assert(h); + + if (!h->iterate_list_tail) + return NULL; + + return h->iterate_list_tail->value; +} + void* pa_hashmap_steal_first(pa_hashmap *h) { void *data; |