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

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

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