[glib: 1/2] g_str_equal: Provide macro for optimization




commit 6e341750dfbcf752e23f2eadb5072606e1a016d8
Author: Xavier Claessens <xavier claessens collabora com>
Date:   Thu Sep 29 08:16:47 2022 -0400

    g_str_equal: Provide macro for optimization
    
    g_str_equal() is a nicer API than strcmp()==0, and less error prone.
    However, forcing a function call prevents compiler from doing
    optimizations. In the case it is not used as callback to GHashTable,
    provide a macro that calls strcmp directly. This also has the side
    effect that it forces arguments to be `const char *` instead of
    `gconstpointer` in the case it is not used as callback, which adds type
    safety.
    
    Fixes: #2775

 glib/ghash.c | 4 ++--
 glib/ghash.h | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/glib/ghash.c b/glib/ghash.c
index 5fb722c04b..c6c334f416 100644
--- a/glib/ghash.c
+++ b/glib/ghash.c
@@ -2323,8 +2323,8 @@ g_hash_table_get_values (GHashTable *hash_table)
  * Returns: %TRUE if the two keys match
  */
 gboolean
-g_str_equal (gconstpointer v1,
-             gconstpointer v2)
+(g_str_equal) (gconstpointer v1,
+               gconstpointer v2)
 {
   const gchar *string1 = v1;
   const gchar *string2 = v2;
diff --git a/glib/ghash.h b/glib/ghash.h
index cbd2f98bf7..8e7f4a0d1d 100644
--- a/glib/ghash.h
+++ b/glib/ghash.h
@@ -160,6 +160,10 @@ void        g_hash_table_unref             (GHashTable     *hash_table);
 GLIB_AVAILABLE_IN_ALL
 gboolean g_str_equal    (gconstpointer  v1,
                          gconstpointer  v2);
+
+/* Macro for optimization in the case it is not used as callback function */
+#define g_str_equal(v1, v2) (strcmp ((v1), (v2)) == 0)
+
 GLIB_AVAILABLE_IN_ALL
 guint    g_str_hash     (gconstpointer  v);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]