From 375be85b27e86f3285a76fa17cb33833c56c51d2 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 31 Dec 2012 00:05:02 +0000 Subject: [PATCH] efl: add a way to allocate without memcpy data in an Eina_Inarray. SVN revision: 81913 --- src/lib/eina/eina_inarray.c | 18 +++++++++++++++++- src/lib/eina/eina_inarray.h | 11 +++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lib/eina/eina_inarray.c b/src/lib/eina/eina_inarray.c index 1a12757..274b1bb 100644 --- a/src/lib/eina/eina_inarray.c +++ b/src/lib/eina/eina_inarray.c @@ -413,6 +413,22 @@ eina_inarray_push(Eina_Inarray *array, const void *data) return array->len - 1; } +EAPI void * +eina_inarray_add(Eina_Inarray *array) +{ + void *p; + + EINA_MAGIC_CHECK_INARRAY(array, NULL); + + if (!_eina_inarray_resize(array, array->len + 1)) + return NULL; + + p = _eina_inarray_get(array, array->len); + array->len++; + + return p; +} + EAPI int eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare) { @@ -507,7 +523,7 @@ eina_inarray_pop(Eina_Inarray *array) if (!_eina_inarray_resize(array, array->len - 1)) return NULL; array->len--; - return _eina_inarray_get(array, array->len + 1); + return _eina_inarray_get(array, array->len); } EAPI void * diff --git a/src/lib/eina/eina_inarray.h b/src/lib/eina/eina_inarray.h index 034a116..8eafc55 100644 --- a/src/lib/eina/eina_inarray.h +++ b/src/lib/eina/eina_inarray.h @@ -292,6 +292,17 @@ EAPI int eina_inarray_push(Eina_Inarray *array, const void *data) EINA_ARG_NONNULL(1, 2); /** + * @brief Allocate a new item at the end of the array. + * @param array array object + * + * The returned pointer is only valid until you use any other eina_inarray + * function. + * + * @since 1.8 + */ +EAPI void *eina_inarray_add(Eina_Inarray *array); + +/** * @brief Copy the data to array at position found by comparison function * @param array array object * @param data data to be copied -- 2.7.4