Enlightenment CVS committal

Author  : cedric
Project : e17
Module  : proto/eina

Dir     : e17/proto/eina/src/lib


Modified Files:
        eina_hash.c eina_array.c eina_accessor.c 


Log Message:
Easier API and follow gustavo's remark.


===================================================================
RCS file: /cvs/e/e17/proto/eina/src/lib/eina_hash.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_hash.c 11 Aug 2008 16:30:16 -0000      1.7
+++ eina_hash.c 11 Aug 2008 17:22:36 -0000      1.8
@@ -57,10 +57,14 @@
    const void *fdata;
 };
 
+typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator_Hash *it);
+#define FUNC_ITERATOR_GET_CONTENT(Function) 
((Eina_Iterator_Get_Content_Callback)Function)
+
 struct _Eina_Iterator_Hash
 {
    Eina_Iterator iterator;
 
+   Eina_Iterator_Get_Content_Callback get_content;
    const Eina_Hash *hash;
 
    Eina_Inlist *current;
@@ -134,8 +138,35 @@
    return fdata->cb((Eina_Hash *) hash, data->key, data->data, (void*) 
fdata->fdata);
 }
 
+static void *
+_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it)
+{
+   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
+
+   if (!stuff) return NULL;
+   return stuff->tuple.data;
+}
+
+static void *
+_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it)
+{
+   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
+
+   if (!stuff) return NULL;
+   return (void *) stuff->tuple.key;
+}
+
+static Eina_Hash_Tuple *
+_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it)
+{
+   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
+
+   if (!stuff) return NULL;
+   return &stuff->tuple;
+}
+
 static Eina_Bool
-_eina_hash_iterator_next(Eina_Iterator_Hash *it)
+_eina_hash_iterator_next(Eina_Iterator_Hash *it, void **data)
 {
    Eina_Inlist *move;
    int bucket;
@@ -170,34 +201,10 @@
    it->bucket = bucket;
    it->current = move;
 
-   return EINA_TRUE;
-}
+   if (data)
+     *data = it->get_content(it);
 
-static void *
-_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it)
-{
-   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
-
-   if (!stuff) return NULL;
-   return stuff->tuple.data;
-}
-
-static void *
-_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it)
-{
-   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
-
-   if (!stuff) return NULL;
-   return (void *) stuff->tuple.key;
-}
-
-static Eina_Hash_Tuple *
-_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it)
-{
-   Eina_Hash_El *stuff = (Eina_Hash_El *) it->current;
-
-   if (!stuff) return NULL;
-   return &stuff->tuple;
+   return EINA_TRUE;
 }
 
 static void *
@@ -767,14 +774,12 @@
    if (!it) return NULL;
 
    it->hash = hash;
+   it->get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
 
    it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
-   it->iterator.get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
    it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
    it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
 
-   _eina_hash_iterator_next(it);
-
    return &it->iterator;
 }
 
@@ -790,14 +795,12 @@
    if (!it) return NULL;
 
    it->hash = hash;
+   it->get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_key_get_content);
 
    it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
-   it->iterator.get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_key_get_content);
    it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
    it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
 
-   _eina_hash_iterator_next(it);
-
    return &it->iterator;
 }
 
@@ -813,13 +816,11 @@
    if (!it) return NULL;
 
    it->hash = hash;
+   it->get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_tuple_get_content);
 
    it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
-   it->iterator.get_content = 
FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_tuple_get_content);
    it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container);
    it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
-
-   _eina_hash_iterator_next(it);
 
    return &it->iterator;
 }
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/lib/eina_array.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_array.c        11 Aug 2008 16:30:16 -0000      1.7
+++ eina_array.c        11 Aug 2008 17:22:36 -0000      1.8
@@ -181,23 +181,17 @@
    unsigned int index;
 };
 
-static Eina_Bool
-eina_array_iterator_next(Eina_Iterator_Array *it)
+static void *
+eina_array_iterator_next(Eina_Iterator_Array *it, void **data)
 {
-   if (!(it->index + 1 < eina_array_count(it->array)))
+   if (!(it->index < eina_array_count(it->array)))
      return EINA_FALSE;
+   if (data)
+     *data = eina_array_get(it->array, it->index);
    it->index++;
    return EINA_TRUE;
 }
 
