Use ecore_list_for_each in stead of ECORE_LIST_FOR_EACH (faster).

SVN revision: 34095
This commit is contained in:
Kim Woelders 2008-03-23 06:49:50 +00:00
parent c9053d3090
commit a39948076c
3 changed files with 72 additions and 47 deletions

View File

@ -749,25 +749,33 @@ PagerShow(Pager * p)
EwinShow(ewin);
}
typedef struct
{
Desk *dsk;
void (*func) (Pager * p, void *prm);
void *prm;
} pager_foreach_data;
static void
_PagersForeachFunc(void *item, void *prm)
{
Pager *p = (Pager *) item;
pager_foreach_data *data = (pager_foreach_data *) prm;
if (data->dsk && data->dsk != p->dsk)
return;
data->func(p, data->prm);
}
static void
PagersForeach(Desk * dsk, void (*func) (Pager * p, void *prm), void *prm)
{
Pager *p, *p_cur;
pager_foreach_data data;
if (!pager_list)
return;
/* We may get here recursively */
p_cur = (Pager *) ecore_list_current(pager_list);
ECORE_LIST_FOR_EACH(pager_list, p)
{
if (dsk && dsk != p->dsk)
continue;
func(p, prm);
}
ecore_list_goto(pager_list, p_cur);
data.dsk = dsk;
data.func = func;
data.prm = prm;
ecore_list_for_each(pager_list, _PagersForeachFunc, &data);
}
typedef struct

View File

@ -214,15 +214,21 @@ IdlerDel(Idler * id)
Efree(id);
}
static void
_IdlerRun(void *_id, void *prm __UNUSED__)
{
Idler *id = (Idler *) _id;
id->func(id->data);
}
void
IdlersRun(void)
{
Idler *id;
if (EDebug(EDBUG_TYPE_IDLERS))
Eprintf("IdlersRun\n");
ECORE_LIST_FOR_EACH(idler_list, id) id->func(id->data);
ecore_list_for_each(idler_list, _IdlerRun, NULL);
}
/*
@ -241,20 +247,23 @@ struct _animator
};
static void
AnimatorsRun(int val __UNUSED__, void *data __UNUSED__)
_AnimatorRun(void *_an, void *prm __UNUSED__)
{
Animator *an;
Animator *an = (Animator *) _an;
int again;
ECORE_LIST_FOR_EACH(animator_list, an)
{
#if DEBUG_ANIMATORS > 1
Eprintf("AnimatorRun %p\n", an);
Eprintf("AnimatorRun %p\n", an);
#endif
again = an->func(an->data);
if (!again)
AnimatorDel(an);
}
again = an->func(an->data);
if (!again)
AnimatorDel(an);
}
static void
AnimatorsRun(int val __UNUSED__, void *data __UNUSED__)
{
ecore_list_for_each(animator_list, _AnimatorRun, NULL);
if (ecore_list_count(animator_list))
DoIn("Anim", 1e-3 * Conf.animation.step, AnimatorsRun, 0, NULL);

View File

@ -866,35 +866,43 @@ WindowMatchEobjOpsParse(EObj * eo, const char *ops)
return err;
}
void
WindowMatchEwinOps(EWin * ewin)
static void
_WindowMatchEwinFunc(void *_wm, void *_ew)
{
const WindowMatch *wm;
const WindowMatch *wm = (WindowMatch *) _wm;
EWin *ew = (EWin *) _ew;
ECORE_LIST_FOR_EACH(wm_list, wm)
{
if (wm->op != MATCH_OP_WINOP || !WindowMatchEwinTest(wm, ewin))
continue;
if (wm->op != MATCH_OP_WINOP || !WindowMatchEwinTest(wm, ew))
return;
/* Match found - do the ops */
WindowMatchEobjOpsParse(EoObj(ewin), wm->args);
}
/* Match found - do the ops */
WindowMatchEobjOpsParse(EoObj(ew), wm->args);
}
void
WindowMatchEwinOps(EWin * ew)
{
ecore_list_for_each(wm_list, _WindowMatchEwinFunc, ew);
}
#if USE_COMPOSITE
static void
_WindowMatchEobjFunc(void *_wm, void *_eo)
{
const WindowMatch *wm = (WindowMatch *) _wm;
EObj *eo = (EObj *) _eo;
if (wm->op != MATCH_OP_WINOP || !WindowMatchEobjTest(wm, eo))
return;
/* Match found - do the ops */
WindowMatchEobjOpsParse(eo, wm->args);
}
void
WindowMatchEobjOps(EObj * eo)
{
const WindowMatch *wm;
ECORE_LIST_FOR_EACH(wm_list, wm)
{
if (wm->op != MATCH_OP_WINOP || !WindowMatchEobjTest(wm, eo))
continue;
/* Match found - do the ops */
WindowMatchEobjOpsParse(eo, wm->args);
}
ecore_list_for_each(wm_list, _WindowMatchEobjFunc, eo);
}
#endif