#include <string.h>
#include "babl-internal.h"
+static int
+_babl_hash_by_str (BablHashTable *htab,
+ const char *str)
+{
+ int hash = 0;
+
+ while (*str)
+ {
+ hash += *str++;
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
+ }
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+
+ return (hash & htab->mask);
+}
+
+int
+babl_hash_by_str (BablHashTable *htab,
+ const char *str)
+{
+ return _babl_hash_by_str (htab, str);
+}
+
+
+static int
+_babl_hash_by_int (BablHashTable *htab,
+ int id)
+{
+ int hash = 0;
+ hash += id & 0xFF;
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
+ id >>= 8;
+ hash += id & 0xFF;
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+
+ return (hash & htab->mask);
+}
+
+int
+babl_hash_by_int (BablHashTable *htab,
+ int id)
+{
+ return _babl_hash_by_int (htab, id);
+}
+
static int
db_find_by_name (Babl *item,
void *data)
db_hash_by_name (BablHashTable *htab,
Babl *item)
{
- return babl_hash_by_str (htab, item->instance.name);
+ return _babl_hash_by_str (htab, item->instance.name);
}
static int
db_hash_by_id (BablHashTable *htab,
Babl *item)
{
- return babl_hash_by_int (htab, item->instance.id);
+ return _babl_hash_by_int (htab, item->instance.id);
}
static int
babl_db_find (BablDb *db,
const char *name)
{
- return babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name),
+ return babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name),
NULL, (void *) name);
}
{
Babl *ret;
if (id)
- ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id);
- else
- ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), NULL, (void *) name);
+ ret = babl_hash_table_find (db->id_hash, _babl_hash_by_int (db->id_hash, id), NULL, &id);
+ else
+ ret = babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name), NULL, (void *) name);
return ret;
}
int id)
{
Babl *ret;
- ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id);
+ ret = babl_hash_table_find (db->id_hash, _babl_hash_by_int (db->id_hash, id), NULL, &id);
return ret;
}
const char *name)
{
Babl *ret;
- ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name),
+ ret = babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name),
NULL, (void *) name);
return ret;
}