minor optimization for box remove_at.

use eina_list_nth_list() so we can cut search time up to half, as eina
list can look backwards if position is close to list end.



SVN revision: 37692
This commit is contained in:
Gustavo Sverzut Barbieri 2008-11-17 14:20:08 +00:00
parent a867b99db0
commit 9ede53480f
1 changed files with 11 additions and 14 deletions

View File

@ -273,8 +273,7 @@ static Evas_Object *
_evas_object_box_remove_at_default(Evas_Object *o, Evas_Object_Box_Data *priv, unsigned int pos)
{
const Evas_Object_Box_Api *api;
Eina_List *l;
int i;
Eina_List *node;
api = priv->api;
@ -285,21 +284,19 @@ _evas_object_box_remove_at_default(Evas_Object *o, Evas_Object_Box_Data *priv, u
return NULL;
}
for (l = priv->children, i = 0; l != NULL; l = l->next, i++)
node = eina_list_nth_list(priv->children, pos);
if (!node)
{
Evas_Object_Box_Option *opt = l->data;
Evas_Object *obj = opt->obj;
if (i == pos)
{
priv->children = eina_list_remove(priv->children, opt);
api->option_free(o, priv, opt);
return obj;
}
fprintf(stderr, "ERROR: no item to be removed at position %d\n", pos);
return NULL;
}
return NULL;
Evas_Object_Box_Option *opt = node->data;
Evas_Object *obj = opt->obj;
priv->children = eina_list_remove_list(priv->children, node);
api->option_free(o, priv, opt);
return obj;
}
static void