Add evas_array_remove.

SVN revision: 34735
This commit is contained in:
Cedric BAIL 2008-06-04 16:39:43 +00:00
parent 2b8c136ad9
commit 55bc10d2a0
2 changed files with 46 additions and 7 deletions

View File

@ -433,6 +433,7 @@ extern "C" {
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

View File

@ -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;
}