diff --git a/legacy/eina/src/include/Makefile.am b/legacy/eina/src/include/Makefile.am index 28a761b3bb..dcbd7f40ac 100644 --- a/legacy/eina/src/include/Makefile.am +++ b/legacy/eina/src/include/Makefile.am @@ -17,7 +17,8 @@ eina_array.h \ eina_counter.h \ eina_inline_array.x \ eina_magic.h \ -eina_stringshare.h +eina_stringshare.h \ +eina_inline_list.x installed_mainheaderdir = $(prefix)/include/eina-@VMAJ@ installed_mainheader_DATA = Eina.h diff --git a/legacy/eina/src/include/eina_array.h b/legacy/eina/src/include/eina_array.h index 12c4fa3382..4c4acefc15 100644 --- a/legacy/eina/src/include/eina_array.h +++ b/legacy/eina/src/include/eina_array.h @@ -32,19 +32,26 @@ struct _Eina_Array /** An array of data */ unsigned int step; /**< How much must we grow the vector When it is full */ }; -EAPI int eina_array_init (void); -EAPI int eina_array_shutdown (void); +EAPI int eina_array_init (void); +EAPI int eina_array_shutdown (void); -EAPI Eina_Array *eina_array_new (unsigned int step); -EAPI void eina_array_setup (Eina_Array *array, unsigned int step); -EAPI void eina_array_free (Eina_Array *array); -EAPI void eina_array_append (Eina_Array *array, void *data); -EAPI void *eina_array_get (Eina_Array *array, unsigned int index); -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_Array * eina_array_new (unsigned int step); +EAPI void eina_array_setup (Eina_Array *array, unsigned int step); +EAPI void eina_array_free (Eina_Array *array); +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); -#define EINA_ARRAY_ITER_NEXT(array, index, item) for ((index) = 0, (item) = ((array) && (array)->count > 0) ? _eina_array_get((array), (index)) : NULL; (index) < (array)->count; ++(index), (item) = _eina_array_get((array), (index))) +static inline void * eina_array_get (Eina_Array *array, unsigned int index); +static inline void eina_array_append (Eina_Array *array, void *data); +static inline unsigned int eina_array_count (Eina_Array *array); + +#define EINA_ARRAY_ITER_NEXT(array, index, item) \ + for ((index) = 0; (index) < eina_array_count(array); ++(index)) \ + { \ + (item) = eina_array_get((array), (index)); + +#define EINA_ARRAY_ITER_END } #include "eina_inline_array.x" diff --git a/legacy/eina/src/include/eina_list.h b/legacy/eina/src/include/eina_list.h index bbcfa2df7f..9efd9d735c 100644 --- a/legacy/eina/src/include/eina_list.h +++ b/legacy/eina/src/include/eina_list.h @@ -19,6 +19,8 @@ #ifndef EINA_LIST_H_ #define EINA_LIST_H_ +#include + #include "eina_types.h" /** @@ -27,6 +29,21 @@ */ typedef struct _Eina_List Eina_List; +typedef struct _Eina_List_Accounting Eina_List_Accounting; + +struct _Eina_List /** A linked list node */ +{ + void *data; /**< Pointer to list element payload */ + Eina_List *next; /**< Next member in the list */ + Eina_List *prev; /**< Previous member in the list */ + struct _Eina_List_Accounting *accounting; /**< Private list accounting info - don't touch */ +}; +struct _Eina_List_Accounting +{ + Eina_List *last; + int count; +}; + EAPI int eina_list_init(void); EAPI int eina_list_shutdown(void); @@ -43,17 +60,18 @@ EAPI Eina_List *eina_list_promote_list (Eina_List *list, Eina_List *move_list); EAPI void *eina_list_find(const Eina_List *list, const void *data); EAPI Eina_List *eina_list_find_list (const Eina_List *list, const void *data); EAPI Eina_List *eina_list_free (Eina_List *list); -EAPI Eina_List *eina_list_last (const Eina_List *list); -EAPI Eina_List *eina_list_next (const Eina_List *list); -EAPI Eina_List *eina_list_prev (const Eina_List *list); -EAPI void *eina_list_data(const Eina_List *list); -EAPI int eina_list_count(const Eina_List *list); EAPI void *eina_list_nth(const Eina_List *list, int n); EAPI Eina_List *eina_list_nth_list (const Eina_List *list, int n); EAPI Eina_List *eina_list_reverse (Eina_List *list); EAPI Eina_List *eina_list_sort (Eina_List *list, int size, int(*func)(void*,void*)); +static inline Eina_List *eina_list_last (const Eina_List *list); +static inline Eina_List *eina_list_next (const Eina_List *list); +static inline Eina_List *eina_list_prev (const Eina_List *list); +static inline void *eina_list_data(const Eina_List *list); +static inline int eina_list_count(const Eina_List *list); /** @} */ +#include "eina_inline_list.x" #endif /* EINA_LIST_H_ */ diff --git a/legacy/eina/src/lib/eina_array.c b/legacy/eina/src/lib/eina_array.c index 95c2126b49..646ee768d0 100644 --- a/legacy/eina/src/lib/eina_array.c +++ b/legacy/eina/src/lib/eina_array.c @@ -43,18 +43,6 @@ eina_array_shutdown(void) return eina_error_shutdown(); } -EAPI void -eina_array_append(Eina_Array *array, void *data) -{ - _eina_array_append(array, data); -} - -EAPI void * -eina_array_get(Eina_Array *array, unsigned int index) -{ - return _eina_array_get(array, index); -} - EAPI void eina_array_clean(Eina_Array *array) { @@ -119,7 +107,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), for (i = 0; i < array->count; ++i) { - data = _eina_array_get(array, i); + data = eina_array_get(array, i); if (keep(data, gdata) == EINA_FALSE) break; } @@ -127,7 +115,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), if (i < array->count) ++i; for (; i < array->count; ++i) { - data = _eina_array_get(array, i); + data = eina_array_get(array, i); if (keep(data, gdata) == EINA_TRUE) break; } @@ -164,7 +152,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), for (; i < array->count; ++i) { - data = _eina_array_get(array, i); + data = eina_array_get(array, i); if (keep(data, gdata)) { diff --git a/legacy/eina/src/lib/eina_list.c b/legacy/eina/src/lib/eina_list.c index ad0d23e2a3..553cf1e7ac 100644 --- a/legacy/eina/src/lib/eina_list.c +++ b/legacy/eina/src/lib/eina_list.c @@ -65,21 +65,6 @@ /*============================================================================* * Local * *============================================================================*/ -struct _Eina_List /** A linked list node */ -{ - void *data; /**< Pointer to list element payload */ - Eina_List *next; /**< Next member in the list */ - Eina_List *prev; /**< Previous member in the list */ - struct _Eina_List_Accounting *accounting; /**< Private list accounting info - don't touch */ -}; - -typedef struct _Eina_List_Accounting Eina_List_Accounting; -struct _Eina_List_Accounting -{ - Eina_List *last; - int count; -}; - static inline Eina_List_Accounting* _eina_list_mempool_accounting_new(__UNUSED__ Eina_List *list) { @@ -604,12 +589,7 @@ eina_list_promote_list(Eina_List *list, Eina_List *move_list) EAPI void * eina_list_find(const Eina_List *list, const void *data) { - const Eina_List *l; - - for (l = list; l; l = l->next) - { - if (l->data == data) return (void *)data; - } + if (eina_list_find_list(list, data)) return data; return NULL; } @@ -712,12 +692,7 @@ eina_list_free(Eina_List *list) * @endcode * @ingroup Eina_List_Traverse_Group */ -EAPI Eina_List * -eina_list_last(const Eina_List *list) -{ - if (!list) return NULL; - return list->accounting->last; -} +static inline Eina_List *eina_list_last(const Eina_List *list); /** * Get the next list node after the specified list node @@ -740,12 +715,7 @@ eina_list_last(const Eina_List *list) * @endcode * @ingroup Eina_List_Traverse_Group */ -EAPI Eina_List * -eina_list_next(const Eina_List *list) -{ - if (!list) return NULL; - return list->next; -} +static inline Eina_List *eina_list_next(const Eina_List *list); /** * Get the previous list node before the specified list node @@ -769,12 +739,7 @@ eina_list_next(const Eina_List *list) * @endcode * @ingroup Eina_List_Traverse_Group */ -EAPI Eina_List * -eina_list_prev(const Eina_List *list) -{ - if (!list) return NULL; - return list->prev; -} +static inline Eina_List *eina_list_prev(const Eina_List *list); /** * @defgroup Eina_List_General_Group Linked List General Functions @@ -803,12 +768,7 @@ eina_list_prev(const Eina_List *list) * @endcode * @ingroup Eina_List_General_Group */ -EAPI void * -eina_list_data(const Eina_List *list) -{ - if (!list) return NULL; - return list->data; -} +static inline void *eina_list_data(const Eina_List *list); /** * Get the count of the number of items in a list @@ -829,12 +789,7 @@ eina_list_data(const Eina_List *list) * @endcode * @ingroup Eina_List_General_Group */ -EAPI int -eina_list_count(const Eina_List *list) -{ - if (!list) return 0; - return list->accounting->count; -} +static inline int eina_list_count(const Eina_List *list); /** * Get the nth member's data pointer in a list diff --git a/legacy/eina/src/lib/eina_magic.c b/legacy/eina/src/lib/eina_magic.c index 933a0a24a7..b179e02245 100644 --- a/legacy/eina/src/lib/eina_magic.c +++ b/legacy/eina/src/lib/eina_magic.c @@ -73,6 +73,7 @@ eina_magic_string_get(Eina_Magic magic) EINA_ARRAY_ITER_NEXT(strings, i, ems) if (ems->magic == magic) return ems->string; + EINA_ARRAY_ITER_END; return NULL; } @@ -95,6 +96,7 @@ eina_magic_string_set(Eina_Magic magic, const char *magic_name) ems->string = NULL; return ; } + EINA_ARRAY_ITER_END; ems = malloc(sizeof (Eina_Magic_String)); ems->magic = magic; @@ -103,7 +105,7 @@ eina_magic_string_set(Eina_Magic magic, const char *magic_name) else ems->string = NULL; - _eina_array_append(strings, ems); + eina_array_append(strings, ems); } EAPI void diff --git a/legacy/eina/src/tests/eina_bench_array.c b/legacy/eina/src/tests/eina_bench_array.c index 1452641153..95843ca505 100644 --- a/legacy/eina/src/tests/eina_bench_array.c +++ b/legacy/eina/src/tests/eina_bench_array.c @@ -50,7 +50,7 @@ static Eina_Bool keep(void *data, __UNUSED__ void *gdata) } static void -eina_bench_array_4evas_render(int request) +eina_bench_array_4evas_render_inline(int request) { Eina_Array *array; Eina_Bench_Object *ebo; @@ -79,16 +79,20 @@ eina_bench_array_4evas_render(int request) { EINA_ARRAY_ITER_NEXT(array, j, ebo) free(ebo); + EINA_ARRAY_ITER_END; + eina_array_clean(array); } else if (i % 30 == 0) eina_array_remove(array, keep, NULL); EINA_ARRAY_ITER_NEXT(array, j, ebo) ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + EINA_ARRAY_ITER_END; } EINA_ARRAY_ITER_NEXT(array, j, ebo) free(ebo); + EINA_ARRAY_ITER_END; eina_array_free(array); @@ -227,7 +231,7 @@ eina_bench_inlist_4evas_render(int request) void eina_bench_array(Eina_Bench *bench) { - eina_bench_register(bench, "array", EINA_BENCH(eina_bench_array_4evas_render), 200, 4000, 100); + eina_bench_register(bench, "array-inline", EINA_BENCH(eina_bench_array_4evas_render_inline), 200, 4000, 100); eina_bench_register(bench, "list", EINA_BENCH(eina_bench_list_4evas_render), 200, 4000, 100); eina_bench_register(bench, "inlist", EINA_BENCH(eina_bench_inlist_4evas_render), 200, 4000, 100); } diff --git a/legacy/eina/src/tests/eina_bench_hash.c b/legacy/eina/src/tests/eina_bench_hash.c index febdb95d2e..5b8e119818 100644 --- a/legacy/eina/src/tests/eina_bench_hash.c +++ b/legacy/eina/src/tests/eina_bench_hash.c @@ -68,6 +68,7 @@ eina_bench_lookup_superfast(int request) EINA_ARRAY_ITER_NEXT(array, i, tmp_val) free(tmp_val); + EINA_ARRAY_ITER_END; eina_array_free(array); } @@ -115,6 +116,7 @@ eina_bench_lookup_djb2(int request) EINA_ARRAY_ITER_NEXT(array, i, tmp_val) free(tmp_val); + EINA_ARRAY_ITER_END; eina_array_free(array); } @@ -164,6 +166,7 @@ eina_bench_lookup_djb2_inline(int request) EINA_ARRAY_ITER_NEXT(array, i, tmp_val) free(tmp_val); + EINA_ARRAY_ITER_END; eina_array_free(array); } diff --git a/legacy/eina/src/tests/eina_test_array.c b/legacy/eina/src/tests/eina_test_array.c index eb9185ef6f..60f017d33e 100644 --- a/legacy/eina/src/tests/eina_test_array.c +++ b/legacy/eina/src/tests/eina_test_array.c @@ -45,10 +45,9 @@ START_TEST(eina_array_simple) fail_if(atoi(eina_array_get(ea, 10)) != 10); EINA_ARRAY_ITER_NEXT(ea, i, tmp) - { - fail_if((unsigned int) atoi(tmp) != i); - free(tmp); - } + fail_if((unsigned int) atoi(tmp) != i); + free(tmp); + EINA_ARRAY_ITER_END fail_if(i != 200); @@ -83,10 +82,9 @@ START_TEST(eina_array_static) fail_if(atoi(eina_array_get(&sea, 10)) != 10); EINA_ARRAY_ITER_NEXT(&sea, i, tmp) - { - fail_if((unsigned int) atoi(tmp) != i); - free(tmp); - } + fail_if((unsigned int) atoi(tmp) != i); + free(tmp); + EINA_ARRAY_ITER_END fail_if(i != 200); @@ -141,6 +139,7 @@ START_TEST(eina_array_remove_stuff) fail_if(eina_array_count(ea) != 990); EINA_ARRAY_ITER_NEXT(ea, i, tmp) fail_if(*tmp == 0); + EINA_ARRAY_ITER_END; // Remove the last items for (i = 980; i < 990; ++i) @@ -158,6 +157,8 @@ START_TEST(eina_array_remove_stuff) fail_if(*tmp == 0); *tmp = 0; } + EINA_ARRAY_ITER_END; + eina_array_remove(ea, keep_int, NULL); fail_if(eina_array_count(ea) != 0);