[babl] babl: use inlined lookup functions inside type implementations



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]