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