Enlightenment CVS committal
Author : cedric
Project : e17
Module : proto/eina
Dir : e17/proto/eina/src/include
Modified Files:
eina_hash.h
Added Files:
eina_inline_hash.x
Log Message:
Major cleanup. Eina_Hash now support other key than string. All code except
allocation failure and foreach is covered by the test.
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/include/eina_hash.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eina_hash.h 30 Jul 2008 13:35:49 -0000 1.2
+++ eina_hash.h 6 Aug 2008 15:46:57 -0000 1.3
@@ -7,15 +7,59 @@
*
*/
typedef struct _Eina_Hash Eina_Hash;
+typedef unsigned int (*Eina_Key_Length)(const void *key);
+#define EINA_KEY_LENGTH(Function) ((Eina_Key_Length)Function)
+typedef int (*Eina_Key_Cmp)(const void *key1, int key1_length,
+ const void *key2, int key2_length);
+#define EINA_KEY_CMP(Function) ((Eina_Key_Cmp)Function)
+typedef int (*Eina_Key_Hash)(const void *key, int key_length);
+#define EINA_KEY_HASH(Function) ((Eina_Key_Hash)Function)
-EAPI Eina_Hash *eina_hash_add (Eina_Hash *hash, const char *key, const void
*data);
-EAPI Eina_Hash *eina_hash_direct_add (Eina_Hash *hash, const char *key, const
void *data);
-EAPI Eina_Hash *eina_hash_del (Eina_Hash *hash, const char *key, const void
*data);
-EAPI void *eina_hash_find(const Eina_Hash *hash, const char *key);
-EAPI void *eina_hash_modify(Eina_Hash *hash, const char *key, const void
*data);
-EAPI int eina_hash_size(const Eina_Hash *hash);
-EAPI void eina_hash_free(Eina_Hash *hash);
-EAPI void eina_hash_foreach(const Eina_Hash *hash, Eina_Bool (*func) (const
Eina_Hash *hash, const char *key, void *data, void *fdata),
- const void *fdata);
+EAPI int eina_hash_init(void);
+EAPI int eina_hash_shutdown(void);
+
+EAPI Eina_Hash * eina_hash_new(Eina_Key_Length key_length_cb,
+ Eina_Key_Cmp key_cmp_cb,
+ Eina_Key_Hash key_hash_cb);
+EAPI Eina_Hash * eina_hash_string_djb2_new(void);
+EAPI Eina_Hash * eina_hash_string_superfast_new(void);
+
+EAPI Eina_Bool eina_hash_add(Eina_Hash *hash, const void *key, const void
*data);
+EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash, const void *key, const
void *data);
+EAPI Eina_Bool eina_hash_del(Eina_Hash *hash, const void *key, const void
*data);
+EAPI void * eina_hash_find(const Eina_Hash *hash, const void *key);
+EAPI void * eina_hash_modify(Eina_Hash *hash, const void *key, const void
*data);
+EAPI void eina_hash_free(Eina_Hash *hash);
+EAPI int eina_hash_population(const Eina_Hash *hash);
+
+EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash,
+ const void *key, int key_length, int
key_hash,
+ const void *data);
+EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash,
+ const void *key, int key_length,
int key_hash,
+ const void *data);
+EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash,
+ const void *key, int key_length, int
key_hash,
+ const void *data);
+EAPI void * eina_hash_find_by_hash(const Eina_Hash *hash,
+ const void *key, int key_length, int
key_hash);
+EAPI void * eina_hash_modify_by_hash(Eina_Hash *hash,
+ const void *key, int key_length, int
key_hash,
+ const void *data);
+
+/* FIXME: Should go with iterator support. */
+typedef Eina_Bool (*Eina_Foreach)(const Eina_Hash *hash, const void *key, void
*data, void *fdata);
+EAPI void eina_hash_foreach(const Eina_Hash *hash,
+ Eina_Foreach cb,
+ const void *fdata);
+
+/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) hash function
+ used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */
+EAPI int eina_hash_superfast(const char *key, int len);
+
+/* Hash function first reported by dan bernstein many years ago in comp.lang.c
*/
+static inline int eina_hash_djb2(const char *key, int len);
+
+#include "eina_inline_hash.x"
#endif /*EINA_HASH_H_*/
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs