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