Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore


Modified Files:
        Ecore_Data.h ecore_hash.c ecore_strings.c ecore_value.c 


Log Message:
Add basic stat output to hash for testing.
Expose hash output functions for ecore_string.
Move mask calculation outside inner loop for ecore_str_hash.

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- Ecore_Data.h        4 Jan 2007 07:45:39 -0000       1.27
+++ Ecore_Data.h        16 Jan 2007 01:27:01 -0000      1.28
@@ -248,6 +248,7 @@
    EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value);
    EAPI void *ecore_hash_remove(Ecore_Hash *hash, const void *key);
    EAPI void ecore_hash_dump_graph(Ecore_Hash *hash);
+   EAPI void ecore_hash_dump_stats(Ecore_Hash *hash);
 
 
    typedef struct _ecore_path_group Ecore_Path_Group;
@@ -360,6 +361,8 @@
    EAPI void ecore_string_shutdown(void);
    EAPI const char *ecore_string_instance(const char *string);
    EAPI void ecore_string_release(const char *string);
+   EAPI void ecore_string_hash_dump_graph();
+   EAPI void ecore_string_hash_dump_stats();
    
    
    typedef struct _Ecore_Tree_Node Ecore_Tree_Node;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_hash.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- ecore_hash.c        11 Jan 2007 23:42:21 -0000      1.32
+++ ecore_hash.c        16 Jan 2007 01:27:01 -0000      1.33
@@ -318,6 +318,33 @@
      printf("%d\t0\n", i);
 }
 
+/**
+ * Prints the distribution of the given hash table for graphing.
+ * @param hash The given hash table.
+ */
+EAPI void
+ecore_hash_dump_stats(Ecore_Hash *hash)
+{
+   unsigned int i;
+   double variance, sum_n_2 = 0, sum_n = 0;
+
+   for (i = 0; i < ecore_prime_table[hash->size]; i++)
+     {
+       if (hash->buckets[i])
+         {
+            int n = 0;
+            Ecore_Hash_Node *node;
+            for (node = hash->buckets[i]; node; node = node->next)
+              n++;
+            sum_n_2 += ((double)n * (double)n);
+            sum_n += (double)n;
+         }
+     }
+   variance = (sum_n_2 - ((sum_n * sum_n) / (double)i)) / (double)i;
+   printf("Average length: %f\n\tvariance^2: %f\n", (sum_n / (double)i),
+                  variance);
+}
+
 static int
 _ecore_hash_bucket_destroy(Ecore_Hash_Node *list, Ecore_Free_Cb keyd, 
Ecore_Free_Cb valued)
 {
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_strings.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- ecore_strings.c     27 Oct 2006 03:52:28 -0000      1.14
+++ ecore_strings.c     16 Jan 2007 01:27:01 -0000      1.15
@@ -102,6 +102,18 @@
      }
 }
 
+EAPI void
+ecore_string_hash_dump_graph()
+{
+       ecore_hash_dump_graph(ecore_strings);
+}
+
+EAPI void
+ecore_string_hash_dump_stats()
+{
+       ecore_hash_dump_stats(ecore_strings);
+}
+
 /**
  * Shutdown the ecore string internal structures
  */
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_value.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- ecore_value.c       6 Sep 2006 07:06:55 -0000       1.10
+++ ecore_value.c       16 Jan 2007 01:27:01 -0000      1.11
@@ -67,16 +67,18 @@
 ecore_str_hash(const void *key)
 {
    int i;
+   unsigned int mask;
    unsigned int value = 0;
    const char *k = key;
 
    if (!k)
      return 0;
 
+   mask = (sizeof(unsigned int) * 8) - 1;
+
    for (i = 0; k[i] != '\0'; i++)
      {
-       value ^= ((unsigned int) k[i] << ((i * 5) %
-                                         (sizeof(unsigned int) * 8)));
+       value ^= ((unsigned int) k[i] << ((i * 5) & mask));
      }
 
    return value;



-------------------------------------------------------------------------
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