Mercurial > dovecot > core-2.2
changeset 9490:a6e1f054a808 HEAD
Added array_sort() for type-safe array sorting.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 17 Jun 2009 14:52:30 -0400 |
parents | e8301a8f9cf7 |
children | 0059b2381024 |
files | src/lib/array.c src/lib/array.h |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ -3,6 +3,8 @@ #include "lib.h" #include "array.h" +#include <stdlib.h> + void *array_idx_modifiable_i(struct array *array, unsigned int idx) { size_t pos; @@ -85,3 +87,12 @@ 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); +}
--- 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 @@ #define array_reverse(array) \ array_reverse_i(&(array)->arr) +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