diff options
author | Edward Hervey <bilboed@bilboed.com> | 2009-12-01 20:51:34 +0100 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2009-12-29 13:13:23 +0100 |
commit | 67bfee60aca62e0569c835c830ce4686476b6779 (patch) | |
tree | 6ea27aba2100cd400fd6a98b274d17772718bc98 | |
parent | 1f04f0f0527b005103e16dfcde813622a6f0694f (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.c | 7 |
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); |