hermet pushed a commit to branch master.

commit 6c7b2afd9bb8767a2d90c48a3b7e68a650585d71
Author: ChunEon Park <[email protected]>
Date:   Wed Jul 17 15:05:40 2013 +0900

    elementary/widget - use eina_inlist in transate data to improve memory 
access / allocations.
---
 src/lib/elm_widget.c | 35 +++++++++++++++++++++--------------
 src/lib/elm_widget.h |  4 ++--
 2 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index f3d2fe9..370fb67 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -40,6 +40,7 @@ struct _Elm_Event_Cb_Data
 
 struct _Elm_Translate_String_Data
 {
+   EINA_INLIST;
    Eina_Stringshare *id;
    Eina_Stringshare *domain;
    Eina_Stringshare *string;
@@ -305,11 +306,15 @@ _elm_widget_smart_del(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
      }
    sd->tooltips = eina_list_free(sd->tooltips); /* should be empty anyway */
    sd->cursors = eina_list_free(sd->cursors); /* should be empty anyway */
-   EINA_LIST_FREE(sd->translate_strings, ts)
+   while (sd->translate_strings)
      {
+        ts = EINA_INLIST_CONTAINER_GET(sd->translate_strings,
+                                       Elm_Translate_String_Data);
         eina_stringshare_del(ts->id);
         eina_stringshare_del(ts->domain);
         eina_stringshare_del(ts->string);
+        sd->translate_strings = eina_inlist_remove(sd->translate_strings,
+                                                   sd->translate_strings);
         free(ts);
      }
 
@@ -3815,16 +3820,15 @@ 
elm_widget_domain_translatable_part_text_set(Evas_Object *obj,
 }
 
 static Elm_Translate_String_Data *
-_translate_string_data_get(Eina_List *translate_strings, const char *part)
+_translate_string_data_get(Eina_Inlist *translate_strings, const char *part)
 {
    Elm_Translate_String_Data *ts;
    Eina_Stringshare *str;
-   Eina_List *l;
 
-   if (eina_list_count(translate_strings) == 0) return NULL;
+   if (!translate_strings) return NULL;
 
    str = eina_stringshare_add(part);
-   EINA_LIST_FOREACH(translate_strings, l, ts)
+   EINA_INLIST_FOREACH(translate_strings, ts)
      {
         if (ts->id == str) break;
         else ts = NULL;
@@ -3835,9 +3839,9 @@ _translate_string_data_get(Eina_List *translate_strings, 
const char *part)
 }
 
 static Elm_Translate_String_Data *
-_part_text_translatable_set(Eina_List **translate_strings, const char *part, 
Eina_Bool translatable, Eina_Bool preset)
+_part_text_translatable_set(Eina_Inlist **translate_strings, const char *part, 
Eina_Bool translatable, Eina_Bool preset)
 {
-   Eina_List *t;
+   Eina_Inlist *t;
    Elm_Translate_String_Data *ts;
    t = *translate_strings;
    ts = _translate_string_data_get(t, part);
@@ -3850,7 +3854,7 @@ _part_text_translatable_set(Eina_List 
**translate_strings, const char *part, Ein
              if (!ts) return NULL;
 
              ts->id = eina_stringshare_add(part);
-             t = eina_list_append(t, ts);
+             t = eina_inlist_append(t, (Eina_Inlist*) ts);
           }
         if (preset) ts->preset = EINA_TRUE;
      }
@@ -3860,7 +3864,7 @@ _part_text_translatable_set(Eina_List 
**translate_strings, const char *part, Ein
      {
         if (ts)
           {
-             t = eina_list_remove(t, ts);
+             t = eina_inlist_remove(t, EINA_INLIST_GET(ts));
              eina_stringshare_del(ts->id);
              eina_stringshare_del(ts->domain);
              eina_stringshare_del(ts->string);
@@ -3979,7 +3983,7 @@ elm_widget_translate(Evas_Object *obj)
 }
 
 static const char*
-_part_text_translate(Eina_List *translate_strings,
+_part_text_translate(Eina_Inlist *translate_strings,
                      const char *part,
                      const char *text)
 {
@@ -4035,7 +4039,7 @@ _elm_widget_translate(Eo *obj EINA_UNUSED, void *_pd 
EINA_UNUSED, va_list *list
 
 #ifdef HAVE_GETTEXT
    Elm_Translate_String_Data *ts;
-   EINA_LIST_FOREACH(sd->translate_strings, l, ts)
+   EINA_INLIST_FOREACH(sd->translate_strings, ts)
      {
         if (!ts->string) continue;
         const char *s = dgettext(ts->domain, ts->string);
@@ -4905,11 +4909,15 @@ _elm_widget_item_free(Elm_Widget_Item *item)
         free(wisd);
      }
 
-   EINA_LIST_FREE(item->translate_strings, ts)
+   while (item->translate_strings)
      {
+        ts = EINA_INLIST_CONTAINER_GET(item->translate_strings,
+                                       Elm_Translate_String_Data);
         eina_stringshare_del(ts->id);
         eina_stringshare_del(ts->domain);
         eina_stringshare_del(ts->string);
+        item->translate_strings = eina_inlist_remove(item->translate_strings,
+                                                     item->translate_strings);
         free(ts);
      }
 
@@ -5747,8 +5755,7 @@ _elm_widget_item_translate(Elm_Widget_Item *item)
 
 #ifdef HAVE_GETTEXT
    Elm_Translate_String_Data *ts;
-   const Eina_List *l;
-   EINA_LIST_FOREACH(item->translate_strings, l, ts)
+   EINA_INLIST_FOREACH(item->translate_strings, ts)
      {
         if (!ts->string) continue;
         const char *s = dgettext(ts->domain, ts->string);
diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h
index 20bb47a..388b2db 100644
--- a/src/lib/elm_widget.h
+++ b/src/lib/elm_widget.h
@@ -402,7 +402,7 @@ typedef struct _Elm_Widget_Smart_Data
    int                           child_drag_x_locked;
    int                           child_drag_y_locked;
 
-   Eina_List                    *translate_strings;
+   Eina_Inlist                  *translate_strings;
    Eina_List                    *focus_chain;
    Eina_List                    *event_cb;
 
@@ -575,7 +575,7 @@ struct _Elm_Widget_Item
    Evas_Object                   *access_obj;
    const char                    *access_info;
    Eina_List                     *access_order;
-   Eina_List                     *translate_strings;
+   Eina_Inlist                   *translate_strings;
    Eina_List                     *signals;
 
    Eina_Bool                      disabled : 1;

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to