Move hash gen func to own file.
authorSebastian Dransfeld <sd@tango.flipp.net>
Thu, 28 Dec 2006 15:23:47 +0000 (15:23 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Thu, 28 Dec 2006 15:23:47 +0000 (15:23 +0000)
SVN revision: 27605

legacy/eet/src/lib/Eet_private.h
legacy/eet/src/lib/Makefile.am
legacy/eet/src/lib/eet_data.c
legacy/eet/src/lib/eet_lib.c
legacy/eet/src/lib/eet_utils.c [new file with mode: 0644]

index 4f142fd..f4e8626 100644 (file)
@@ -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
index a98bd04..0829fbd 100644 (file)
@@ -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@
index 6ddeb22..363351c 100644 (file)
@@ -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;
index c075b88..902e7fc 100644 (file)
@@ -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 (file)
index 0000000..898d87f
--- /dev/null
@@ -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;
+}
+