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