summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2009-12-01 20:51:34 +0100
committerEdward Hervey <bilboed@bilboed.com>2009-12-29 13:13:23 +0100
commit67bfee60aca62e0569c835c830ce4686476b6779 (patch)
tree6ea27aba2100cd400fd6a98b274d17772718bc98
parent1f04f0f0527b005103e16dfcde813622a6f0694f (diff)
gvalue: Add speedup macro for checking compatible values within gvalue.c
Trims on average 20% cpu time off the method previously calling g_value_type_compatible
-rw-r--r--gobject/gvalue.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gobject/gvalue.c b/gobject/gvalue.c
index 1cf82cd5b..03b7f9d77 100644
--- a/gobject/gvalue.c
+++ b/gobject/gvalue.c
@@ -137,6 +137,9 @@ static GBSearchConfig transform_bconfig = {
G_BSEARCH_ARRAY_ALIGN_POWER2,
};
+/* --- speedup macros --- */
+#define VALUE_TYPE_COMPATIBLE(src,dest) (g_type_is_a ((src), (dest)) && \
+ g_type_value_table_peek ((dest)) == g_type_value_table_peek ((src)))
/* --- functions --- */
void
@@ -512,7 +515,7 @@ g_value_type_transformable (GType src_type,
g_return_val_if_fail (G_TYPE_IS_VALUE (src_type), FALSE);
g_return_val_if_fail (G_TYPE_IS_VALUE (dest_type), FALSE);
- return (g_value_type_compatible (src_type, dest_type) ||
+ return (VALUE_TYPE_COMPATIBLE (src_type, dest_type) ||
transform_func_lookup (src_type, dest_type) != NULL);
}
@@ -563,7 +566,7 @@ g_value_transform (const GValue *src_value,
g_return_val_if_fail (G_IS_VALUE (dest_value), FALSE);
dest_type = G_VALUE_TYPE (dest_value);
- if (g_value_type_compatible (G_VALUE_TYPE (src_value), dest_type))
+ if (VALUE_TYPE_COMPATIBLE (G_VALUE_TYPE (src_value), dest_type))
{
g_value_copy (src_value, dest_value);