Mercurial > dovecot > core-2.2
changeset 9607:55690917fefb HEAD
Added type safe array_bsearch().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 10 Jul 2009 13:59:16 -0400 |
parents | 26ff48e47764 |
children | 5ab09480d6b4 |
files | src/lib/array.c src/lib/array.h |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/array.c Fri Jul 10 13:49:17 2009 -0400 +++ b/src/lib/array.c Fri Jul 10 13:59:16 2009 -0400 @@ -96,3 +96,13 @@ qsort(buffer_get_modifiable_data(array->buffer, NULL), count, array->element_size, cmp); } + +void *array_bsearch_i(struct array *array, const void *key, + int (*cmp)(const void *, const void *)) +{ + unsigned int count; + + count = array->buffer->used / array->element_size; + return bsearch(key, array->buffer->data, + count, array->element_size, cmp); +}
--- a/src/lib/array.h Fri Jul 10 13:49:17 2009 -0400 +++ b/src/lib/array.h Fri Jul 10 13:59:16 2009 -0400 @@ -246,4 +246,17 @@ array_sort_i(&(array)->arr, (int (*)(const void *, const void *))cmp) #endif +void *array_bsearch_i(struct array *array, const void *key, + int (*cmp)(const void *, const void *)); +#ifdef CONTEXT_TYPE_SAFETY +#define array_bsearch(array, key, cmp) \ + ({(void)(1 ? 0 : cmp(key, ARRAY_TYPE_CAST_CONST(array)NULL)); \ + array_bsearch_i(&(array)->arr, (const void *)key, \ + (int (*)(const void *, const void *))cmp); }) +#else +#define array_bsearch(array, key, cmp) \ + array_bsearch_i(&(array)->arr, (const void *)key, \ + (int (*)(const void *, const void *))cmp) #endif + +#endif