formatting fix + list walk optimisation.
authorraster <raster>
Sat, 4 Sep 2010 03:53:12 +0000 (03:53 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 4 Sep 2010 03:53:12 +0000 (03:53 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@51874 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_match.c
src/lib/edje_message_queue.c
src/lib/edje_program.c

index b9ff606..caa7084 100644 (file)
@@ -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;
index 3ffb137..419f8f4 100644 (file)
@@ -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)
      {
index e483798..f28a8d1 100644 (file)
@@ -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);