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

Reply via email to