Bug 557791 – g_irepository_require() could return a GTypelib *
[gnome.gobject-introspection] / girepository / girepository.h
1 /* GObject introspection: Repository
2  *
3  * Copyright (C) 2005 Matthias Clasen
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef __G_IREPOSITORY_H__
22 #define __G_IREPOSITORY_H__
23
24 #include <glib-object.h>
25 #include <gmodule.h>
26
27 G_BEGIN_DECLS
28
29 #define G_TYPE_IREPOSITORY      (g_irepository_get_type ())
30 #define G_IREPOSITORY(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_IREPOSITORY, GIRepository))
31
32 typedef struct _GIRepository         GIRepository; 
33 typedef struct _GIRepositoryClass    GIRepositoryClass; 
34 typedef struct _GIRepositoryPrivate  GIRepositoryPrivate; 
35 typedef struct _GIBaseInfo           GIBaseInfo;
36 typedef struct _GICallableInfo       GICallableInfo;
37 typedef struct _GIFunctionInfo       GIFunctionInfo;
38 typedef struct _GICallbackInfo       GICallbackInfo;
39 typedef struct _GIRegisteredTypeInfo GIRegisteredTypeInfo;
40 typedef struct _GIStructInfo         GIStructInfo;
41 typedef struct _GIUnionInfo          GIUnionInfo;
42 typedef struct _GIEnumInfo           GIEnumInfo;
43 typedef struct _GIObjectInfo         GIObjectInfo;
44 typedef struct _GIInterfaceInfo      GIInterfaceInfo;
45 typedef struct _GIConstantInfo       GIConstantInfo;
46 typedef struct _GIValueInfo          GIValueInfo;
47 typedef struct _GISignalInfo         GISignalInfo;
48 typedef struct _GIVFuncInfo          GIVFuncInfo;
49 typedef struct _GIPropertyInfo       GIPropertyInfo;
50 typedef struct _GIFieldInfo          GIFieldInfo;
51 typedef struct _GIArgInfo            GIArgInfo;
52 typedef struct _GITypeInfo           GITypeInfo;
53 typedef struct _GIErrorDomainInfo    GIErrorDomainInfo;
54 typedef struct _GIUnresolvedInfo     GIUnresolvedInfo;
55 typedef struct _GTypelib            GTypelib;
56
57 struct _GIRepository 
58
59   GObject parent; 
60
61   /*< private >*/
62   GIRepositoryPrivate *priv;
63 };
64
65 struct _GIRepositoryClass
66
67   GObjectClass parent; 
68 };
69
70 typedef enum
71 {
72   G_IREPOSITORY_LOAD_FLAG_LAZY = 1 << 0
73 } GIRepositoryLoadFlags;
74
75 /* Repository */
76
77 GType         g_irepository_get_type      (void) G_GNUC_CONST;
78 GIRepository *g_irepository_get_default   (void);
79 void          g_irepository_prepend_search_path (const char *directory);
80 const char *  g_irepository_load_typelib  (GIRepository *repository,
81                                            GTypelib     *typelib,
82                                            GIRepositoryLoadFlags flags,
83                                            GError      **error);
84 gboolean      g_irepository_is_registered (GIRepository *repository,
85                                            const gchar  *namespace,
86                                            const gchar  *version);
87 GIBaseInfo *  g_irepository_find_by_name  (GIRepository *repository,
88                                            const gchar  *namespace,
89                                            const gchar  *name);
90 GTypelib *    g_irepository_require       (GIRepository *repository,
91                                            const gchar  *namespace,
92                                            const gchar  *version,
93                                            GIRepositoryLoadFlags flags,
94                                            GError      **error);
95 gchar      ** g_irepository_get_dependencies (GIRepository *repository,
96                                               const gchar  *namespace);
97 gchar      ** g_irepository_get_loaded_namespaces (GIRepository *repository);
98 GIBaseInfo *  g_irepository_find_by_gtype (GIRepository *repository,
99                                            GType         gtype);
100 gint          g_irepository_get_n_infos   (GIRepository *repository,
101                                            const gchar  *namespace);
102 GIBaseInfo *  g_irepository_get_info      (GIRepository *repository,
103                                            const gchar  *namespace,
104                                            gint          index);
105 const gchar * g_irepository_get_typelib_path   (GIRepository *repository,
106                                                 const gchar  *namespace);
107 const gchar * g_irepository_get_shared_library (GIRepository *repository,
108                                                 const gchar  *namespace);
109 const gchar * g_irepository_get_version (GIRepository *repository,
110                                          const gchar  *namespace);
111
112 /* Typelib */
113
114 GTypelib *   g_typelib_new_from_memory       (guchar       *memory,
115                                                 gsize         len);
116 GTypelib *   g_typelib_new_from_const_memory (const guchar *memory,
117                                                 gsize         len);
118 GTypelib *   g_typelib_new_from_mapped_file  (GMappedFile  *mfile);
119 void          g_typelib_free                  (GTypelib    *typelib);
120
121 gboolean      g_typelib_symbol                (GTypelib    *typelib,
122                                                const gchar *symbol_name,
123                                                gpointer    *symbol);
124 const gchar * g_typelib_get_namespace         (GTypelib    *typelib);
125
126 typedef enum
127 {
128   G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
129   G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH,
130   G_IREPOSITORY_ERROR_NAMESPACE_VERSION_CONFLICT,
131   G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND
132 } GIRepositoryError;
133
134 #define G_IREPOSITORY_ERROR (g_irepository_error_quark ())
135
136 GQuark g_irepository_error_quark (void);
137
138
139 /* Types of objects registered in the repository */
140
141 typedef enum 
142 {
143   GI_INFO_TYPE_INVALID,
144   GI_INFO_TYPE_FUNCTION,
145   GI_INFO_TYPE_CALLBACK,
146   GI_INFO_TYPE_STRUCT,
147   GI_INFO_TYPE_BOXED,
148   GI_INFO_TYPE_ENUM,
149   GI_INFO_TYPE_FLAGS,
150   GI_INFO_TYPE_OBJECT,
151   GI_INFO_TYPE_INTERFACE,
152   GI_INFO_TYPE_CONSTANT,
153   GI_INFO_TYPE_ERROR_DOMAIN,
154   GI_INFO_TYPE_UNION,
155   GI_INFO_TYPE_VALUE,
156   GI_INFO_TYPE_SIGNAL,
157   GI_INFO_TYPE_VFUNC,
158   GI_INFO_TYPE_PROPERTY,
159   GI_INFO_TYPE_FIELD,
160   GI_INFO_TYPE_ARG,
161   GI_INFO_TYPE_TYPE,
162   GI_INFO_TYPE_UNRESOLVED
163 } GIInfoType;
164
165
166 /* GIBaseInfo */
167
168 GIBaseInfo *           g_base_info_ref              (GIBaseInfo   *info);
169 void                   g_base_info_unref            (GIBaseInfo   *info);
170 GIInfoType             g_base_info_get_type         (GIBaseInfo   *info);
171 const gchar *          g_base_info_get_name         (GIBaseInfo   *info);
172 const gchar *          g_base_info_get_namespace    (GIBaseInfo   *info);
173 gboolean               g_base_info_is_deprecated    (GIBaseInfo   *info);
174 const gchar *          g_base_info_get_annotation   (GIBaseInfo   *info,
175                                                      const gchar  *name);
176 GIBaseInfo *           g_base_info_get_container    (GIBaseInfo   *info);
177 GTypelib *             g_base_info_get_typelib      (GIBaseInfo   *info);
178
179 GIBaseInfo *           g_info_new                   (GIInfoType    type,
180                                                      GIBaseInfo   *container,
181                                                      GTypelib     *typelib, 
182                                                      guint32       offset);
183
184
185 /* GIFunctionInfo */
186
187 typedef enum
188 {
189   GI_FUNCTION_IS_METHOD      = 1 << 0,
190   GI_FUNCTION_IS_CONSTRUCTOR = 1 << 1,
191   GI_FUNCTION_IS_GETTER      = 1 << 2,
192   GI_FUNCTION_IS_SETTER      = 1 << 3,
193   GI_FUNCTION_WRAPS_VFUNC    = 1 << 4,
194   GI_FUNCTION_THROWS         = 1 << 5
195 } GIFunctionInfoFlags;
196
197 const gchar *           g_function_info_get_symbol     (GIFunctionInfo *info);
198 GIFunctionInfoFlags     g_function_info_get_flags      (GIFunctionInfo *info);
199 GIPropertyInfo *        g_function_info_get_property   (GIFunctionInfo *info);
200 GIVFuncInfo *           g_function_info_get_vfunc      (GIFunctionInfo *info);
201
202 typedef union 
203 {
204   gboolean v_boolean;
205   gint8    v_int8;
206   guint8   v_uint8;
207   gint16   v_int16;
208   guint16  v_uint16;
209   gint32   v_int32;
210   guint32  v_uint32;
211   gint64   v_int64;
212   guint64  v_uint64;
213   gfloat   v_float;
214   gdouble  v_double;
215   gint     v_int;
216   guint    v_uint;
217   glong    v_long;
218   gulong   v_ulong;
219   gssize   v_ssize;
220   gsize    v_size;
221   gchar *  v_string;
222   gpointer v_pointer;
223 } GArgument;
224
225 #define G_INVOKE_ERROR (g_invoke_error_quark ())
226 GQuark g_invoke_error_quark (void);
227
228 typedef enum
229 {
230   G_INVOKE_ERROR_FAILED,
231   G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
232   G_INVOKE_ERROR_ARGUMENT_MISMATCH
233 } GInvokeError;
234
235 gboolean              g_function_info_invoke         (GIFunctionInfo *info, 
236                                                       const GArgument  *in_args,
237                                                       int               n_in_args,
238                                                       const GArgument  *out_args,
239                                                       int               n_out_args,
240                                                       GArgument        *return_value,
241                                                       GError          **error);
242
243
244 /* GICallableInfo */
245
246 typedef enum {
247   GI_TRANSFER_NOTHING,
248   GI_TRANSFER_CONTAINER,
249   GI_TRANSFER_EVERYTHING
250 } GITransfer;
251
252 GITypeInfo *           g_callable_info_get_return_type (GICallableInfo *info);
253 GITransfer             g_callable_info_get_caller_owns (GICallableInfo *info);
254 gboolean               g_callable_info_may_return_null (GICallableInfo *info);
255 gint                   g_callable_info_get_n_args      (GICallableInfo *info);
256 GIArgInfo *            g_callable_info_get_arg         (GICallableInfo *info,
257                                                         gint           n);
258
259 /* GIArgInfo */
260
261 typedef enum  {
262   GI_DIRECTION_IN,
263   GI_DIRECTION_OUT,
264   GI_DIRECTION_INOUT
265 } GIDirection;
266
267 GIDirection            g_arg_info_get_direction          (GIArgInfo *info);
268 gboolean               g_arg_info_is_dipper              (GIArgInfo *info);
269 gboolean               g_arg_info_is_return_value        (GIArgInfo *info);
270 gboolean               g_arg_info_is_optional            (GIArgInfo *info);
271 gboolean               g_arg_info_may_be_null            (GIArgInfo *info);
272 GITransfer             g_arg_info_get_ownership_transfer (GIArgInfo *info);
273 GITypeInfo *           g_arg_info_get_type               (GIArgInfo *info);
274
275
276 /* GITypeInfo */
277
278 typedef enum {
279   /* Basic types */
280   GI_TYPE_TAG_VOID      =  0,
281   GI_TYPE_TAG_BOOLEAN   =  1,
282   GI_TYPE_TAG_INT8      =  2,
283   GI_TYPE_TAG_UINT8     =  3,
284   GI_TYPE_TAG_INT16     =  4,
285   GI_TYPE_TAG_UINT16    =  5,  
286   GI_TYPE_TAG_INT32     =  6,
287   GI_TYPE_TAG_UINT32    =  7,
288   GI_TYPE_TAG_INT64     =  8,
289   GI_TYPE_TAG_UINT64    =  9,
290   GI_TYPE_TAG_INT       = 10,
291   GI_TYPE_TAG_UINT      = 11,
292   GI_TYPE_TAG_LONG      = 12,
293   GI_TYPE_TAG_ULONG     = 13,
294   GI_TYPE_TAG_SSIZE     = 14,
295   GI_TYPE_TAG_SIZE      = 15,
296   GI_TYPE_TAG_FLOAT     = 16,
297   GI_TYPE_TAG_DOUBLE    = 17,
298   GI_TYPE_TAG_TIME_T    = 18,
299   GI_TYPE_TAG_GTYPE     = 19,
300   GI_TYPE_TAG_UTF8      = 20,
301   GI_TYPE_TAG_FILENAME  = 21,
302   /* Non-basic types */
303   GI_TYPE_TAG_ARRAY     = 22,
304   GI_TYPE_TAG_INTERFACE = 23,
305   GI_TYPE_TAG_GLIST     = 24,
306   GI_TYPE_TAG_GSLIST    = 25,
307   GI_TYPE_TAG_GHASH     = 26,
308   GI_TYPE_TAG_ERROR     = 27
309   /* Note - there is only room currently for 32 tags.
310    * See docs/typelib-format.txt SimpleTypeBlob definition */
311 } GITypeTag;
312
313 #define G_TYPE_TAG_IS_BASIC(tag) (tag < GI_TYPE_TAG_ARRAY)
314
315 const gchar*           g_type_tag_to_string            (GITypeTag   type);
316
317 gboolean               g_type_info_is_pointer          (GITypeInfo *info);
318 GITypeTag              g_type_info_get_tag             (GITypeInfo *info);
319 GITypeInfo *           g_type_info_get_param_type      (GITypeInfo *info,
320                                                         gint       n);
321 GIBaseInfo *           g_type_info_get_interface       (GITypeInfo *info);
322 gint                   g_type_info_get_array_length    (GITypeInfo *info);
323 gint                   g_type_info_get_array_fixed_size(GITypeInfo *info);
324 gboolean               g_type_info_is_zero_terminated  (GITypeInfo *info);
325
326 gint                   g_type_info_get_n_error_domains (GITypeInfo *info);
327 GIErrorDomainInfo     *g_type_info_get_error_domain    (GITypeInfo *info,
328                                                         gint       n);
329
330 /* GIErrorDomainInfo */
331
332 const gchar *          g_error_domain_info_get_quark   (GIErrorDomainInfo *info);
333 GIInterfaceInfo *           g_error_domain_info_get_codes (GIErrorDomainInfo *info);
334
335
336 /* GIValueInfo */
337  
338 glong                  g_value_info_get_value      (GIValueInfo *info);
339
340
341 /* GIFieldInfo */
342
343 typedef enum
344 {
345   GI_FIELD_IS_READABLE = 1 << 0,
346   GI_FIELD_IS_WRITABLE = 1 << 1
347 } GIFieldInfoFlags;
348
349 GIFieldInfoFlags       g_field_info_get_flags      (GIFieldInfo *info);
350 gint                   g_field_info_get_size       (GIFieldInfo *info);
351 gint                   g_field_info_get_offset     (GIFieldInfo *info);
352 GITypeInfo *           g_field_info_get_type       (GIFieldInfo *info);
353
354
355 /* GIUnionInfo */
356 gint                   g_union_info_get_n_fields  (GIUnionInfo *info);
357 GIFieldInfo *          g_union_info_get_field     (GIUnionInfo *info,
358                                                    gint         n);
359 gint                   g_union_info_get_n_methods (GIUnionInfo *info);
360 GIFunctionInfo *       g_union_info_get_method    (GIUnionInfo *info,
361                                                    gint         n);
362 gboolean               g_union_info_is_discriminated (GIUnionInfo *info);
363 gint                   g_union_info_get_discriminator_offset (GIUnionInfo *info);
364 GITypeInfo *           g_union_info_get_discriminator_type (GIUnionInfo *info);
365 GIConstantInfo *       g_union_info_get_discriminator      (GIUnionInfo *info,
366                                                             gint         n);
367 GIFunctionInfo *       g_union_info_find_method    (GIUnionInfo *info,
368                                                     const gchar *name);
369
370
371 /* GIStructInfo */
372 gint                   g_struct_info_get_n_fields  (GIStructInfo *info);
373 GIFieldInfo *          g_struct_info_get_field     (GIStructInfo *info,
374                                                     gint         n);
375 gint                   g_struct_info_get_n_methods (GIStructInfo *info);
376 GIFunctionInfo *       g_struct_info_get_method    (GIStructInfo *info,
377                                                     gint         n);
378 GIFunctionInfo *       g_struct_info_find_method   (GIStructInfo *info,
379                                                     const gchar *name);
380
381 /* GIRegisteredTypeInfo */
382
383 const gchar *          g_registered_type_info_get_type_name (GIRegisteredTypeInfo *info);
384 const gchar *          g_registered_type_info_get_type_init (GIRegisteredTypeInfo *info);
385 GType                  g_registered_type_info_get_g_type    (GIRegisteredTypeInfo *info);
386
387 /* GIEnumInfo */
388
389 gint                   g_enum_info_get_n_values             (GIEnumInfo      *info);
390 GIValueInfo  *         g_enum_info_get_value                (GIEnumInfo      *info,
391                                                              gint            n);
392
393 /* GIObjectInfo */
394
395 const gchar *          g_object_info_get_type_name          (GIObjectInfo    *info);
396 const gchar *          g_object_info_get_type_init          (GIObjectInfo    *info);
397 gboolean               g_object_info_get_abstract           (GIObjectInfo    *info);
398 GIObjectInfo *         g_object_info_get_parent             (GIObjectInfo    *info);
399 gint                   g_object_info_get_n_interfaces       (GIObjectInfo    *info);
400 GIInterfaceInfo *      g_object_info_get_interface          (GIObjectInfo    *info,
401                                                              gint            n);
402 gint                   g_object_info_get_n_fields           (GIObjectInfo    *info);
403 GIFieldInfo *          g_object_info_get_field              (GIObjectInfo    *info,
404                                                              gint            n);
405 gint                   g_object_info_get_n_properties       (GIObjectInfo    *info);
406 GIPropertyInfo *       g_object_info_get_property           (GIObjectInfo    *info,
407                                                              gint            n);
408 gint                   g_object_info_get_n_methods          (GIObjectInfo    *info);
409 GIFunctionInfo *       g_object_info_get_method             (GIObjectInfo    *info,
410                                                              gint            n);
411 GIFunctionInfo *       g_object_info_find_method            (GIObjectInfo *info,
412                                                              const gchar *name);
413 gint                   g_object_info_get_n_signals          (GIObjectInfo    *info);
414 GISignalInfo *         g_object_info_get_signal             (GIObjectInfo    *info,
415                                                              gint            n);
416 gint                   g_object_info_get_n_vfuncs           (GIObjectInfo    *info);
417 GIVFuncInfo *          g_object_info_get_vfunc              (GIObjectInfo    *info,
418                                                              gint            n);
419 gint                   g_object_info_get_n_constants        (GIObjectInfo    *info);
420 GIConstantInfo *       g_object_info_get_constant           (GIObjectInfo    *info,
421                                                              gint            n);
422
423                                                              
424 /* GIInterfaceInfo */
425
426 gint                   g_interface_info_get_n_prerequisites (GIInterfaceInfo *info);
427 GIBaseInfo *           g_interface_info_get_prerequisite    (GIInterfaceInfo *info,
428                                                              gint        n);
429 gint                   g_interface_info_get_n_properties    (GIInterfaceInfo *info);
430 GIPropertyInfo *       g_interface_info_get_property        (GIInterfaceInfo *info,
431                                                              gint        n);
432 gint                   g_interface_info_get_n_methods       (GIInterfaceInfo *info);
433 GIFunctionInfo *       g_interface_info_get_method          (GIInterfaceInfo *info,
434                                                              gint        n);
435 GIFunctionInfo *       g_interface_info_find_method         (GIInterfaceInfo *info,
436                                                              const gchar *name);
437 gint                   g_interface_info_get_n_signals       (GIInterfaceInfo *info);
438 GISignalInfo *         g_interface_info_get_signal          (GIInterfaceInfo *info,
439                                                              gint        n);
440 gint                   g_interface_info_get_n_vfuncs        (GIInterfaceInfo *info);
441 GIVFuncInfo *          g_interface_info_get_vfunc           (GIInterfaceInfo *info,
442                                                              gint        n);
443 gint                   g_interface_info_get_n_constants     (GIInterfaceInfo *info);
444 GIConstantInfo *       g_interface_info_get_constant        (GIInterfaceInfo *info,
445                                                              gint        n);
446
447
448 /* GIPropertyInfo  */
449
450 GParamFlags             g_property_info_get_flags                (GIPropertyInfo         *info);
451 GITypeInfo *            g_property_info_get_type                 (GIPropertyInfo         *info);
452
453
454 /* GISignalInfo */
455
456 GSignalFlags            g_signal_info_get_flags                  (GISignalInfo           *info);
457 GIVFuncInfo *           g_signal_info_get_class_closure          (GISignalInfo           *info);
458 gboolean                g_signal_info_true_stops_emit            (GISignalInfo           *info);
459
460
461 /* GIVFuncInfo */
462
463 typedef enum
464 {
465   GI_VFUNC_MUST_CHAIN_UP     = 1 << 0,
466   GI_VFUNC_MUST_OVERRIDE     = 1 << 1,
467   GI_VFUNC_MUST_NOT_OVERRIDE = 1 << 2
468 } GIVFuncInfoFlags;
469
470 GIVFuncInfoFlags        g_vfunc_info_get_flags                   (GIVFuncInfo            *info);
471 gint                    g_vfunc_info_get_offset                  (GIVFuncInfo            *info);
472 GISignalInfo *          g_vfunc_info_get_signal                  (GIVFuncInfo            *info);
473
474
475 /* GIConstantInfo */
476
477 GITypeInfo *            g_constant_info_get_type                 (GIConstantInfo         *info);
478 gint                    g_constant_info_get_value                (GIConstantInfo         *info,
479                                                                   GArgument             *value);
480
481
482 G_END_DECLS
483
484 #endif  /* __G_IREPOSITORY_H__ */
485