From: Lennart Poettering Date: Fri, 18 Aug 2006 19:42:14 +0000 (+0000) Subject: cleanup idxset.[ch] a little: define proper types for the hash/compare funcs, do... X-Git-Tag: v0.9.5~73 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8be0cf60079da8f75933fa128f91efefbd73d5c5;p=platform%2Fupstream%2Fpulseaudio.git cleanup idxset.[ch] a little: define proper types for the hash/compare funcs, do ptr->int/int->ptr conversions with clean macros git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1262 fefdeb5f-60dc-0310-8127-8f9354f1896f --- diff --git a/src/pulsecore/idxset.c b/src/pulsecore/idxset.c index 23fe0b5..ee0137a 100644 --- a/src/pulsecore/idxset.c +++ b/src/pulsecore/idxset.c @@ -42,8 +42,8 @@ typedef struct idxset_entry { } idxset_entry; struct pa_idxset { - unsigned (*hash_func) (const void *p); - int (*compare_func)(const void *a, const void *b); + pa_hash_func_t hash_func; + pa_compare_func_t compare_func; unsigned hash_table_size, n_entries; idxset_entry **hash_table, **array, *iterate_list_head, *iterate_list_tail; @@ -65,21 +65,21 @@ int pa_idxset_string_compare_func(const void *a, const void *b) { } unsigned pa_idxset_trivial_hash_func(const void *p) { - return (unsigned) (long) p; + return PA_PTR_TO_UINT(p); } int pa_idxset_trivial_compare_func(const void *a, const void *b) { return a != b; } -pa_idxset* pa_idxset_new(unsigned (*hash_func) (const void *p), int (*compare_func) (const void*a, const void*b)) { +pa_idxset* pa_idxset_new(pa_hash_func_t hash_func, pa_compare_func_t compare_func) { pa_idxset *s; s = pa_xnew(pa_idxset, 1); s->hash_func = hash_func ? hash_func : pa_idxset_trivial_hash_func; s->compare_func = compare_func ? compare_func : pa_idxset_trivial_compare_func; s->hash_table_size = 127; - s->hash_table = pa_xmalloc0(sizeof(idxset_entry*)*s->hash_table_size); + s->hash_table = pa_xnew0(idxset_entry*, s->hash_table_size); s->array = NULL; s->array_size = 0; s->index = 0; diff --git a/src/pulsecore/idxset.h b/src/pulsecore/idxset.h index 3d0bc75..1765e84 100644 --- a/src/pulsecore/idxset.h +++ b/src/pulsecore/idxset.h @@ -41,10 +41,18 @@ int pa_idxset_trivial_compare_func(const void *a, const void *b); unsigned pa_idxset_string_hash_func(const void *p); int pa_idxset_string_compare_func(const void *a, const void *b); +#define PA_PTR_TO_UINT(p) ((unsigned int) (unsigned long) (p)) +#define PA_UINT_TO_PTR(u) ((void*) (unsigned long) (u)) +#define PA_PTR_TO_UINT32(p) ((uint32_t) PA_PTR_TO_UINT(p)) +#define PA_UINT32_TO_PTR(u) PA_UINT_TO_PTR(u) + +typedef unsigned (*pa_hash_func_t)(const void *p); +typedef int (*pa_compare_func_t)(const void *a, const void *b); + typedef struct pa_idxset pa_idxset; /* Instantiate a new idxset with the specified hash and comparison functions */ -pa_idxset* pa_idxset_new(unsigned (*hash_func) (const void *p), int (*compare_func) (const void*a, const void*b)); +pa_idxset* pa_idxset_new(pa_hash_func_t hash_func, pa_compare_func_t compare_func); /* Free the idxset. When the idxset is not empty the specified function is called for every entry contained */ void pa_idxset_free(pa_idxset *s, void (*free_func) (void *p, void *userdata), void *userdata);