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