[glib: 1/2] g_str_equal: Provide macro for optimization
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/2] g_str_equal: Provide macro for optimization
- Date: Tue, 11 Oct 2022 18:19:27 +0000 (UTC)
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]