dovecot-2.0: Added array_sort() for type-safe array sorting.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jun 17 21:52:59 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/a6e1f054a808
changeset: 9490:a6e1f054a808
user: Timo Sirainen <tss at iki.fi>
date: Wed Jun 17 14:52:30 2009 -0400
description:
Added array_sort() for type-safe array sorting.
diffstat:
2 files changed, 24 insertions(+), 1 deletion(-)
src/lib/array.c | 11 +++++++++++
src/lib/array.h | 14 +++++++++++++-
diffs (46 lines):
diff -r e8301a8f9cf7 -r a6e1f054a808 src/lib/array.c
--- a/src/lib/array.c Wed Jun 17 13:05:32 2009 -0400
+++ b/src/lib/array.c Wed Jun 17 14:52:30 2009 -0400
@@ -2,6 +2,8 @@
#include "lib.h"
#include "array.h"
+
+#include <stdlib.h>
void *array_idx_modifiable_i(struct array *array, unsigned int idx)
{
@@ -85,3 +87,12 @@ void array_reverse_i(struct array *array
element_size);
}
}
+
+void array_sort_i(struct array *array, int (*cmp)(const void *, const void *))
+{
+ unsigned int count;
+
+ count = array->buffer->used / array->element_size;
+ qsort(buffer_get_modifiable_data(array->buffer, NULL),
+ count, array->element_size, cmp);
+}
diff -r e8301a8f9cf7 -r a6e1f054a808 src/lib/array.h
--- a/src/lib/array.h Wed Jun 17 13:05:32 2009 -0400
+++ b/src/lib/array.h Wed Jun 17 14:52:30 2009 -0400
@@ -234,4 +234,16 @@ void array_reverse_i(struct array *array
#define array_reverse(array) \
array_reverse_i(&(array)->arr)
-#endif
+void array_sort_i(struct array *array, int (*cmp)(const void *, const void *));
+#ifdef CONTEXT_TYPE_SAFETY
+#define array_sort(array, cmp) \
+ ({(void)(1 ? 0 : cmp(ARRAY_TYPE_CAST_CONST(array)NULL, \
+ ARRAY_TYPE_CAST_CONST(array)NULL)); \
+ array_sort_i(&(array)->arr, \
+ (int (*)(const void *, const void *))cmp); })
+#else
+#define array_sort(array, cmp) \
+ array_sort_i(&(array)->arr, (int (*)(const void *, const void *))cmp)
+#endif
+
+#endif
More information about the dovecot-cvs
mailing list