From 98b5b625abcc8b1fb8188224e136e39e35c1d002 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 28 Dec 2006 15:23:47 +0000 Subject: [PATCH] Move hash gen func to own file. SVN revision: 27605 --- legacy/eet/src/lib/Eet_private.h | 37 +------------------------------- legacy/eet/src/lib/Makefile.am | 1 + legacy/eet/src/lib/eet_data.c | 4 ++-- legacy/eet/src/lib/eet_lib.c | 8 +++---- legacy/eet/src/lib/eet_utils.c | 35 ++++++++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 legacy/eet/src/lib/eet_utils.c diff --git a/legacy/eet/src/lib/Eet_private.h b/legacy/eet/src/lib/Eet_private.h index 4f142fd464..f4e862634a 100644 --- a/legacy/eet/src/lib/Eet_private.h +++ b/legacy/eet/src/lib/Eet_private.h @@ -41,45 +41,10 @@ void _eet_memfile_read_close(FILE *f); FILE *_eet_memfile_write_open(void **data, size_t *size); void _eet_memfile_write_close(FILE *f); void _eet_memfile_shutdown(void); +int _eet_hash_gen(const char *key, int hash_size); #ifndef PATH_MAX #define PATH_MAX 4096 #endif -/* caluclate hash table entry valu with bitmask size of hash_size */ -static int -eet_hash_gen(const char *key, int hash_size) -{ - int hash_num = 0; - int value, i; - unsigned char *ptr; - - const int masks[9] = - { - 0x00, - 0x01, - 0x03, - 0x07, - 0x0f, - 0x1f, - 0x3f, - 0x7f, - 0xff - }; - - /* no string - index 0 */ - if (!key) return 0; - - /* calc hash num */ - for (i = 0, ptr = (unsigned char *)key, value = (int)(*ptr); - value; - ptr++, i++, value = (int)(*ptr)) - hash_num ^= (value | (value << 8)) >> (i & 0x7); - - /* mask it */ - hash_num &= masks[hash_size]; - /* return it */ - return hash_num; -} - #endif diff --git a/legacy/eet/src/lib/Makefile.am b/legacy/eet/src/lib/Makefile.am index a98bd04c10..0829fbd993 100644 --- a/legacy/eet/src/lib/Makefile.am +++ b/legacy/eet/src/lib/Makefile.am @@ -17,6 +17,7 @@ eet_lib.c \ eet_data.c \ eet_image.c \ eet_memfile.c \ +eet_utils.c \ Eet_private.h libeet_la_LIBADD = -lz -ljpeg @fnmatch_libs@ @winsock_libs@ diff --git a/legacy/eet/src/lib/eet_data.c b/legacy/eet/src/lib/eet_data.c index 6ddeb22a8a..363351cb00 100644 --- a/legacy/eet/src/lib/eet_data.c +++ b/legacy/eet/src/lib/eet_data.c @@ -610,7 +610,7 @@ _eet_descriptor_hash_new(Eet_Data_Descriptor *edd) int hash; ede = &(edd->elements.set[i]); - hash = eet_hash_gen((char *) ede->name, 6); + hash = _eet_hash_gen((char *) ede->name, 6); if (!edd->elements.hash.buckets[hash].element) edd->elements.hash.buckets[hash].element = ede; else @@ -651,7 +651,7 @@ _eet_descriptor_hash_find(Eet_Data_Descriptor *edd, char *name) int hash; Eet_Data_Descriptor_Hash *bucket; - hash = eet_hash_gen(name, 6); + hash = _eet_hash_gen(name, 6); if (!edd->elements.hash.buckets[hash].element) return NULL; if (!strcmp(edd->elements.hash.buckets[hash].element->name, name)) return edd->elements.hash.buckets[hash].element; diff --git a/legacy/eet/src/lib/eet_lib.c b/legacy/eet/src/lib/eet_lib.c index c075b88ee9..902e7fcfd9 100644 --- a/legacy/eet/src/lib/eet_lib.c +++ b/legacy/eet/src/lib/eet_lib.c @@ -701,7 +701,7 @@ eet_open(const char *file, Eet_File_Mode mode) efn->name = (char*)((uint8_t*)(p + HEADER_SIZE)); /* get hash bucket it should go in */ - hash = eet_hash_gen(efn->name, ef->header->directory->size); + hash = _eet_hash_gen(efn->name, ef->header->directory->size); efn->next = ef->header->directory->nodes[hash]; ef->header->directory->nodes[hash] = efn; @@ -1020,7 +1020,7 @@ eet_write(Eet_File *ef, const char *name, const void *data, int size, int compre } /* figure hash bucket */ - hash = eet_hash_gen(name, ef->header->directory->size); + hash = _eet_hash_gen(name, ef->header->directory->size); data_size = compress ? 12 + ((size * 101) / 100) : size; @@ -1124,7 +1124,7 @@ eet_delete(Eet_File *ef, const char *name) return 0; /* figure hash bucket */ - hash = eet_hash_gen(name, ef->header->directory->size); + hash = _eet_hash_gen(name, ef->header->directory->size); /* Does this node already exist? */ for (pefn = NULL, efn = ef->header->directory->nodes[hash]; @@ -1252,7 +1252,7 @@ find_node_by_name(Eet_File *ef, const char *name) int hash; /* get hash bucket this should be in */ - hash = eet_hash_gen(name, ef->header->directory->size); + hash = _eet_hash_gen(name, ef->header->directory->size); for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next) { diff --git a/legacy/eet/src/lib/eet_utils.c b/legacy/eet/src/lib/eet_utils.c new file mode 100644 index 0000000000..898d87fa1f --- /dev/null +++ b/legacy/eet/src/lib/eet_utils.c @@ -0,0 +1,35 @@ +int +_eet_hash_gen(const char *key, int hash_size) +{ + int hash_num = 0; + int value, i; + unsigned char *ptr; + + const int masks[9] = + { + 0x00, + 0x01, + 0x03, + 0x07, + 0x0f, + 0x1f, + 0x3f, + 0x7f, + 0xff + }; + + /* no string - index 0 */ + if (!key) return 0; + + /* calc hash num */ + for (i = 0, ptr = (unsigned char *)key, value = (int)(*ptr); + value; + ptr++, i++, value = (int)(*ptr)) + hash_num ^= (value | (value << 8)) >> (i & 0x7); + + /* mask it */ + hash_num &= masks[hash_size]; + /* return it */ + return hash_num; +} +