Enlightenment CVS committal Author : cedric Project : e17 Module : proto/eina
Dir : e17/proto/eina/src/include Modified Files: eina_list.h eina_array.h Makefile.am Log Message: After benchmarking, providing inline does impact performance of list and array user. =================================================================== RCS file: /cvs/e/e17/proto/eina/src/include/eina_list.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eina_list.h 7 Aug 2008 13:09:09 -0000 1.4 +++ eina_list.h 8 Aug 2008 14:20:11 -0000 1.5 @@ -19,6 +19,8 @@ #ifndef EINA_LIST_H_ #define EINA_LIST_H_ +#include <stdlib.h> + #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 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_ */ =================================================================== RCS file: /cvs/e/e17/proto/eina/src/include/eina_array.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- eina_array.h 7 Aug 2008 13:11:13 -0000 1.5 +++ eina_array.h 8 Aug 2008 14:20:11 -0000 1.6 @@ -32,19 +32,26 @@ 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" =================================================================== RCS file: /cvs/e/e17/proto/eina/src/include/Makefile.am,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- Makefile.am 6 Aug 2008 15:53:03 -0000 1.6 +++ Makefile.am 8 Aug 2008 14:20:11 -0000 1.7 @@ -17,7 +17,8 @@ eina_counter.h \ eina_inline_array.x \ eina_magic.h \ -eina_stringshare.h +eina_stringshare.h \ +eina_inline_list.x installed_mainheaderdir = $(prefix)/include/[EMAIL PROTECTED]@ installed_mainheader_DATA = Eina.h ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs