dovecot-2.0: Added type safe array_bsearch().
dovecot at dovecot.org
dovecot at dovecot.org
Fri Jul 10 20:59:41 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/55690917fefb
changeset: 9607:55690917fefb
user: Timo Sirainen <tss at iki.fi>
date: Fri Jul 10 13:59:16 2009 -0400
description:
Added type safe array_bsearch().
diffstat:
2 files changed, 24 insertions(+), 1 deletion(-)
src/lib/array.c | 10 ++++++++++
src/lib/array.h | 15 ++++++++++++++-
diffs (39 lines):
diff -r 26ff48e47764 -r 55690917fefb src/lib/array.c
--- a/src/lib/array.c Fri Jul 10 13:49:17 2009 -0400
+++ b/src/lib/array.c Fri Jul 10 13:59:16 2009 -0400
@@ -96,3 +96,13 @@ void array_sort_i(struct array *array, i
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);
+}
diff -r 26ff48e47764 -r 55690917fefb src/lib/array.h
--- a/src/lib/array.h Fri Jul 10 13:49:17 2009 -0400
+++ b/src/lib/array.h Fri Jul 10 13:59:16 2009 -0400
@@ -246,4 +246,17 @@ void array_sort_i(struct array *array, i
array_sort_i(&(array)->arr, (int (*)(const void *, const void *))cmp)
#endif
-#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
More information about the dovecot-cvs
mailing list