Add support for foreign structs
[gnome.gobject-introspection] / girepository / girepository.h
index 42db8d3..cfa5b39 100644 (file)
@@ -1,6 +1,7 @@
 /* GObject introspection: Repository
  *
  * Copyright (C) 2005 Matthias Clasen
+ * Copyright (C) 2008,2009 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
 
 G_BEGIN_DECLS
 
-#define G_TYPE_IREPOSITORY      (g_irepository_get_type ())
-#define G_IREPOSITORY(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_IREPOSITORY, GIRepository))
-
-typedef struct _GIRepository         GIRepository; 
-typedef struct _GIRepositoryClass    GIRepositoryClass; 
-typedef struct _GIRepositoryPrivate  GIRepositoryPrivate; 
-typedef struct _GIBaseInfo           GIBaseInfo;
-typedef struct _GICallableInfo       GICallableInfo;
-typedef struct _GIFunctionInfo       GIFunctionInfo;
-typedef struct _GICallbackInfo       GICallbackInfo;
-typedef struct _GIRegisteredTypeInfo GIRegisteredTypeInfo;
-typedef struct _GIStructInfo         GIStructInfo;
-typedef struct _GIUnionInfo          GIUnionInfo;
-typedef struct _GIEnumInfo           GIEnumInfo;
-typedef struct _GIObjectInfo         GIObjectInfo;
-typedef struct _GIInterfaceInfo      GIInterfaceInfo;
-typedef struct _GIConstantInfo       GIConstantInfo;
-typedef struct _GIValueInfo          GIValueInfo;
-typedef struct _GISignalInfo         GISignalInfo;
-typedef struct _GIVFuncInfo          GIVFuncInfo;
-typedef struct _GIPropertyInfo       GIPropertyInfo;
-typedef struct _GIFieldInfo          GIFieldInfo;
-typedef struct _GIArgInfo            GIArgInfo;
-typedef struct _GITypeInfo           GITypeInfo;
-typedef struct _GIErrorDomainInfo    GIErrorDomainInfo;
+#define G_TYPE_IREPOSITORY              (g_irepository_get_type ())
+#define G_IREPOSITORY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_IREPOSITORY, GIRepository))
+#define G_IREPOSITORY_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_IREPOSITORY, GIRepositoryClass))
+#define G_IS_IREPOSITORY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_IREPOSITORY))
+#define G_IS_IREPOSITORY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_IREPOSITORY))
+#define G_IREPOSITORY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_IREPOSITORY, GIRepositoryClass))
+
+typedef struct _GIRepository         GIRepository;
+typedef struct _GIRepositoryClass    GIRepositoryClass;
+typedef struct _GIRepositoryPrivate  GIRepositoryPrivate;
+
+typedef struct _GIBaseInfoStub       GIBaseInfo;
+
+struct _GIBaseInfoStub {
+  gint32 dummy1;
+  gint32 dummy2;
+  gpointer dummy3;
+  gpointer dummy4;
+  gpointer dummy5;
+  guint32  dummy6;
+  guint32  dummy7;
+  gpointer padding[4];
+};
+
+typedef GIBaseInfo GICallableInfo;
+typedef GIBaseInfo GIFunctionInfo;
+typedef GIBaseInfo GICallbackInfo;
+typedef GIBaseInfo GIRegisteredTypeInfo;
+typedef GIBaseInfo GIStructInfo;
+typedef GIBaseInfo GIUnionInfo;
+typedef GIBaseInfo GIEnumInfo;
+typedef GIBaseInfo GIObjectInfo;
+typedef GIBaseInfo GIInterfaceInfo;
+typedef GIBaseInfo GIConstantInfo;
+typedef GIBaseInfo GIValueInfo;
+typedef GIBaseInfo GISignalInfo;
+typedef GIBaseInfo GIVFuncInfo;
+typedef GIBaseInfo GIPropertyInfo;
+typedef GIBaseInfo GIFieldInfo;
+typedef GIBaseInfo GIArgInfo;
+typedef GIBaseInfo GITypeInfo;
+typedef GIBaseInfo GIErrorDomainInfo;
+
 typedef struct _GIUnresolvedInfo     GIUnresolvedInfo;
 typedef struct _GTypelib            GTypelib;
 
-struct _GIRepository 
-{ 
-  GObject parent; 
+struct _GIRepository
+{
+  GObject parent;
 
   /*< private >*/
   GIRepositoryPrivate *priv;
 };
 
 struct _GIRepositoryClass
