Mercurial > dovecot > core-2.2
changeset 9608:5ab09480d6b4 HEAD
Added type safe array_bsearch_insert_pos().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 10 Jul 2009 13:59:24 -0400 |
parents | 55690917fefb |
children | d404d34097f2 |
files | src/lib/bsearch-insert-pos.c src/lib/bsearch-insert-pos.h |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/bsearch-insert-pos.c Fri Jul 10 13:59:16 2009 -0400 +++ b/src/lib/bsearch-insert-pos.c Fri Jul 10 13:59:24 2009 -0400 @@ -1,6 +1,7 @@ /* Copyright (c) 2005-2009 Dovecot authors, see the included COPYING file */ #include "lib.h" +#include "array.h" #include "bsearch-insert-pos.h" bool bsearch_insert_pos(const void *key, const void *base, unsigned int nmemb, @@ -34,3 +35,11 @@ return FALSE; } +bool array_bsearch_insert_pos_i(const struct array *array, const void *key, + int (*cmp)(const void *, const void *), + unsigned int *idx_r) +{ + return bsearch_insert_pos(key, array->buffer->data, + array_count_i(array), + array->element_size, cmp, idx_r); +}
--- a/src/lib/bsearch-insert-pos.h Fri Jul 10 13:59:16 2009 -0400 +++ b/src/lib/bsearch-insert-pos.h Fri Jul 10 13:59:24 2009 -0400 @@ -27,4 +27,18 @@ size_t size, int (*cmp)(const void *, const void *), unsigned int *idx_r); +bool array_bsearch_insert_pos_i(const struct array *array, const void *key, + int (*cmp)(const void *, const void *), + unsigned int *idx_r); +#ifdef CONTEXT_TYPE_SAFETY +#define array_bsearch_insert_pos(array, key, cmp, idx_r) \ + ({(void)(1 ? 0 : cmp(key, ARRAY_TYPE_CAST_CONST(array)NULL)); \ + array_bsearch_insert_pos_i(&(array)->arr, (const void *)key, \ + (int (*)(const void *, const void *))cmp, idx_r); }) +#else +#define array_bsearch(array, key, cmp) \ + array_bsearch_insert_pos_i(&(array)->arr, (const void *)key, \ + (int (*)(const void *, const void *))cmp, idx_r) #endif + +#endif