Hi,

eina_bench.patch:
   fixes a few things so that e17 bench can run

eina_share_common-mem.patch:
   use Eina_Rbtree instead of Eina_Share_Common_Head for top level
   structs

Cheers, Jérémy
diff --git a/eina/src/tests/Ecore_Data.h b/eina/src/tests/Ecore_Data.h
index 50d42f1..3d4530c 100644
--- a/eina/src/tests/Ecore_Data.h
+++ b/eina/src/tests/Ecore_Data.h
@@ -415,8 +415,8 @@ struct _ecore_string
    int references;
 };
 
-EAPI int         ecore_string_init();
-EAPI void        ecore_string_shutdown();
+EAPI int         ecore_string_init(void);
+EAPI int         ecore_string_shutdown(void);
 EAPI const char *ecore_string_instance(const char *string);
 EAPI void        ecore_string_release(const char *string);
 
diff --git a/eina/src/tests/ecore_strings.c b/eina/src/tests/ecore_strings.c
index d76e4c5..15deae6 100644
--- a/eina/src/tests/ecore_strings.c
+++ b/eina/src/tests/ecore_strings.c
@@ -33,7 +33,7 @@ static int ecore_string_init_count = 0;
  * @return  Zero on failure, non-zero on successful initialization.
  */
 EAPI int
-ecore_string_init()
+ecore_string_init(void)
 {
    /*
     * No strings have been loaded at this point, so create the hash
@@ -138,9 +138,11 @@ ecore_string_hash_dump_stats(void)
 
 /**
  * Shutdown the ecore string internal structures
+ * @return 0 when the module is completely shut down, 1 or
+ * greater otherwise.
  */
-EAPI void
-ecore_string_shutdown()
+EAPI int
+ecore_string_shutdown(void)
 {
    --ecore_string_init_count;
    if (!ecore_string_init_count)
@@ -148,6 +150,7 @@ ecore_string_shutdown()
         ecore_hash_destroy(ecore_strings);
         ecore_strings = NULL;
      }
+   return ecore_string_init_count;
 }
 
 static void
