babl: use inlined lookup functions inside type implementations
authorØyvind Kolås <pippin@gimp.org>
Wed, 6 Mar 2019 11:09:47 +0000 (12:09 +0100)
committerØyvind Kolås <pippin@gimp.org>
Wed, 6 Mar 2019 11:10:51 +0000 (12:10 +0100)
This avoids function call stack overhead for some calls that are
in many of our hot-paths.

babl/babl-db.c
babl/babl-hash-table.c

index ba62a549e104b3ac423f46d8e6219c0a6f2fae7a..2ae47a4b39375c4ffcc5d0f02dcce547d15a91be 100644 (file)
 #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;
 }
index 8316db1721470589b95561c9b912cb5e266a27e3..97e70129b6c0db62f5339134855999604cc45b9b 100644 (file)
@@ -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)