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