dovecot-2.0: Added type safe array_bsearch_insert_pos().

dovecot at dovecot.org dovecot at dovecot.org
Fri Jul 10 20:59:42 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/5ab09480d6b4
changeset: 9608:5ab09480d6b4
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jul 10 13:59:24 2009 -0400
description:
Added type safe array_bsearch_insert_pos().

diffstat:

2 files changed, 23 insertions(+)
src/lib/bsearch-insert-pos.c |    9 +++++++++
src/lib/bsearch-insert-pos.h |   14 ++++++++++++++

diffs (45 lines):

diff -r 55690917fefb -r 5ab09480d6b4 src/lib/bsearch-insert-pos.c
--- 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 @@ bool bsearch_insert_pos(const void *key,
 	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 -r 55690917fefb -r 5ab09480d6b4 src/lib/bsearch-insert-pos.h
--- 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 @@ bool bsearch_insert_pos(const void *key,
 			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


More information about the dovecot-cvs mailing list