[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