From 0f184ee80e97f8a8312e9fab4f7f5a9d2187a18f Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 10 Jul 2009 13:59:24 -0400 Subject: [PATCH] Added type safe array_bsearch_insert_pos(). --HG-- branch : HEAD --- src/lib/bsearch-insert-pos.c | 9 +++++++++ src/lib/bsearch-insert-pos.h | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/lib/bsearch-insert-pos.c b/src/lib/bsearch-insert-pos.c index 6b002e2678..89f4b8a134 100644 --- a/src/lib/bsearch-insert-pos.c +++ b/src/lib/bsearch-insert-pos.c @@ -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 @@ bool bsearch_insert_pos(const void *key, const void *base, unsigned int nmemb, 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); +} diff --git a/src/lib/bsearch-insert-pos.h b/src/lib/bsearch-insert-pos.h index 774706801a..3067e394d0 100644 --- a/src/lib/bsearch-insert-pos.h +++ b/src/lib/bsearch-insert-pos.h @@ -27,4 +27,18 @@ bool bsearch_insert_pos(const void *key, const void *base, unsigned int nmemb, 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 -- 2.47.3