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

src/lib/array.c
src/lib/array.h

index a0c2ee6df1a3ef20bde6294cb872b5cbcd3bfe9d..fea32f592e03d5f0676cc7edcf4eb9668c72dffa 100644 (file)
@@ -96,3 +96,13 @@ void array_sort_i(struct array *array, int (*cmp)(const void *, const void *))
        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);
+}
index 0f3452607ba35cce3d22ff93697add3bd8846c43..b6e3d7d06d6bbefb8a1ed826cef4b2cb453e73e9 100644 (file)
@@ -246,4 +246,17 @@ void array_sort_i(struct array *array, int (*cmp)(const void *, const void *));
        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