diff --git a/eina/src/tests/eina_bench_stringshare_e17.c 
b/eina/src/tests/eina_bench_stringshare_e17.c
index 6ab0a80..1c45945 100644
--- a/eina/src/tests/eina_bench_stringshare_e17.c
+++ b/eina/src/tests/eina_bench_stringshare_e17.c
@@ -57,10 +57,10 @@ static Eina_Stringshare_Test eina_str = {
 
 static Eina_Stringshare_Test evas_str = {
    "evas",
-/*  evas_stringshare_init, */
+   NULL,
    evas_stringshare_add,
-   evas_stringshare_del
-/*  evas_stringshare_shutdown */
+   evas_stringshare_del,
+   NULL
 };
 
 static Eina_Stringshare_Test ecore_str = {
@@ -71,7 +71,7 @@ static Eina_Stringshare_Test ecore_str = {
    ecore_string_shutdown
 };
 
-static Eina_Stringshare_Test *str[] = {
+static Eina_Stringshare_Test *tests[] = {
    &eina_str,
    &evas_str,
    &ecore_str,
@@ -87,16 +87,17 @@ eina_bench_e17_stringshare(Eina_Stringshare_Test *str)
 
    eina_counter_start(cnt);
 
-   str->init();
+   if (str->init)
+      str->init();
 
 #include "strlog"
 
-   str->shutdown();
+   if (str->shutdown)
+      str->shutdown();
 
    eina_counter_stop(cnt, 1);
 
-   fprintf(stderr, "For `%s`:\n", str->name);
-   eina_counter_dump(cnt);
+   fprintf(stderr, "For `%s`:\n%s\n", str->name,eina_counter_dump(cnt));
 
    eina_counter_free(cnt);
 }
@@ -110,8 +111,8 @@ eina_bench_e17(void)
 
    eina_init();
 
-   for (i = 0; str[i]; ++i)
-      eina_bench_e17_stringshare(str[i]);
+   for (i = 0; tests[i]; ++i)
+      eina_bench_e17_stringshare(tests[i]);
 
    eina_shutdown();
 #endif
diff --git a/eina/src/lib/eina_share_common.c b/eina/src/lib/eina_share_common.c
index 91ad0db..f7e477a 100644
--- a/eina/src/lib/eina_share_common.c
+++ b/eina/src/lib/eina_share_common.c
@@ -90,7 +90,7 @@
  * @cond LOCAL
  */
 
-#define EINA_SHARE_COMMON_BUCKETS 256
+#define EINA_SHARE_COMMON_TREES 256
 #define EINA_SHARE_COMMON_MASK 0xFF
 
 static const char EINA_MAGIC_SHARE_STR[] = "Eina Share";
@@ -137,7 +137,7 @@ struct _Eina_Share
 
 struct _Eina_Share_Common
 {
-   Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS];
+   Eina_Rbtree *trees[EINA_SHARE_COMMON_TREES];
 
    EINA_MAGIC
 };
@@ -406,13 +406,12 @@ _eina_share_common_head_alloc(int slen)
 
 static const char *
 _eina_share_common_add_head(Eina_Share *share,
-                            Eina_Share_Common_Head **p_bucket,
+                            Eina_Rbtree **p_tree,
                             int hash,
                             const char *str,
                             unsigned int slen,
                             unsigned int null_size)
 {
-   Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
    Eina_Share_Common_Head *head;
 
    head = _eina_share_common_head_alloc(slen + null_size);
@@ -439,11 +438,9 @@ _eina_share_common_add_head(Eina_Share *share,
 }
 
 static void
-_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket,
+_eina_share_common_del_head(Eina_Rbtree **p_tree,
                             Eina_Share_Common_Head *head)
 {
-   Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
-
    *p_tree = eina_rbtree_inline_remove
          (*p_tree, EINA_RBTREE_GET(head),
          EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
@@ -512,10 +509,10 @@ 
_eina_share_common_head_remove_node(Eina_Share_Common_Head *head,
 }
 
 static Eina_Share_Common_Head *
-_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash)
+_eina_share_common_find_hash(Eina_Rbtree *p_tree, int hash)
 {
-   return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup
-             (EINA_RBTREE_GET(bucket), &hash, 0,
+   return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup(
+             p_tree, &hash, 0,
              EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL);
 }
 
@@ -644,13 +641,12 @@ eina_share_common_shutdown(Eina_Share **_share)
    _eina_share_common_population_stats(share);
 
    /* remove any string still in the table */
-   for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
+   for (i = 0; i < EINA_SHARE_COMMON_TREES; i++)
      {
-        eina_rbtree_delete(EINA_RBTREE_GET(
-                              share->share->buckets[i]),
+        eina_rbtree_delete(share->share->trees[i],
                            EINA_RBTREE_FREE_CB(
                               _eina_share_common_head_free), NULL);
-        share->share->buckets[i] = NULL;
+        share->share->trees[i] = NULL;
      }
    MAGIC_FREE(share->share);
 
@@ -718,7 +714,8 @@ eina_share_common_add_length(Eina_Share *share,
                              unsigned int slen,
                              unsigned int null_size)
 {
-   Eina_Share_Common_Head **p_bucket, *ed;
+   Eina_Rbtree **tree;
+   Eina_Share_Common_Head *ed;
    Eina_Share_Common_Node *el;
    int hash_num, hash;
 
@@ -735,13 +732,13 @@ eina_share_common_add_length(Eina_Share *share,
    hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
 
    eina_lock_take(&_mutex_big);
-   p_bucket = share->share->buckets + hash_num;
+   tree = share->share->trees + hash_num;
 
-   ed = _eina_share_common_find_hash(*p_bucket, hash);
+   ed = _eina_share_common_find_hash(*tree, hash);
    if (!ed)
      {
         const char *s = _eina_share_common_add_head(share,
-                                                    p_bucket,
+                                                    tree,
                                                     hash,
                                                     str,
                                                     slen,
@@ -809,8 +806,8 @@ Eina_Bool
 eina_share_common_del(Eina_Share *share, const char *str)
 {
    unsigned int slen;
+   Eina_Rbtree**tree;
    Eina_Share_Common_Head *ed;
-   Eina_Share_Common_Head **p_bucket;
    Eina_Share_Common_Node *node;
    int hash_num, hash;
 
@@ -838,8 +835,8 @@ eina_share_common_del(Eina_Share *share, const char *str)
    hash_num = hash & 0xFF;
    hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
 
-   p_bucket = share->share->buckets + hash_num;
-   ed = _eina_share_common_find_hash(*p_bucket, hash);
+   tree = share->share->trees + hash_num;
+   ed = _eina_share_common_find_hash(*tree, hash);
    if (!ed)
       goto on_error;
 
@@ -852,7 +849,7 @@ eina_share_common_del(Eina_Share *share, const char *str)
       MAGIC_FREE(node);
 
    if (!ed->head)
-      _eina_share_common_del_head(p_bucket, ed);
+      _eina_share_common_del_head(tree, ed);
    else
       _eina_share_common_population_head_del(share, ed);
 
@@ -898,9 +895,9 @@ eina_share_common_dump(Eina_Share *share, void 
(*additional_dump)(
    printf("DDD:-------------------\n");
 
    eina_lock_take(&_mutex_big);
-   for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
+   for (i = 0; i < EINA_SHARE_COMMON_TREES; i++)
      {
-        if (!share->share->buckets[i])
+        if (!share->share->trees[i])
           {
              continue; //      printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", 
i,
 
@@ -908,7 +905,7 @@ eina_share_common_dump(Eina_Share *share, void 
(*additional_dump)(
 
 //            sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node));
         it = eina_rbtree_iterator_prefix(
-              (Eina_Rbtree *)share->share->buckets[i]);
+              (Eina_Rbtree *)share->share->trees[i]);
         eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), 
&di);
         eina_iterator_free(it);
      }
------------------------------------------------------------------------------
WINDOWS 8 is here. 
Millions of people.  Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to