From: Øyvind Kolås Date: Wed, 6 Mar 2019 11:09:47 +0000 (+0100) Subject: babl: use inlined lookup functions inside type implementations X-Git-Tag: archive/raspbian/1%0.1.106-3+rpi1^2~15^2~11^2~138 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2f0765a0d16ef482af27a87e124564614008f1f7;p=babl.git babl: use inlined lookup functions inside type implementations This avoids function call stack overhead for some calls that are in many of our hot-paths. --- diff --git a/babl/babl-db.c b/babl/babl-db.c index ba62a54..2ae47a4 100644 --- a/babl/babl-db.c +++ b/babl/babl-db.c @@ -27,6 +27,57 @@ #include #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) @@ -49,14 +100,14 @@ static int 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 @@ -100,7 +151,7 @@ Babl * 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); } @@ -143,9 +194,9 @@ babl_db_exist (BablDb *db, { 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; } @@ -154,7 +205,7 @@ babl_db_exist_by_id (BablDb *db, 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; } @@ -163,7 +214,7 @@ babl_db_exist_by_name (BablDb *db, 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; } diff --git a/babl/babl-hash-table.c b/babl/babl-hash-table.c index 8316db1..97e7012 100644 --- a/babl/babl-hash-table.c +++ b/babl/babl-hash-table.c @@ -33,43 +33,6 @@ hash_insert (BablHashTable *htab, static void hash_rehash (BablHashTable *htab); - -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_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); -} - static inline int hash_insert (BablHashTable *htab, Babl *item)