From 2d34d6d2a3c14868d118cee4dda90b0dd00fd530 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 4 Sep 2010 03:53:12 +0000 Subject: [PATCH] formatting fix + list walk optimisation. SVN revision: 51874 --- legacy/edje/src/lib/edje_match.c | 258 ++++++++++++----------- legacy/edje/src/lib/edje_message_queue.c | 19 +- legacy/edje/src/lib/edje_program.c | 2 +- 3 files changed, 150 insertions(+), 129 deletions(-) diff --git a/legacy/edje/src/lib/edje_match.c b/legacy/edje/src/lib/edje_match.c index b9ff606103..caa7084408 100644 --- a/legacy/edje/src/lib/edje_match.c +++ b/legacy/edje/src/lib/edje_match.c @@ -37,7 +37,7 @@ static int _edje_match_states_alloc(Edje_Patterns *ppat, int n) { Edje_States *l; - + const size_t patterns_size = ppat->patterns_size; const size_t patterns_max_length = ppat->max_length; @@ -95,7 +95,7 @@ _edje_match_states_insert(Edje_States *list, size_t pos) { size_t i; - + i = (idx * (patterns_max_length + 1)) + pos; if (i < list->size) @@ -133,41 +133,41 @@ _edje_match_patterns_exec_class_token(enum status *status, const char *cl_tok, char c) { - if (! *cl_tok) - { - *status = patterns_syntax_error; - return 0; - } - else if (cl_tok[1] == '-' && cl_tok[2] != ']') - { - if (*cl_tok <= c && c <= cl_tok[2]) - *status = patterns_found; - return 3; - } - else - { - if (c == *cl_tok) - *status = patterns_found; - return 1; - } + if (! *cl_tok) + { + *status = patterns_syntax_error; + return 0; + } + else if (cl_tok[1] == '-' && cl_tok[2] != ']') + { + if (*cl_tok <= c && c <= cl_tok[2]) + *status = patterns_found; + return 3; + } + else + { + if (c == *cl_tok) + *status = patterns_found; + return 1; + } } static Edje_Match_Error _edje_match_patterns_exec_class_complement(const char *cl_tok, size_t *ret) { - switch (*cl_tok) - { + switch (*cl_tok) + { case 0: return EDJE_MATCH_SYNTAX_ERROR; - + case '!': *ret = 1; return EDJE_MATCH_OK; - - default: - *ret = 0; - return EDJE_MATCH_OK; - } + + default: + *ret = 0; + return EDJE_MATCH_OK; + } } static Edje_Match_Error @@ -178,24 +178,26 @@ _edje_match_patterns_exec_class(const char *cl, enum status status = patterns_not_found; int pos = 1; size_t neg; - + if (_edje_match_patterns_exec_class_complement(cl + 1, &neg) != EDJE_MATCH_OK) - return EDJE_MATCH_SYNTAX_ERROR; - + return EDJE_MATCH_SYNTAX_ERROR; + pos += neg; - + do - pos += _edje_match_patterns_exec_class_token(&status, cl + pos, c); + { + pos += _edje_match_patterns_exec_class_token(&status, cl + pos, c); + } while (cl[pos] && cl[pos] != ']'); - + if (status == patterns_syntax_error || ! cl[pos]) - return EDJE_MATCH_SYNTAX_ERROR; - + return EDJE_MATCH_SYNTAX_ERROR; + if (status == patterns_found) - *ret = neg ? 0 : pos + 1; + *ret = neg ? 0 : pos + 1; else - *ret = neg ? pos + 1 : 0; - + *ret = neg ? pos + 1 : 0; + return EDJE_MATCH_OK; } @@ -389,8 +391,10 @@ _edje_match_collection_dir_exec_finals(const size_t *finals, size_t i; for (i = 0; i < states->size; ++i) - if (states->states[i].pos >= finals[states->states[i].idx]) - return EINA_TRUE; + { + if (states->states[i].pos >= finals[states->states[i].idx]) + return EINA_TRUE; + } return EINA_FALSE; } @@ -407,20 +411,26 @@ edje_match_programs_exec_check_finals(const size_t *signal_finals, size_t j; for (i = 0; i < signal_states->size; ++i) - if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx]) - for (j = 0; j < source_states->size; ++j) - if (signal_states->states[i].idx == source_states->states[j].idx - && source_states->states[j].pos >= source_finals[source_states->states[j].idx]) - { - Edje_Program *pr; - - pr = programs[signal_states->states[i].idx]; - if (pr) - { - if (func(pr, data)) - return EINA_FALSE; - } - } + { + if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx]) + { + for (j = 0; j < source_states->size; ++j) + { + if (signal_states->states[i].idx == source_states->states[j].idx + && source_states->states[j].pos >= source_finals[source_states->states[j].idx]) + { + Edje_Program *pr; + + pr = programs[signal_states->states[i].idx]; + if (pr) + { + if (func(pr, data)) + return EINA_FALSE; + } + } + } + } + } return EINA_TRUE; } @@ -442,28 +452,34 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat, int r = 1; for (i = 0; i < signal_states->size; ++i) - if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx]) - for (j = 0; j < source_states->size; ++j) - if (signal_states->states[i].idx == source_states->states[j].idx - && source_states->states[j].pos >= source_finals[source_states->states[j].idx]) - { - Edje_Signal_Callback *escb; - - escb = eina_list_nth(callbacks, signal_states->states[i].idx); - if (escb) - { - if ((!escb->just_added) - && (!escb->delete_me)) - { - escb->func(escb->data, ed->obj, signal, source); - r = 2; - } - if (_edje_block_break(ed)) - return 0; - if ((singal_ppat->delete_me) || (source_ppat->delete_me)) - return 0; - } - } + { + if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx]) + { + for (j = 0; j < source_states->size; ++j) + { + if (signal_states->states[i].idx == source_states->states[j].idx + && source_states->states[j].pos >= source_finals[source_states->states[j].idx]) + { + Edje_Signal_Callback *escb; + + escb = eina_list_nth(callbacks, signal_states->states[i].idx); + if (escb) + { + if ((!escb->just_added) + && (!escb->delete_me)) + { + escb->func(escb->data, ed->obj, signal, source); + r = 2; + } + if (_edje_block_break(ed)) + return 0; + if ((singal_ppat->delete_me) || (source_ppat->delete_me)) + return 0; + } + } + } + } + } return r; } @@ -480,16 +496,16 @@ _edje_match_fn(const Edje_Patterns *ppat, for (c = string; *c && states->size; ++c) { size_t i; - + _edje_match_states_clear(new_states, ppat->patterns_size, ppat->max_length); - + for (i = 0; i < states->size; ++i) { const size_t idx = states->states[i].idx; const size_t pos = states->states[i].pos; - + if (!ppat->patterns[idx][pos]) - continue; + continue; else if (ppat->patterns[idx][pos] == '*') { _edje_match_states_insert(states, ppat->max_length, idx, pos + 1); @@ -498,22 +514,22 @@ _edje_match_fn(const Edje_Patterns *ppat, else { size_t m; - + if (_edje_match_patterns_exec_token(ppat->patterns[idx] + pos, *c, &m) != EDJE_MATCH_OK) - return NULL; - + return NULL; + if (m) - _edje_match_states_insert(new_states, ppat->max_length, idx, pos + m); + _edje_match_states_insert(new_states, ppat->max_length, idx, pos + m); } } - { - Edje_States *tmp = states; - - states = new_states; - new_states = tmp; - } + { + Edje_States *tmp = states; + + states = new_states; + new_states = tmp; + } } return states; @@ -529,9 +545,9 @@ edje_match_collection_dir_exec(const Edje_Patterns *ppat, _edje_match_patterns_exec_init_states(ppat->states, ppat->patterns_size, ppat->max_length); result = _edje_match_fn(ppat, string, ppat->states); - + if (result) - r = _edje_match_collection_dir_exec_finals(ppat->finals, result); + r = _edje_match_collection_dir_exec_finals(ppat->finals, result); return r; } @@ -560,13 +576,13 @@ edje_match_programs_exec(const Edje_Patterns *ppat_signal, source_result = _edje_match_fn(ppat_source, source, ppat_source->states); if (signal_result && source_result) - r = edje_match_programs_exec_check_finals(ppat_signal->finals, - ppat_source->finals, - signal_result, - source_result, - programs, - func, - data); + r = edje_match_programs_exec_check_finals(ppat_signal->finals, + ppat_source->finals, + signal_result, + source_result, + programs, + func, + data); return r; } @@ -595,16 +611,16 @@ edje_match_callback_exec(Edje_Patterns *ppat_signal, source_result = _edje_match_fn(ppat_source, source, ppat_source->states); if (signal_result && source_result) - r = edje_match_callback_exec_check_finals(ppat_signal, - ppat_source, - ppat_signal->finals, - ppat_source->finals, - signal_result, - source_result, - signal, - source, - callbacks, - ed); + r = edje_match_callback_exec_check_finals(ppat_signal, + ppat_source, + ppat_signal->finals, + ppat_source->finals, + signal_result, + source_result, + signal, + source, + callbacks, + ed); ppat_signal->ref--; ppat_source->ref--; if (ppat_signal->ref <= 0) edje_match_patterns_free(ppat_signal); @@ -670,35 +686,35 @@ edje_match_program_hash_build(Edje_Program * const *programs, Eina_List *result = NULL; Eina_Rbtree *new = NULL; unsigned int i; - + for (i = 0; i < count; ++i) { if (programs[i]->signal && !strpbrk(programs[i]->signal, "*?[\\") && programs[i]->source && !strpbrk(programs[i]->source, "*?[\\")) { Edje_Signal_Source_Char *item; - + item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, programs[i]->signal, 0, EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), programs[i]->source); if (!item) { item = malloc(sizeof (Edje_Signal_Source_Char)); if (!item) continue; - + item->signal = programs[i]->signal; item->source = programs[i]->source; item->list = NULL; - + new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item), EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL); } - + item->list = eina_list_prepend(item->list, programs[i]); } else - result = eina_list_prepend(result, programs[i]); + result = eina_list_prepend(result, programs[i]); } - + *tree = new; return result; } @@ -718,26 +734,26 @@ edje_match_callback_hash_build(const Eina_List *callbacks, && callback->source && !strpbrk(callback->source, "*?[\\")) { Edje_Signal_Source_Char *item; - + item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, callback->signal, 0, EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), callback->source); if (!item) { item = malloc(sizeof (Edje_Signal_Source_Char)); if (!item) continue; - + item->signal = callback->signal; item->source = callback->source; item->list = NULL; - + new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item), EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL); } - + item->list = eina_list_prepend(item->list, callback); } else - result = eina_list_prepend(result, callback); + result = eina_list_prepend(result, callback); } *tree = new; diff --git a/legacy/edje/src/lib/edje_message_queue.c b/legacy/edje/src/lib/edje_message_queue.c index 3ffb137c93..419f8f477b 100644 --- a/legacy/edje/src/lib/edje_message_queue.c +++ b/legacy/edje/src/lib/edje_message_queue.c @@ -96,7 +96,7 @@ edje_object_message_handler_set(Evas_Object *obj, void (*func) (void *data, Evas EAPI void edje_object_message_signal_process(Evas_Object *obj) { - Eina_List *l, *tmpq = NULL; + Eina_List *l, *ln, *tmpq = NULL; Edje *ed; Edje_Message *em; const void *data; @@ -104,12 +104,17 @@ edje_object_message_signal_process(Evas_Object *obj) ed = _edje_fetch(obj); if (!ed) return; - EINA_LIST_FOREACH(msgq, l, em) - if (em->edje == ed) - tmpq = eina_list_append(tmpq, em); - /* now remove them from the old queue */ - EINA_LIST_FOREACH(tmpq, l, data) - msgq = eina_list_remove(msgq, data); + for (l = msgq; l; ) + { + ln = l->next; + em = l->data; + if (em->edje == ed) + { + tmpq = eina_list_append(tmpq, em); + msgq = eina_list_remove_list(msgq, l); + } + l = ln; + } /* a temporary message queue */ if (tmp_msgq) { diff --git a/legacy/edje/src/lib/edje_program.c b/legacy/edje/src/lib/edje_program.c index e483798c11..f28a8d1b5c 100644 --- a/legacy/edje/src/lib/edje_program.c +++ b/legacy/edje/src/lib/edje_program.c @@ -1144,7 +1144,7 @@ _edje_emit_handle(Edje *ed, const char *sig, const char *src) if (ed->delete_me) return; if (!sig) sig = ""; if (!src) src = ""; -// printf("EDJE EMIT: signal: \"%s\" source: \"%s\"\n", sig, src); +// printf("EDJE EMIT: (%p) signal: \"%s\" source: \"%s\"\n", ed, sig, src); _edje_block(ed); _edje_ref(ed); _edje_freeze(ed);