Enlightenment CVS committal

Author  : cedric
Project : e17
Module  : proto/eina

Dir     : e17/proto/eina/src/include


Modified Files:
        Makefile.am eina_array.h eina_hash.h eina_private.h 
Added Files:
        eina_accessor.h eina_iterator.h 


Log Message:
Add first try for an accessor and iterator API, comment welcome (lack inlist 
and list currently).
Rewrite EINA_ARRAY_ITER_NEXT, still fast, need one more parameter, but no more 
EINA_ARRAY_ITER_END.


===================================================================
RCS file: /cvs/e/e17/proto/eina/src/include/Makefile.am,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- Makefile.am 8 Aug 2008 14:20:11 -0000       1.7
+++ Makefile.am 11 Aug 2008 16:30:15 -0000      1.8
@@ -18,7 +18,9 @@
 eina_inline_array.x \
 eina_magic.h \
 eina_stringshare.h \
-eina_inline_list.x
+eina_inline_list.x \
+eina_accessor.h \
+eina_iterator.h
 
 installed_mainheaderdir = $(prefix)/include/[EMAIL PROTECTED]@
 installed_mainheader_DATA = Eina.h
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/include/eina_array.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_array.h        8 Aug 2008 15:56:17 -0000       1.7
+++ eina_array.h        11 Aug 2008 16:30:15 -0000      1.8
@@ -22,8 +22,12 @@
 #include <stdlib.h>
 
 #include "eina_types.h"
+#include "eina_iterator.h"
+#include "eina_accessor.h"
 
 typedef struct _Eina_Array       Eina_Array;             /**< A generic vector 
*/
+typedef void**                   Eina_Array_Iterator;
+
 struct _Eina_Array /** An array of data */
 {
    void                **data;   /**< Pointer to a vector of pointer to 
payload */
@@ -42,16 +46,17 @@
 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);
 
-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);
+EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array);
+EAPI Eina_Accessor *eina_array_accessor_new(const 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));
+static inline void        * eina_array_get    (const Eina_Array *array, 
unsigned int index);
+static inline void          eina_array_append (Eina_Array *array, void *data);
+static inline unsigned int  eina_array_count  (const Eina_Array *array);
 
-#define EINA_ARRAY_ITER_END }
+#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator)             \
+  for (index = 0, iterator = (array)->data, item = iterator != NULL ? 
*(iterator) : NULL; \
+       index < eina_array_count(array);                                        
\
+       ++(index), item = *(++(iterator)))
 
 #include "eina_inline_array.x"
 
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/include/eina_hash.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- eina_hash.h 6 Aug 2008 18:15:19 -0000       1.4
+++ eina_hash.h 11 Aug 2008 16:30:16 -0000      1.5
@@ -21,11 +21,21 @@
 #define EINA_HASH_H_
 
 #include "eina_types.h"
+#include "eina_iterator.h"
 
 /**
  *
  */
 typedef struct _Eina_Hash Eina_Hash;
+typedef struct _Eina_Hash_Tuple Eina_Hash_Tuple;
+struct _Eina_Hash_Tuple
+{
+   const void *key;
+   void *data;
+
+   unsigned int key_length;
+};
+
 typedef unsigned int (*Eina_Key_Length)(const void *key);
 #define EINA_KEY_LENGTH(Function) ((Eina_Key_Length)Function)
 typedef int (*Eina_Key_Cmp)(const void *key1, int key1_length,
@@ -66,7 +76,10 @@
                                          const void *key, int key_length, int 
key_hash,
                                          const void *data);
 
-/* FIXME: Should go with iterator support. */
+EAPI Eina_Iterator * eina_hash_iterator_key_new(const Eina_Hash *hash);
+EAPI Eina_Iterator * eina_hash_iterator_data_new(const Eina_Hash *hash);
+EAPI Eina_Iterator * eina_hash_iterator_tuple_new(const Eina_Hash *hash);
+
 typedef Eina_Bool (*Eina_Foreach)(const Eina_Hash *hash, const void *key, void 
*data, void *fdata);
 EAPI void        eina_hash_foreach(const Eina_Hash *hash,
                                   Eina_Foreach cb,
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/include/eina_private.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_private.h      6 Aug 2008 18:15:19 -0000       1.7
+++ eina_private.h      11 Aug 2008 16:30:16 -0000      1.8
@@ -39,6 +39,9 @@
 
 #include <assert.h>
 
+#include "eina_iterator.h"
+#include "eina_accessor.h"
+
 #ifndef PATH_MAX
 # define PATH_MAX 4096
 #endif
@@ -111,5 +114,41 @@
    void (*shutdown)(void *data);
 } Eina_Mempool_Backend;
 
+/* Iterator/accessor private type */
+typedef Eina_Bool (*Eina_Iterator_Next_Callback)(Eina_Iterator *it);
+typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator *it);
+typedef void *(*Eina_Iterator_Get_Container_Callback)(Eina_Iterator *it);
+typedef void (*Eina_Iterator_Free_Callback)(Eina_Iterator *it);
+
+#define FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function)
+#define FUNC_ITERATOR_GET_CONTENT(Function) 
((Eina_Iterator_Get_Content_Callback)Function)
+#define FUNC_ITERATOR_GET_CONTAINER(Function) 
((Eina_Iterator_Get_Container_Callback)Function)
+#define FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function)
+
+typedef Eina_Bool (*Eina_Accessor_Jump_At_Callback)(Eina_Accessor *it, 
unsigned int index);
+typedef void *(*Eina_Accessor_Get_Content_Callback)(Eina_Accessor *it);
+typedef void *(*Eina_Accessor_Get_Container_Callback)(Eina_Accessor *it);
+typedef void (*Eina_Accessor_Free_Callback)(Eina_Accessor *it);
+
+#define FUNC_ACCESSOR_JUMP_AT(Function) 
((Eina_Accessor_Jump_At_Callback)Function)
+#define FUNC_ACCESSOR_GET_CONTENT(Function) 
((Eina_Accessor_Get_Content_Callback)Function)
+#define FUNC_ACCESSOR_GET_CONTAINER(Function) 
((Eina_Accessor_Get_Container_Callback)Function)
+#define FUNC_ACCESSOR_FREE(Function) ((Eina_Accessor_Free_Callback)Function)
+
+struct _Eina_Iterator
+{
+   Eina_Iterator_Next_Callback          next;
+   Eina_Iterator_Get_Content_Callback   get_content;
+   Eina_Iterator_Get_Container_Callback get_container;
+   Eina_Iterator_Free_Callback          free;
+};
+
+struct _Eina_Accessor
+{
+   Eina_Accessor_Jump_At_Callback       jump_at;
+   Eina_Accessor_Get_Content_Callback   get_content;
+   Eina_Accessor_Get_Container_Callback        get_container;
+   Eina_Accessor_Free_Callback          free;
+};
 
 #endif /* EINA_PRIVATE_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