From: Timo Sirainen Date: Fri, 13 Jun 2008 01:25:05 +0000 (+0300) Subject: Uninlined some of the more complex array functions. X-Git-Tag: 1.2.alpha1~304 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aa181b6e3751d4e76da6f135729032660b14406c;p=thirdparty%2Fdovecot%2Fcore.git Uninlined some of the more complex array functions. --HG-- branch : HEAD --- diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 94f9fb379e..9e68e3b7fe 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -9,6 +9,7 @@ $(srcdir)/unicodemap.c: perl $(srcdir)/unicodemap.pl < UnicodeData.txt > $@ liblib_a_SOURCES = \ + array.c \ aqueue.c \ backtrace-string.c \ base64.c \ diff --git a/src/lib/array.c b/src/lib/array.c new file mode 100644 index 0000000000..0fecc9e437 --- /dev/null +++ b/src/lib/array.c @@ -0,0 +1,53 @@ +/* Copyright (c) 2003-2008 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "array.h" + +void *array_idx_modifiable_i(struct array *array, unsigned int idx) +{ + size_t pos; + + pos = idx * array->element_size; + if (pos >= array->buffer->used) { + /* index doesn't exist yet, initialize with zero */ + buffer_append_zero(array->buffer, pos + array->element_size - + array->buffer->used); + } + return buffer_get_space_unsafe(array->buffer, pos, array->element_size); +} + +void array_idx_set_i(struct array *array, unsigned int idx, const void *data) +{ + size_t pos; + + pos = idx * array->element_size; + if (pos > array->buffer->used) { + /* index doesn't exist yet, initialize with zero */ + buffer_append_zero(array->buffer, pos - array->buffer->used); + } + buffer_write(array->buffer, pos, data, array->element_size); +} + +void array_idx_clear_i(struct array *array, unsigned int idx) +{ + size_t pos; + + pos = idx * array->element_size; + if (pos > array->buffer->used) { + /* index doesn't exist yet, initialize with zero */ + buffer_append_zero(array->buffer, pos - array->buffer->used); + } else { + buffer_write_zero(array->buffer, pos, array->element_size); + } +} + +bool array_cmp_i(const struct array *array1, const struct array *array2) +{ + if (!array_is_created_i(array1) || array1->buffer->used == 0) + return !array_is_created_i(array2) || array2->buffer->used == 0; + + if (!array_is_created_i(array2)) + return FALSE; + + return buffer_cmp(array1->buffer, array2->buffer); +} diff --git a/src/lib/array.h b/src/lib/array.h index ba1ad34f57..0302ef2c7d 100644 --- a/src/lib/array.h +++ b/src/lib/array.h @@ -167,52 +167,17 @@ array_get_modifiable_i(struct array *array, unsigned int *count_r) ARRAY_TYPE_CAST_MODIFIABLE(array) \ array_get_modifiable_i(&(array)->arr, count) -static inline void * -array_idx_modifiable_i(struct array *array, unsigned int idx) -{ - size_t pos; - - pos = idx * array->element_size; - if (pos >= array->buffer->used) { - /* index doesn't exist yet, initialize with zero */ - buffer_append_zero(array->buffer, pos + array->element_size - - array->buffer->used); - } - return buffer_get_space_unsafe(array->buffer, pos, array->element_size); -} +void *array_idx_modifiable_i(struct array *array, unsigned int idx); #define array_idx_modifiable(array, idx) \ ARRAY_TYPE_CAST_MODIFIABLE(array) \ array_idx_modifiable_i(&(array)->arr, idx) -static inline void -array_idx_set_i(struct array *array, unsigned int idx, const void *data) -{ - size_t pos; - - pos = idx * array->element_size; - if (pos > array->buffer->used) { - /* index doesn't exist yet, initialize with zero */ - buffer_append_zero(array->buffer, pos - array->buffer->used); - } - buffer_write(array->buffer, pos, data, array->element_size); -} +void array_idx_set_i(struct array *array, unsigned int idx, const void *data); #define array_idx_set(array, idx, data) \ array_idx_set_i(&(array)->arr + ARRAY_TYPE_CHECK(array, data), \ idx, data) -static inline void -array_idx_clear_i(struct array *array, unsigned int idx) -{ - size_t pos; - - pos = idx * array->element_size; - if (pos > array->buffer->used) { - /* index doesn't exist yet, initialize with zero */ - buffer_append_zero(array->buffer, pos - array->buffer->used); - } else { - buffer_write_zero(array->buffer, pos, array->element_size); - } -} +void array_idx_clear_i(struct array *array, unsigned int idx); #define array_idx_clear(array, idx) \ array_idx_clear_i(&(array)->arr, idx) @@ -228,20 +193,7 @@ array_append_space_i(struct array *array) #define array_append_space(array) \ ARRAY_TYPE_CAST_MODIFIABLE(array)array_append_space_i(&(array)->arr) -static inline void * -array_insert_space_i(struct array *array, unsigned int idx) -{ - void *data; - size_t pos; - - pos = idx * array->element_size; - buffer_copy(array->buffer, pos + array->element_size, - array->buffer, pos, (size_t)-1); - - data = buffer_get_space_unsafe(array->buffer, pos, array->element_size); - memset(data, 0, array->element_size); - return data; -} +void *array_insert_space_i(struct array *array, unsigned int idx); #define array_insert_space(array, idx) \ ARRAY_TYPE_CAST_MODIFIABLE(array) \ array_insert_space_i(&(array)->arr, idx) @@ -265,17 +217,7 @@ array_count_i(const struct array *array) #define array_count(array) \ array_count_i(&(array)->arr) -static inline bool -array_cmp_i(const struct array *array1, const struct array *array2) -{ - if (!array_is_created_i(array1) || array1->buffer->used == 0) - return !array_is_created_i(array2) || array2->buffer->used == 0; - - if (!array_is_created_i(array2)) - return FALSE; - - return buffer_cmp(array1->buffer, array2->buffer); -} +bool array_cmp_i(const struct array *array1, const struct array *array2); #define array_cmp(array1, array2) \ array_cmp_i(&(array1)->arr, &(array2)->arr)