[Pkg-e-commits] [SCM] Enlightenment DR17 advanced canvas library branch, upstream-vcs, updated. 069f3cc6c93f253bffbc90289fe21d868f745bb6
cedric
cedric at alioth.debian.org
Sat Jun 7 18:24:35 UTC 2008
The following commit has been merged in the upstream-vcs branch:
commit a921e5302374b59f2065cd8084ae21373d954f48
Author: cedric <cedric>
Date: Wed Jun 4 16:39:42 2008 +0000
Add evas_array_remove.
diff --git a/src/lib/Evas.h b/src/lib/Evas.h
index 3a1830e..2491643 100644
--- a/src/lib/Evas.h
+++ b/src/lib/Evas.h
@@ -426,13 +426,14 @@ extern "C" {
EAPI Evas_List *evas_list_sort (Evas_List *list, int size, int(*func)(void*,void*));
EAPI int evas_list_alloc_error (void);
- EAPI Evas_Array *evas_array_new (unsigned int step);
- EAPI void evas_array_setup (Evas_Array *array, unsigned int step);
- EAPI void evas_array_free (Evas_Array *array);
- EAPI void evas_array_append (Evas_Array *array, void *data);
- EAPI void *evas_array_get (Evas_Array *array, unsigned int index);
- EAPI void evas_array_clean (Evas_Array *array);
- EAPI void evas_array_flush (Evas_Array *array);
+ EAPI Evas_Array *evas_array_new (unsigned int step);
+ EAPI void evas_array_setup (Evas_Array *array, unsigned int step);
+ EAPI void evas_array_free (Evas_Array *array);
+ EAPI void evas_array_append (Evas_Array *array, void *data);
+ EAPI void *evas_array_get (Evas_Array *array, unsigned int index);
+ EAPI void evas_array_clean (Evas_Array *array);
+ EAPI void evas_array_flush (Evas_Array *array);
+ EAPI void evas_array_remove (Evas_Array *array, Evas_Bool (*keep)(void *data, void *gdata), void *gdata);
/* FIXME: add:
* api to add find, del members by data, size not just string and also
diff --git a/src/lib/data/evas_array.c b/src/lib/data/evas_array.c
index 54583a0..04a979f 100644
--- a/src/lib/data/evas_array.c
+++ b/src/lib/data/evas_array.c
@@ -73,3 +73,41 @@ evas_array_free(Evas_Array *array)
evas_array_flush(array);
free(array);
}
+
+EAPI void
+evas_array_remove(Evas_Array *array, Evas_Bool (*keep)(void *data, void *gdata), void *gdata)
+{
+ void **tmp;
+ unsigned int total = 0;
+ unsigned int i;
+
+ if (array->total == 0) return ;
+
+ tmp = malloc(sizeof (void*) * array->total);
+ if (!tmp) return ;
+
+ for (i = 0; i < array->count; ++i)
+ {
+ void *data;
+
+ data = _evas_array_get(array, i);
+
+ if (keep(data, gdata))
+ {
+ tmp[total] = data;
+ total++;
+ }
+ }
+
+ free(array->data);
+
+ if (total == 0)
+ {
+ array->data = NULL;
+ free(tmp);
+ }
+ else
+ array->data = tmp;
+
+ array->count = total;
+}
--
Enlightenment DR17 advanced canvas library
More information about the Pkg-e-commits
mailing list