From: <no-...@en...> - 2008-09-08 12:19:16
|
Author: cedric Date: 2008-09-08 05:19:15 -0700 (Mon, 08 Sep 2008) New Revision: 35888 Modified: trunk/PROTO/eina/src/include/eina_array.h trunk/PROTO/eina/src/include/eina_inline_array.x trunk/PROTO/eina/src/lib/eina_array.c trunk/PROTO/eina/src/tests/eina_test_array.c Log: Make inline only usefull function. Return information about potential error during eina_array_remove. Modified: trunk/PROTO/eina/src/include/eina_array.h =================================================================== --- trunk/PROTO/eina/src/include/eina_array.h 2008-09-08 11:53:59 UTC (rev 35887) +++ trunk/PROTO/eina/src/include/eina_array.h 2008-09-08 12:19:15 UTC (rev 35888) @@ -64,7 +64,7 @@ EAPI void eina_array_step_set (Eina_Array *array, unsigned int step); EAPI void eina_array_clean (Eina_Array *array); EAPI void eina_array_flush (Eina_Array *array); -EAPI void eina_array_remove (Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), void *gdata); +EAPI Eina_Bool eina_array_remove (Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), void *gdata); static inline Eina_Bool eina_array_push (Eina_Array *array, const void *data); static inline void *eina_array_pop (Eina_Array *array); Modified: trunk/PROTO/eina/src/include/eina_inline_array.x =================================================================== --- trunk/PROTO/eina/src/include/eina_inline_array.x 2008-09-08 11:53:59 UTC (rev 35887) +++ trunk/PROTO/eina/src/include/eina_inline_array.x 2008-09-08 12:19:15 UTC (rev 35888) @@ -29,26 +29,8 @@ * @cond LOCAL */ -static inline Eina_Bool -eina_array_grow(Eina_Array *array) -{ - void **tmp; - unsigned int total; +EAPI Eina_Bool eina_array_grow(Eina_Array *array); - total = array->total + array->step; - eina_error_set(0); - tmp = realloc(array->data, sizeof (void*) * total); - if (UNLIKELY(!tmp)) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return 0; - } - - array->total = total; - array->data = tmp; - - return 1; -} - /** * @endcond */ Modified: trunk/PROTO/eina/src/lib/eina_array.c =================================================================== --- trunk/PROTO/eina/src/lib/eina_array.c 2008-09-08 11:53:59 UTC (rev 35887) +++ trunk/PROTO/eina/src/lib/eina_array.c 2008-09-08 12:19:15 UTC (rev 35888) @@ -102,6 +102,26 @@ free(it); } +EAPI Eina_Bool +eina_array_grow(Eina_Array *array) +{ + void **tmp; + unsigned int total; + + total = array->total + array->step; + eina_error_set(0); + tmp = realloc(array->data, sizeof (void*) * total); + if (UNLIKELY(!tmp)) { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return 0; + } + + array->total = total; + array->data = tmp; + + return 1; +} + /** * @endcond */ @@ -268,8 +288,12 @@ * with the function @p keep. @p gdata is an additional data to pass * to @p keep. For performance reasons, there is no check of @p * array. If it is @c NULL or invalid, the program may crash. + * + * This function always return a valid array. If it wasn't able to + * remove items due to an allocation failure, it will return EINA_FALSE + * and the error is set to #EINA_ERROR_OUT_OF_MEMORY. */ -EAPI void +EAPI Eina_Bool eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), void *gdata) { void **tmp; @@ -278,7 +302,7 @@ unsigned int limit; unsigned int i; - if (array->total == 0) return ; + if (array->total == 0) return EINA_TRUE; for (i = 0; i < array->count; ++i) { @@ -305,14 +329,14 @@ array->data = NULL; } - return ; + return EINA_TRUE; } eina_error_set(0); tmp = malloc(sizeof (void*) * array->total); if (!tmp) { eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return ; + return EINA_FALSE; } memcpy(tmp, array->data, limit * sizeof(void*)); @@ -344,6 +368,8 @@ array->data = tmp; array->count = total; + + return EINA_TRUE; } /** Modified: trunk/PROTO/eina/src/tests/eina_test_array.c =================================================================== --- trunk/PROTO/eina/src/tests/eina_test_array.c 2008-09-08 11:53:59 UTC (rev 35887) +++ trunk/PROTO/eina/src/tests/eina_test_array.c 2008-09-08 12:19:15 UTC (rev 35888) @@ -1,3 +1,4 @@ + /* EINA - EFL data type library * Copyright (C) 2008 Cedric Bail * @@ -75,7 +76,7 @@ eina_array_init(); - eina_array_setup(&sea, 10); + eina_array_step_set(&sea, 10); for (i = 0; i < 200; ++i) { @@ -144,7 +145,7 @@ fail_if(!tmp); *tmp = 0; } - eina_array_remove(ea, keep_int, NULL); + fail_if(eina_array_remove(ea, keep_int, NULL) != EINA_TRUE); fail_if(eina_array_count(ea) != 990); EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) |