forked from enlightenment/enlightenment
reduce number of loops required to iterate when updating conf2 option ctx from text
SVN revision: 83178
This commit is contained in:
parent
1ea8697846
commit
2792afd090
|
@ -2568,9 +2568,10 @@ e_configure_option_ctx_new(void)
|
|||
EAPI Eina_Bool
|
||||
e_configure_option_ctx_update(E_Configure_Option_Ctx *ctx, const char *str)
|
||||
{
|
||||
Eina_List *l, *ll, *tlist, *tmp, *clist = NULL;
|
||||
Eina_List *l, *ll, *alist, *tlist, *tmp = NULL, *clist = NULL;
|
||||
Eina_Stringshare *tag, *alias;
|
||||
char *s, *e, *update;
|
||||
Eina_Bool skip;
|
||||
|
||||
if ((!str) || (!str[0]))
|
||||
{
|
||||
|
@ -2581,76 +2582,42 @@ e_configure_option_ctx_update(E_Configure_Option_Ctx *ctx, const char *str)
|
|||
}
|
||||
update = strdupa(str);
|
||||
eina_str_tolower(&update);
|
||||
tlist = eina_list_clone(tags_alias_list);
|
||||
for (s = e = strdupa(update); e[0]; e++)
|
||||
{
|
||||
if (isalnum(e[0])) continue;
|
||||
e[0] = 0;
|
||||
if (e - s > 1)
|
||||
{
|
||||
tmp = NULL;
|
||||
EINA_LIST_FOREACH_SAFE(tlist, l, ll, alias)
|
||||
{
|
||||
if ((!strstr(s, alias)) && (!strstr(alias, s))) continue;
|
||||
tag = eina_hash_find(tags_alias_hash, alias);
|
||||
if (eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, alias, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
break;
|
||||
}
|
||||
tlist = eina_list_remove_list(tlist, l);
|
||||
if (strncmp(s, alias, e - s))
|
||||
{
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
continue;
|
||||
}
|
||||
tmp = eina_list_free(tmp);
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
break;
|
||||
}
|
||||
if (tmp) clist = eina_list_merge(clist, tmp);
|
||||
}
|
||||
s = e + 1;
|
||||
}
|
||||
if (e - s > 1)
|
||||
{
|
||||
tmp = NULL;
|
||||
EINA_LIST_FOREACH_SAFE(tlist, l, ll, alias)
|
||||
{
|
||||
if ((!strstr(s, alias)) && (!strstr(alias, s))) continue;
|
||||
tag = eina_hash_find(tags_alias_hash, alias);
|
||||
if (eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, alias, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
break;
|
||||
}
|
||||
tlist = eina_list_remove_list(tlist, l);
|
||||
if (strncmp(s, alias, e - s))
|
||||
{
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
continue;
|
||||
}
|
||||
tmp = eina_list_free(tmp);
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
break;
|
||||
}
|
||||
if (tmp) clist = eina_list_merge(clist, tmp);
|
||||
}
|
||||
eina_list_free(tlist);
|
||||
alist = eina_list_clone(tags_alias_list);
|
||||
tlist = eina_list_clone(tags_list);
|
||||
for (s = e = strdupa(update); e[0]; e++)
|
||||
{
|
||||
if (isalnum(e[0])) continue;
|
||||
e[0] = 0;
|
||||
if (e - s > 1)
|
||||
{
|
||||
if (e - s <= 1) goto end;
|
||||
tmp = NULL;
|
||||
skip = EINA_FALSE;
|
||||
EINA_LIST_FOREACH_SAFE(alist, l, ll, alias)
|
||||
{
|
||||
if ((!strstr(s, alias)) && (!strstr(alias, s))) continue;
|
||||
tag = eina_hash_find(tags_alias_hash, alias);
|
||||
if (clist && eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, alias, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
skip = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
alist = eina_list_remove_list(alist, l);
|
||||
if (strncmp(s, alias, e - s))
|
||||
{
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
continue;
|
||||
}
|
||||
tmp = eina_list_free(tmp);
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
skip = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
if (skip) goto end;
|
||||
EINA_LIST_FOREACH_SAFE(tlist, l, ll, tag)
|
||||
{
|
||||
if ((!strstr(s, tag)) && (!strstr(tag, s))) continue;
|
||||
if (eina_list_data_find(clist, tag))
|
||||
if (clist && eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, tag, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
|
@ -2666,17 +2633,42 @@ e_configure_option_ctx_update(E_Configure_Option_Ctx *ctx, const char *str)
|
|||
tmp = eina_list_append(tmp, tag);
|
||||
break;
|
||||
}
|
||||
end:
|
||||
if (tmp) clist = eina_list_merge(clist, tmp);
|
||||
}
|
||||
tmp = NULL;
|
||||
s = e + 1;
|
||||
}
|
||||
if (e - s > 1)
|
||||
while (e - s > 1)
|
||||
{
|
||||
tmp = NULL;
|
||||
skip = EINA_FALSE;
|
||||
EINA_LIST_FOREACH_SAFE(alist, l, ll, alias)
|
||||
{
|
||||
if ((!strstr(s, alias)) && (!strstr(alias, s))) continue;
|
||||
tag = eina_hash_find(tags_alias_hash, alias);
|
||||
if (clist && eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, alias, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
skip = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
alist = eina_list_remove_list(alist, l);
|
||||
if (strncmp(s, alias, e - s))
|
||||
{
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
continue;
|
||||
}
|
||||
tmp = eina_list_free(tmp);
|
||||
tmp = eina_list_append(tmp, tag);
|
||||
skip = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
if (skip) break;
|
||||
EINA_LIST_FOREACH_SAFE(tlist, l, ll, tag)
|
||||
{
|
||||
if ((!strstr(s, tag)) && (!strstr(tag, s))) continue;
|
||||
if (eina_list_data_find(clist, tag))
|
||||
if (clist && eina_list_data_find(clist, tag))
|
||||
{
|
||||
if (strncmp(s, tag, e - s)) continue;
|
||||
tmp = eina_list_free(tmp);
|
||||
|
@ -2692,8 +2684,10 @@ e_configure_option_ctx_update(E_Configure_Option_Ctx *ctx, const char *str)
|
|||
tmp = eina_list_append(tmp, tag);
|
||||
break;
|
||||
}
|
||||
if (tmp) clist = eina_list_merge(clist, tmp);
|
||||
break;
|
||||
}
|
||||
if (tmp) clist = eina_list_merge(clist, tmp);
|
||||
eina_list_free(alist);
|
||||
eina_list_free(tlist);
|
||||
if (eina_list_count(clist) != eina_list_count(ctx->tags))
|
||||
goto update;
|
||||
|
|
Loading…
Reference in New Issue