]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added type safe array_bsearch_insert_pos().
authorTimo Sirainen <tss@iki.fi>
Fri, 10 Jul 2009 17:59:24 +0000 (13:59 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 10 Jul 2009 17:59:24 +0000 (13:59 -0400)
--HG--
branch : HEAD

src/lib/bsearch-insert-pos.c
src/lib/bsearch-insert-pos.h

index 6b002e267847792a7f6ff0e74175fe5eba3f9a59..89f4b8a134116bacc328602c4052b89e9f142f63 100644 (file)
@@ -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);
+}
index 774706801af26737a3ef250aef78f4ede75d609f..3067e394d0bde32fc7caf7bd11cba875ae19d4eb 100644 (file)
@@ -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