diff --git a/src/libsysprof-analyze/sysprof-symbol-private.h b/src/libsysprof-analyze/sysprof-symbol-private.h index 1af67980..b859155e 100644 --- a/src/libsysprof-analyze/sysprof-symbol-private.h +++ b/src/libsysprof-analyze/sysprof-symbol-private.h @@ -29,6 +29,8 @@ struct _SysprofSymbol { GObject parent_instance; + guint hash; + GRefString *name; GRefString *binary_path; GRefString *binary_nick; @@ -43,4 +45,17 @@ SysprofSymbol *_sysprof_symbol_new (GRefString *name, SysprofAddress begin_address, SysprofAddress end_address); +static inline gboolean +_sysprof_symbol_equal (const SysprofSymbol *a, + const SysprofSymbol *b) +{ + if (a == b) + return TRUE; + + if (a->hash != b->hash) + return FALSE; + + return strcmp (a->name, b->name) == 0; +} + G_END_DECLS diff --git a/src/libsysprof-analyze/sysprof-symbol.c b/src/libsysprof-analyze/sysprof-symbol.c index 719ffb85..1d44209e 100644 --- a/src/libsysprof-analyze/sysprof-symbol.c +++ b/src/libsysprof-analyze/sysprof-symbol.c @@ -144,6 +144,14 @@ _sysprof_symbol_new (GRefString *name, self->binary_nick = binary_nick; self->begin_address = begin_address; self->end_address = end_address; + self->hash = g_str_hash (name); return self; } + +gboolean +sysprof_symbol_equal (const SysprofSymbol *a, + const SysprofSymbol *b) +{ + return _sysprof_symbol_equal (a, b); +}