[babl] babl: use inlined lookup functions inside type implementations
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] babl: use inlined lookup functions inside type implementations
- Date: Wed, 6 Mar 2019 11:11:58 +0000 (UTC)
commit 2f0765a0d16ef482af27a87e124564614008f1f7
Author: Øyvind Kolås <pippin gimp org>
Date: Wed Mar 6 12:09:47 2019 +0100
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.
babl/babl-db.c | 67 ++++++++++++++++++++++++++++++++++++++++++++------
babl/babl-hash-table.c | 37 ----------------------------
2 files changed, 59 insertions(+), 45 deletions(-)
---
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 <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)
@@ -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)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]