eo: make parent_set a O(1) operation instead of O(n).

This does impact performance quite significantly when you have a lot
of children.
This commit is contained in:
Cedric BAIL 2014-07-06 13:15:21 +02:00
parent 87bcb1da23
commit 3dcc172f57
1 changed files with 5 additions and 2 deletions

View File

@ -16,6 +16,7 @@ typedef struct
{
Eina_List *children;
Eo *parent;
Eina_List *parent_list;
Eina_Inlist *generic_data;
Eo ***wrefs;
@ -115,8 +116,9 @@ _eo_base_parent_set(Eo *obj, Eo_Base_Data *pd, Eo *parent_id)
old_parent_pd = eo_data_scope_get(pd->parent, EO_BASE_CLASS);
if (old_parent_pd)
{
old_parent_pd->children = eina_list_remove(old_parent_pd->children,
obj);
old_parent_pd->children = eina_list_remove_list(old_parent_pd->children,
pd->parent_list);
pd->parent_list = NULL;
}
else
{
@ -138,6 +140,7 @@ _eo_base_parent_set(Eo *obj, Eo_Base_Data *pd, Eo *parent_id)
pd->parent = parent_id;
parent_pd->children = eina_list_append(parent_pd->children,
obj);
pd->parent_list = eina_list_last(parent_pd->children);
eo_xref(obj, pd->parent);
}
else