-{ 
-  GObjectClass parent; 
+{
+  GObjectClass parent;
 };
 
 typedef enum
@@ -77,37 +96,44 @@ typedef enum
 GType         g_irepository_get_type      (void) G_GNUC_CONST;
 GIRepository *g_irepository_get_default   (void);
 void          g_irepository_prepend_search_path (const char *directory);
+GSList *      g_irepository_get_search_path     (void);
 const char *  g_irepository_load_typelib  (GIRepository *repository,
                                           GTypelib     *typelib,
                                           GIRepositoryLoadFlags flags,
                                           GError      **error);
 gboolean      g_irepository_is_registered (GIRepository *repository,
-                                          const gchar  *namespace,
+                                          const gchar  *namespace_,
                                           const gchar  *version);
 GIBaseInfo *  g_irepository_find_by_name  (GIRepository *repository,
-                                          const gchar  *namespace,
+                                          const gchar  *namespace_,
                                           const gchar  *name);
-gboolean      g_irepository_require       (GIRepository *repository,
-                                          const gchar  *namespace,
+GTypelib *    g_irepository_require       (GIRepository *repository,
+                                          const gchar  *namespace_,
                                           const gchar  *version,
                                           GIRepositoryLoadFlags flags,
                                           GError      **error);
 gchar      ** g_irepository_get_dependencies (GIRepository *repository,
-                                             const gchar  *namespace);
+                                             const gchar  *namespace_);
 gchar      ** g_irepository_get_loaded_namespaces (GIRepository *repository);
 GIBaseInfo *  g_irepository_find_by_gtype (GIRepository *repository,
                                           GType         gtype);
 gint          g_irepository_get_n_infos   (GIRepository *repository,
-                                          const gchar  *namespace);
+                                          const gchar  *namespace_);
 GIBaseInfo *  g_irepository_get_info      (GIRepository *repository,
-                                          const gchar  *namespace,
+                                          const gchar  *namespace_,
                                           gint          index);
 const gchar * g_irepository_get_typelib_path   (GIRepository *repository,
-                                               const gchar  *namespace);
+                                               const gchar  *namespace_);
 const gchar * g_irepository_get_shared_library (GIRepository *repository,
-                                               const gchar  *namespace);
+                                               const gchar  *namespace_);
+const gchar * g_irepository_get_c_prefix (GIRepository *repository,
+                                          const gchar  *namespace_);
 const gchar * g_irepository_get_version (GIRepository *repository,
-                                        const gchar  *namespace);
+                                        const gchar  *namespace_);
+
+GOptionGroup * g_irepository_get_option_group (void);
+
+gboolean       g_irepository_dump  (const char *arg, GError **error);
 
 /* Typelib */
 
@@ -136,26 +162,35 @@ typedef enum
 GQuark g_irepository_error_quark (void);
 
 
+/* Global utility functions */
+
+void gi_cclosure_marshal_generic (GClosure       *closure,
+                                  GValue         *return_gvalue,
+                                  guint           n_param_values,
+                                  const GValue   *param_values,
+                                  gpointer        invocation_hint,
+                                  gpointer        marshal_data);
+
 /* Types of objects registered in the repository */
 
