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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs