idxset: Add pa_idxset_remove_all()

Slightly nicer than using pa_idxset_steal_first() in a loop.
This commit is contained in:
Tanu Kaskinen 2013-02-12 21:36:57 +02:00
parent 31ee1a7d54
commit 2c666e3e16
6 changed files with 25 additions and 37 deletions

View file

@ -142,15 +142,7 @@ static void remove_entry(pa_idxset *s, struct idxset_entry *e) {
void pa_idxset_free(pa_idxset *s, pa_free_cb_t free_cb) {
pa_assert(s);
while (s->iterate_list_head) {
void *data = s->iterate_list_head->data;
remove_entry(s, s->iterate_list_head);
if (free_cb)
free_cb(data);
}
pa_idxset_remove_all(s, free_cb);
pa_xfree(s);
}
@ -308,6 +300,19 @@ void* pa_idxset_remove_by_data(pa_idxset*s, const void *data, uint32_t *idx) {
return r;
}
void pa_idxset_remove_all(pa_idxset *s, pa_free_cb_t free_cb) {
pa_assert(s);
while (s->iterate_list_head) {
void *data = s->iterate_list_head->data;
remove_entry(s, s->iterate_list_head);
if (free_cb)
free_cb(data);
}
}
void* pa_idxset_rrobin(pa_idxset *s, uint32_t *idx) {
unsigned hash;
struct idxset_entry *e;