Add a method to compare infos
authorSimon van der Linden <svdlinden@src.gnome.org>
Fri, 20 Nov 2009 09:38:36 +0000 (10:38 +0100)
committerSimon van der Linden <svdlinden@leonard.(none)>
Fri, 20 Nov 2009 09:40:07 +0000 (10:40 +0100)
Add g_base_info_equal.

girepository/ginfo.c
girepository/girepository.h

index 1f14cb6..2aacb76 100644 (file)
@@ -554,6 +554,26 @@ g_base_info_get_typelib (GIBaseInfo *info)
   return info->typelib;
 }
 
+/*
+ * g_base_info_equal:
+ * @info1: A #GIBaseInfo
+ * @info2: A #GIBaseInfo
+ *
+ * Compare two #GIBaseInfo.
+ *
+ * Using pointer comparison is not practical since many functions return
+ * different instances of #GIBaseInfo that refers to the same part of the
+ * TypeLib; use this function instead to do #GIBaseInfo comparisons.
+ *
+ * Return value: TRUE if and only if @info1 equals @info2.
+ */
+gboolean
+g_base_info_equal (GIBaseInfo *info1, GIBaseInfo *info2)
+{
+  /* Compare the TypeLib pointers, which are mmapped. */
+  return info1->typelib->data + info1->offset == info2->typelib->data + info2->offset;
+}
+
 /* GIFunctionInfo functions */
 const gchar *
 g_function_info_get_symbol (GIFunctionInfo *info)
index c881c8b..c30418a 100644 (file)
@@ -203,6 +203,8 @@ gboolean               g_base_info_iterate_attributes (GIBaseInfo      *info,
                                                        char          **value);
 GIBaseInfo *           g_base_info_get_container    (GIBaseInfo   *info);
 GTypelib *             g_base_info_get_typelib      (GIBaseInfo   *info);
+gboolean               g_base_info_equal            (GIBaseInfo   *info1,
+                                                     GIBaseInfo   *info2);
 
 GIBaseInfo *           g_info_new                   (GIInfoType    type,
                                                     GIBaseInfo   *container,