Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        edje_cache.c edje_load.c edje_private.h 


Log Message:
Use a hash for faster file global data lookup. If we hit a case where
per-object data lookup is slow, then this should be extended to include that.

===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_cache.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- edje_cache.c        22 Jan 2007 12:44:57 -0000      1.9
+++ edje_cache.c        6 Mar 2007 12:03:34 -0000       1.10
@@ -69,6 +69,7 @@
    Edje_File *edf;
    Edje_Part_Collection *edc;
    Eet_File *ef;
+   Evas_List *l;
    
    ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef)
@@ -102,6 +103,14 @@
    edf->references = 1;
 
    _edje_textblock_style_parse_and_fix(edf);
+
+   for (l = edf->data; l; l = evas_list_remove(l, l->data))
+     {
+       Edje_Data *di = l->data;
+       edf->data_cache = evas_hash_add(edf->data_cache, 
evas_stringshare_add(di->key), di->value);
+       free(di);
+     }
+   edf->data = NULL;
    
    if (!coll)
      {
@@ -117,6 +126,7 @@
    if (edc_ret) *edc_ret = edc;
 
    eet_close(ef);
+
    return edf;
 }
 
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -3 -r1.95 -r1.96
--- edje_load.c 22 Jan 2007 12:44:57 -0000      1.95
+++ edje_load.c 6 Mar 2007 12:03:34 -0000       1.96
@@ -426,23 +426,15 @@
    char *str = NULL;
    int error_ret = 0;
    
-   edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL);
-   if (edf != NULL)
+   if (key)
      {
-       for (l = edf->data; l; l = l->next)
+       edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL);
+       if ((edf != NULL) && (edf->data_cache != NULL))
          {
-            Edje_Data *di;
-       
-            di = l->data;
-            if ((di->key) && (key) && (!strcmp(di->key, key)))
-              {
-                 if (!di->value) return NULL;
-                 str = strdup(di->value);
-                 break;
-              }
-     
+            str = evas_hash_find(edf->data_cache, key);
+            if (str) str = strdup(str);
+            _edje_cache_file_unref(edf);
          }
-       _edje_cache_file_unref(edf);
      }
    return str;
 }
@@ -581,6 +573,19 @@
    ed->table_programs = NULL;
    ed->table_programs_size = 0;
 }
+/**
+ * Used to free the cached data values that are stored in the data_cache
+ * hash table.
+ */
+static Evas_Bool data_cache_free(Evas_Hash *hash, const char *key,
+                                  void *data, void *fdata)
+{
+       evas_stringshare_del(data);
+
+       return 1;
+}
+
+
 
 void
 _edje_file_free(Edje_File *edf)
@@ -657,7 +662,13 @@
        if (edt->value) evas_stringshare_del(edt->value);
        free(edt);
      }
-   
+   if (edf->data_cache)
+     {
+       evas_hash_foreach(edf->data_cache, data_cache_free, NULL);
+       evas_hash_free(edf->data_cache);
+       edf->data_cache = NULL;
+     }
+
    while (edf->color_classes)
      {
        Edje_Color_Class *ecc;
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -3 -r1.116 -r1.117
--- edje_private.h      9 Oct 2006 15:19:18 -0000       1.116
+++ edje_private.h      6 Mar 2007 12:03:34 -0000       1.117
@@ -229,6 +229,7 @@
    
    Evas_Hash                      *collection_hash;
    Evas_List                      *collection_cache;
+   Evas_Hash                      *data_cache;
 };
 
 struct _Edje_Style



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to