-static void *
-eina_array_iterator_get_content(Eina_Iterator_Array *it)
-{
-   if (!(it->index < eina_array_count(it->array)))
-     return NULL;
-   return eina_array_get(it->array, it->index);
-}
-
 static Eina_Array *
 eina_array_iterator_get_container(Eina_Iterator_Array *it)
 {
@@ -228,7 +222,6 @@
    it->array = array;
 
    it->iterator.next = FUNC_ITERATOR_NEXT(eina_array_iterator_next);
-   it->iterator.get_content = 
FUNC_ITERATOR_GET_CONTENT(eina_array_iterator_get_content);
    it->iterator.get_container = 
FUNC_ITERATOR_GET_CONTAINER(eina_array_iterator_get_container);
    it->iterator.free = FUNC_ITERATOR_FREE(eina_array_iterator_free);
 
@@ -241,26 +234,18 @@
    Eina_Accessor accessor;
 
    const Eina_Array *array;
-   unsigned int index;
 };
 
 static Eina_Bool
-eina_array_accessor_jump_at(Eina_Accessor_Array *it, unsigned int index)
+eina_array_accessor_jump_at(Eina_Accessor_Array *it, unsigned int index, void 
**data)
 {
    if (!(index < eina_array_count(it->array)))
      return EINA_FALSE;
-   it->index = index;
+   if (data)
+     *data = eina_array_get(it->array, index);
    return EINA_TRUE;
 }
 
-static void *
-eina_array_accessor_get_content(Eina_Accessor_Array *it)
-{
-   if (!(it->index < eina_array_count(it->array)))
-     return NULL;
-   return eina_array_get(it->array, it->index);
-}
-
 static Eina_Array *
 eina_array_accessor_get_container(Eina_Accessor_Array *it)
 {
@@ -290,7 +275,6 @@
    it->array = array;
 
    it->accessor.jump_at = FUNC_ACCESSOR_JUMP_AT(eina_array_accessor_jump_at);
-   it->accessor.get_content = 
FUNC_ACCESSOR_GET_CONTENT(eina_array_accessor_get_content);
    it->accessor.get_container = 
FUNC_ACCESSOR_GET_CONTAINER(eina_array_accessor_get_container);
    it->accessor.free = FUNC_ACCESSOR_FREE(eina_array_accessor_free);
 
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/lib/eina_accessor.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- eina_accessor.c     11 Aug 2008 16:30:16 -0000      1.1
+++ eina_accessor.c     11 Aug 2008 17:22:36 -0000      1.2
@@ -32,12 +32,11 @@
    if (accessor) accessor->free(accessor);
 }
 
-EAPI void *
-eina_accessor_data_get(Eina_Accessor *accessor, unsigned int position)
+EAPI Eina_Bool
+eina_accessor_data_get(Eina_Accessor *accessor, unsigned int position, void 
**data)
 {
-   if (!accessor) return NULL;
-   if (accessor->jump_at(accessor, position) != EINA_TRUE) return NULL;
-   return accessor->get_content(accessor);
+   if (!accessor) return EINA_FALSE;
+   return accessor->jump_at(accessor, position, data);
 }
 
 EAPI void *
@@ -61,16 +60,8 @@
    if (!accessor) return ;
    if (!(start < end)) return ;
 
-   if (accessor->jump_at(accessor, start) != EINA_TRUE) return ;
-
-   container = accessor->get_container(accessor);
-   do {
-      data = accessor->get_content(accessor);
-
+   for (i = start; i < end && accessor->jump_at(accessor, i, &data) == 
EINA_TRUE; ++i)
       if (cb(container, data, (void*) fdata) != EINA_TRUE) return ;
-
-      ++i;
-   } while (i < end && accessor->jump_at(accessor, i) == EINA_TRUE);
 }
 
 



-------------------------------------------------------------------------
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