-typedef enum 
+typedef enum
 {
   GI_INFO_TYPE_INVALID,
   GI_INFO_TYPE_FUNCTION,
   GI_INFO_TYPE_CALLBACK,
   GI_INFO_TYPE_STRUCT,
   GI_INFO_TYPE_BOXED,
-  GI_INFO_TYPE_ENUM,
+  GI_INFO_TYPE_ENUM,         /*  5 */
   GI_INFO_TYPE_FLAGS,
   GI_INFO_TYPE_OBJECT,
   GI_INFO_TYPE_INTERFACE,
   GI_INFO_TYPE_CONSTANT,
-  GI_INFO_TYPE_ERROR_DOMAIN,
+  GI_INFO_TYPE_ERROR_DOMAIN, /* 10 */
   GI_INFO_TYPE_UNION,
   GI_INFO_TYPE_VALUE,
   GI_INFO_TYPE_SIGNAL,
   GI_INFO_TYPE_VFUNC,
-  GI_INFO_TYPE_PROPERTY,
+  GI_INFO_TYPE_PROPERTY,     /* 15 */
   GI_INFO_TYPE_FIELD,
   GI_INFO_TYPE_ARG,
   GI_INFO_TYPE_TYPE,
@@ -165,20 +200,33 @@ typedef enum
 
 /* GIBaseInfo */
 
+typedef struct {
+  gpointer data;
+  gpointer data2;
+  gpointer data3;
+  gpointer data4;
+} GIAttributeIter;
+
 GIBaseInfo *           g_base_info_ref              (GIBaseInfo   *info);
 void                   g_base_info_unref            (GIBaseInfo   *info);
 GIInfoType             g_base_info_get_type         (GIBaseInfo   *info);
 const gchar *          g_base_info_get_name         (GIBaseInfo   *info);
 const gchar *          g_base_info_get_namespace    (GIBaseInfo   *info);
 gboolean               g_base_info_is_deprecated    (GIBaseInfo   *info);
-const gchar *          g_base_info_get_annotation   (GIBaseInfo   *info,
+const gchar *          g_base_info_get_attribute    (GIBaseInfo   *info,
                                                      const gchar  *name);
+gboolean               g_base_info_iterate_attributes (GIBaseInfo      *info,
+                                                       GIAttributeIter *iterator,
+                                                       char           **name,
+                                                       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,
-                                                    GTypelib     *typelib, 
+                                                    GTypelib     *typelib,
                                                     guint32       offset);
 
 
@@ -190,7 +238,8 @@ typedef enum
   GI_FUNCTION_IS_CONSTRUCTOR = 1 << 1,
   GI_FUNCTION_IS_GETTER      = 1 << 2,
   GI_FUNCTION_IS_SETTER      = 1 << 3,
-  GI_FUNCTION_WRAPS_VFUNC    = 1 << 4
+  GI_FUNCTION_WRAPS_VFUNC    = 1 << 4,
+  GI_FUNCTION_THROWS         = 1 << 5
 } GIFunctionInfoFlags;
 
 const gchar *           g_function_info_get_symbol     (GIFunctionInfo *info);
@@ -198,7 +247,7 @@ GIFunctionInfoFlags     g_function_info_get_flags      (GIFunctionInfo *info);
 GIPropertyInfo *        g_function_info_get_property   (GIFunctionInfo *info);
 GIVFuncInfo *           g_function_info_get_vfunc      (GIFunctionInfo *info);
 
-typedef union 
+typedef union
 {
   gboolean v_boolean;
   gint8    v_int8;
@@ -211,6 +260,8 @@ typedef union
   guint64  v_uint64;
   gfloat   v_float;
   gdouble  v_double;
+  gshort   v_short;
+  gushort  v_ushort;
   gint     v_int;
   guint    v_uint;
   glong    v_long;
@@ -231,7 +282,7 @@ typedef enum
   G_INVOKE_ERROR_ARGUMENT_MISMATCH
 } GInvokeError;
 
-gboolean              g_function_info_invoke         (GIFunctionInfo *info, 
+gboolean              g_function_info_invoke         (GIFunctionInfo *info,
                                                      const GArgument  *in_args,
                                                      int               n_in_args,
                                                      const GArgument  *out_args,
@@ -249,11 +300,16 @@ typedef enum {
 } GITransfer;
 
 GITypeInfo *           g_callable_info_get_return_type (GICallableInfo *info);
+void                   g_callable_info_load_return_type (GICallableInfo *info,
+                                                         GITypeInfo     *type);
 GITransfer             g_callable_info_get_caller_owns (GICallableInfo *info);
 gboolean               g_callable_info_may_return_null (GICallableInfo *info);
 gint                   g_callable_info_get_n_args      (GICallableInfo *info);
 GIArgInfo *            g_callable_info_get_arg         (GICallableInfo *info,
-                                                       gint           n);
+                                                        gint            n);
+void                   g_callable_info_load_arg        (GICallableInfo *info,
+                                                        gint            n,
+                                                        GIArgInfo      *arg);
 
 /* GIArgInfo */
 
@@ -263,13 +319,29 @@ typedef enum  {
   GI_DIRECTION_INOUT
 } GIDirection;
 
+typedef enum {
+  GI_SCOPE_TYPE_INVALID, /* The argument is not of callback type */
+  GI_SCOPE_TYPE_CALL, /* The callback and associated user_data is only used during the
+                         call to this function */
+  GI_SCOPE_TYPE_ASYNC, /* The callback and associated user_data is
+                          only used until the callback is invoked, and the callback
+                          is invoked always exactly once. */
+  GI_SCOPE_TYPE_NOTIFIED /* The callback and and associated user_data is
+                            used until the caller is notfied via the destroy_notify */
+} GIScopeType;
+
 GIDirection            g_arg_info_get_direction          (GIArgInfo *info);
 gboolean               g_arg_info_is_dipper              (GIArgInfo *info);
 gboolean               g_arg_info_is_return_value        (GIArgInfo *info);
 gboolean               g_arg_info_is_optional            (GIArgInfo *info);
 gboolean               g_arg_info_may_be_null            (GIArgInfo *info);
 GITransfer             g_arg_info_get_ownership_transfer (GIArgInfo *info);
+GIScopeType            g_arg_info_get_scope              (GIArgInfo *info);
+gint                   g_arg_info_get_closure            (GIArgInfo *info);
+gint                   g_arg_info_get_destroy            (GIArgInfo *info);
 GITypeInfo *           g_arg_info_get_type               (GIArgInfo *info);
+void                   g_arg_info_load_type              (GIArgInfo *info,
+                                                          GITypeInfo *type);
 
 
 /* GITypeInfo */
@@ -281,30 +353,32 @@ typedef enum {
   GI_TYPE_TAG_INT8      =  2,
   GI_TYPE_TAG_UINT8     =  3,
   GI_TYPE_TAG_INT16     =  4,
-  GI_TYPE_TAG_UINT16    =  5,  
+  GI_TYPE_TAG_UINT16    =  5,
   GI_TYPE_TAG_INT32     =  6,
   GI_TYPE_TAG_UINT32    =  7,
   GI_TYPE_TAG_INT64     =  8,
   GI_TYPE_TAG_UINT64    =  9,
-  GI_TYPE_TAG_INT       = 10,
-  GI_TYPE_TAG_UINT      = 11,
-  GI_TYPE_TAG_LONG      = 12,
-  GI_TYPE_TAG_ULONG     = 13,
-  GI_TYPE_TAG_SSIZE     = 14,
-  GI_TYPE_TAG_SIZE      = 15,
-  GI_TYPE_TAG_FLOAT     = 16,
-  GI_TYPE_TAG_DOUBLE    = 17,
-  GI_TYPE_TAG_TIME_T    = 18,
-  GI_TYPE_TAG_GTYPE     = 19,
-  GI_TYPE_TAG_UTF8      = 20,
-  GI_TYPE_TAG_FILENAME  = 21,
+  GI_TYPE_TAG_SHORT     = 10,
+  GI_TYPE_TAG_USHORT    = 11,
+  GI_TYPE_TAG_INT       = 12,
+  GI_TYPE_TAG_UINT      = 13,
+  GI_TYPE_TAG_LONG      = 14,
+  GI_TYPE_TAG_ULONG     = 15,
+  GI_TYPE_TAG_SSIZE     = 16,
+  GI_TYPE_TAG_SIZE      = 17,
+  GI_TYPE_TAG_FLOAT     = 18,
+  GI_TYPE_TAG_DOUBLE    = 19,
+  GI_TYPE_TAG_TIME_T    = 20,
+  GI_TYPE_TAG_GTYPE     = 21,
+  GI_TYPE_TAG_UTF8      = 22,
+  GI_TYPE_TAG_FILENAME  = 23,
   /* Non-basic types */
-  GI_TYPE_TAG_ARRAY     = 22,
-  GI_TYPE_TAG_INTERFACE = 23,
-  GI_TYPE_TAG_GLIST     = 24,
-  GI_TYPE_TAG_GSLIST    = 25,
-  GI_TYPE_TAG_GHASH     = 26,
-  GI_TYPE_TAG_ERROR     = 27
+  GI_TYPE_TAG_ARRAY     = 24,
+  GI_TYPE_TAG_INTERFACE = 25,
+  GI_TYPE_TAG_GLIST     = 26,
+  GI_TYPE_TAG_GSLIST    = 27,
+  GI_TYPE_TAG_GHASH     = 28,
+  GI_TYPE_TAG_ERROR     = 29
   /* Note - there is only room currently for 32 tags.
    * See docs/typelib-format.txt SimpleTypeBlob definition */
 } GITypeTag;
@@ -319,6 +393,7 @@ GITypeInfo *           g_type_info_get_param_type      (GITypeInfo *info,
                                                        gint       n);
 GIBaseInfo *           g_type_info_get_interface       (GITypeInfo *info);
 gint                   g_type_info_get_array_length    (GITypeInfo *info);
+gint                   g_type_info_get_array_fixed_size(GITypeInfo *info);
 gboolean               g_type_info_is_zero_terminated  (GITypeInfo *info);
 
 gint                   g_type_info_get_n_error_domains (GITypeInfo *info);
@@ -332,7 +407,7 @@ GIInterfaceInfo *           g_error_domain_info_get_codes (GIErrorDomainInfo *in
 
 
 /* GIValueInfo */
+
 glong                  g_value_info_get_value      (GIValueInfo *info);
 
 
@@ -349,6 +424,12 @@ gint                   g_field_info_get_size       (GIFieldInfo *info);
 gint                   g_field_info_get_offset     (GIFieldInfo *info);
 GITypeInfo *           g_field_info_get_type       (GIFieldInfo *info);
 
+gboolean g_field_info_get_field (GIFieldInfo     *field_info,
+                                gpointer         mem,
+                                GArgument       *value);
+gboolean g_field_info_set_field (GIFieldInfo     *field_info,
+                                gpointer         mem,
+                                const GArgument *value);
 
 /* GIUnionInfo */
 gint                   g_union_info_get_n_fields  (GIUnionInfo *info);
@@ -364,6 +445,8 @@ GIConstantInfo *       g_union_info_get_discriminator      (GIUnionInfo *info,
                                                            gint         n);
 GIFunctionInfo *       g_union_info_find_method    (GIUnionInfo *info,
                                                     const gchar *name);
+gsize                  g_union_info_get_size       (GIUnionInfo *info);
+gsize                  g_union_info_get_alignment  (GIUnionInfo *info);
 
 
 /* GIStructInfo */
@@ -375,6 +458,10 @@ GIFunctionInfo *       g_struct_info_get_method    (GIStructInfo *info,
                                                    gint         n);
 GIFunctionInfo *       g_struct_info_find_method   (GIStructInfo *info,
                                                    const gchar *name);
+gsize                  g_struct_info_get_size      (GIStructInfo *info);
+gsize                  g_struct_info_get_alignment (GIStructInfo *info);
+gboolean               g_struct_info_is_gtype_struct (GIStructInfo *info);
+gboolean               g_struct_info_is_foreign    (GIStructInfo *info);
 
 /* GIRegisteredTypeInfo */
 
@@ -387,11 +474,13 @@ GType                  g_registered_type_info_get_g_type    (GIRegisteredTypeInf
 gint                   g_enum_info_get_n_values             (GIEnumInfo      *info);
 GIValueInfo  *         g_enum_info_get_value                (GIEnumInfo      *info,
                                                             gint            n);
+GITypeTag              g_enum_info_get_storage_type         (GIEnumInfo      *info);
 
 /* GIObjectInfo */
 
-const gchar *          g_object_info_get_type_name         (GIObjectInfo    *info);
-const gchar *          g_object_info_get_type_init         (GIObjectInfo    *info);
+const gchar *          g_object_info_get_type_name         (GIObjectInfo    *info);
+const gchar *          g_object_info_get_type_init         (GIObjectInfo    *info);
+gboolean               g_object_info_get_abstract           (GIObjectInfo    *info);
 GIObjectInfo *         g_object_info_get_parent             (GIObjectInfo    *info);
 gint                   g_object_info_get_n_interfaces       (GIObjectInfo    *info);
 GIInterfaceInfo *      g_object_info_get_interface          (GIObjectInfo    *info,
@@ -413,11 +502,14 @@ GISignalInfo *         g_object_info_get_signal             (GIObjectInfo    *in
 gint                   g_object_info_get_n_vfuncs           (GIObjectInfo    *info);
 GIVFuncInfo *          g_object_info_get_vfunc              (GIObjectInfo    *info,
                                                             gint            n);
+GIVFuncInfo *          g_object_info_find_vfunc             (GIObjectInfo *info,
+                                                             const gchar *name);
 gint                   g_object_info_get_n_constants        (GIObjectInfo    *info);
 GIConstantInfo *       g_object_info_get_constant           (GIObjectInfo    *info,
                                                             gint            n);
+GIStructInfo *         g_object_info_get_class_struct       (GIObjectInfo    *info);
+
 
-                                                            
 /* GIInterfaceInfo */
 
 gint                   g_interface_info_get_n_prerequisites (GIInterfaceInfo *info);
@@ -430,17 +522,21 @@ gint                   g_interface_info_get_n_methods       (GIInterfaceInfo *in
 GIFunctionInfo *       g_interface_info_get_method          (GIInterfaceInfo *info,
                                                             gint        n);
 GIFunctionInfo *       g_interface_info_find_method         (GIInterfaceInfo *info,
-                                                            const gchar *name);
+                                                            const gchar *name);
 gint                   g_interface_info_get_n_signals       (GIInterfaceInfo *info);
 GISignalInfo *         g_interface_info_get_signal          (GIInterfaceInfo *info,
                                                             gint        n);
 gint                   g_interface_info_get_n_vfuncs        (GIInterfaceInfo *info);
 GIVFuncInfo *          g_interface_info_get_vfunc           (GIInterfaceInfo *info,
                                                             gint        n);
+GIVFuncInfo *          g_interface_info_find_vfunc          (GIInterfaceInfo *info,
+                                                             const gchar *name);
 gint                   g_interface_info_get_n_constants     (GIInterfaceInfo *info);
 GIConstantInfo *       g_interface_info_get_constant        (GIInterfaceInfo *info,
                                                             gint        n);
 
+GIStructInfo *         g_interface_info_get_iface_struct    (GIInterfaceInfo *info);
+
 
 /* GIPropertyInfo  */
 
@@ -467,6 +563,7 @@ typedef enum
 GIVFuncInfoFlags        g_vfunc_info_get_flags                   (GIVFuncInfo            *info);
 gint                    g_vfunc_info_get_offset                  (GIVFuncInfo            *info);
 GISignalInfo *          g_vfunc_info_get_signal                  (GIVFuncInfo            *info);
+GIFunctionInfo *        g_vfunc_info_get_invoker                 (GIVFuncInfo            *info);
 
 
 /* GIConstantInfo */