Remove g_irepository_unregister, add GIRepositoryLoadFlags
[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 GIBaseInfo *  g_irepository_find_by_name  (GIRepository *repository,
87                                            const gchar  *namespace,
88                                            const gchar  *name);
89 gboolean      g_irepository_require       (GIRepository *repository,
90                                            const char   *namespace,
91                                            GIRepositoryLoadFlags flags,
92                                            GError      **error);
93 gchar      ** g_irepository_get_dependencies (GIRepository *repository,
94                                               const char *namespace);
95 gchar      ** g_irepository_get_namespaces (GIRepository *repository);
96 GIBaseInfo *  g_irepository_find_by_gtype (GIRepository *repository,
97                                            GType         gtype);
98 gint          g_irepository_get_n_infos   (GIRepository *repository,
99                                            const gchar  *namespace);
100 GIBaseInfo *  g_irepository_get_info      (GIRepository *repository,
101                                            const gchar  *namespace,
102                                            gint          index);
103 const gchar * g_irepository_get_typelib_path   (GIRepository *repository,
104                                                 const gchar  *namespace);
105 const gchar * g_irepository_get_shared_library (GIRepository *repository,
106                                                 const gchar  *namespace);
107 /* Typelib */
108
109 GTypelib *   g_typelib_new_from_memory       (guchar       *memory,
110                                                 gsize         len);
111 GTypelib *   g_typelib_new_from_const_memory (const guchar *memory,
112                                                 gsize         len);
113 GTypelib *   g_typelib_new_from_mapped_file  (GMappedFile  *mfile);
114 void          g_typelib_free                  (GTypelib    *typelib);
115 void          g_typelib_set_module            (GTypelib    *typelib,
116                                                 GModule      *module);
117 const gchar * g_typelib_get_namespace         (GTypelib    *typelib);
118
119 typedef enum
120 {
121   G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
122   G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH,
123   G_IREPOSITORY_ERROR_LIBRARY_NOT_FOUND
124 } GIRepositoryError;
125
126 #define G_IREPOSITORY_ERROR (g_irepository_error_quark ())
127
128 GQuark g_irepository_error_quark (void);
129
130
131 /* Types of objects registered in the repository */
132
133 typedef enum 
134 {
135   GI_INFO_TYPE_INVALID,
136   GI_INFO_TYPE_FUNCTION,
137   GI_INFO_TYPE_CALLBACK,
138   GI_INFO_TYPE_STRUCT,
139   GI_INFO_TYPE_BOXED,
140   GI_INFO_TYPE_ENUM,
141   GI_INFO_TYPE_FLAGS,
142   GI_INFO_TYPE_OBJECT,
143   GI_INFO_TYPE_INTERFACE,
144   GI_INFO_TYPE_CONSTANT,
145   GI_INFO_TYPE_ERROR_DOMAIN,
146   GI_INFO_TYPE_UNION,
147   GI_INFO_TYPE_VALUE,
148   GI_INFO_TYPE_SIGNAL,
149   GI_INFO_TYPE_VFUNC,
150   GI_INFO_TYPE_PROPERTY,
151   GI_INFO_TYPE_FIELD,
152   GI_INFO_TYPE_ARG,
153   GI_INFO_TYPE_TYPE
154 } GIInfoType;
155
156
157 /* GIBaseInfo */
158
159 GIBaseInfo *           g_base_info_ref              (GIBaseInfo   *info);
160 void                   g_base_info_unref            (GIBaseInfo   *info);
161 GIInfoType             g_base_info_get_type         (GIBaseInfo   *info);
162 const gchar *          g_base_info_get_name         (GIBaseInfo   *info);
163 const gchar *          g_base_info_get_namespace    (GIBaseInfo   *info);
164 gboolean               g_base_info_is_deprecated    (GIBaseInfo   *info);
165 const gchar *          g_base_info_get_annotation   (GIBaseInfo   *info,
166                                                      const gchar  *name);
167 GIBaseInfo *           g_base_info_get_container    (GIBaseInfo   *info);
168 GTypelib *             g_base_info_get_typelib      (GIBaseInfo   *info);
169
170 GIBaseInfo *           g_info_new                   (GIInfoType    type,
171                                                      GIBaseInfo   *container,
172                                                      GTypelib     *typelib, 
173                                                      guint32       offset);
174
175
176 /* GIFunctionInfo */
177
178 typedef enum
179 {
180   GI_FUNCTION_IS_METHOD      = 1 << 0,
181   GI_FUNCTION_IS_CONSTRUCTOR = 1 << 1,
182   GI_FUNCTION_IS_GETTER      = 1 << 2,
183   GI_FUNCTION_IS_SETTER      = 1 << 3,
184   GI_FUNCTION_WRAPS_VFUNC    = 1 << 4
185 } GIFunctionInfoFlags;
186
187 const gchar *           g_function_info_get_symbol     (GIFunctionInfo *info);
188 GIFunctionInfoFlags     g_function_info_get_flags      (GIFunctionInfo *info);
189 GIPropertyInfo *        g_function_info_get_property   (GIFunctionInfo *info);
190 GIVFuncInfo *           g_function_info_get_vfunc      (GIFunctionInfo *info);
191
192 typedef union 
193 {
194   gboolean v_boolean;
195   gint8    v_int8;
196   guint8   v_uint8;
197   gint16   v_int16;
198   guint16  v_uint16;
199   gint32   v_int32;
200   guint32  v_uint32;
201   gint64   v_int64;
202   guint64  v_uint64;
203   gfloat   v_float;
204   gdouble  v_double;
205   gint     v_int;
206   guint    v_uint;
207   glong    v_long;
208   gulong   v_ulong;
209   gssize   v_ssize;
210   gsize    v_size;
211   gchar *  v_string;
212   gpointer v_pointer;
213 } GArgument;
214
215 #define G_INVOKE_ERROR (g_invoke_error_quark ())
216 GQuark g_invoke_error_quark (void);
217
218 typedef enum
219 {
220   G_INVOKE_ERROR_FAILED,
221   G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
222   G_INVOKE_ERROR_ARGUMENT_MISMATCH
223 } GInvokeError;
224
225 gboolean              g_function_info_invoke         (GIFunctionInfo *info, 
226                                                       const GArgument  *in_args,
227                                                       int               n_in_args,
228                                                       const GArgument  *out_args,
229                                                       int               n_out_args,
230                                                       GArgument        *return_value,
231                                                       GError          **error);
232
233
234 /* GICallableInfo */
235
236 typedef enum {
237   GI_TRANSFER_NOTHING,
238   GI_TRANSFER_CONTAINER,
239   GI_TRANSFER_EVERYTHING
240 } GITransfer;
241
242 GITypeInfo *           g_callable_info_get_return_type (GICallableInfo *info);
243 GITransfer             g_callable_info_get_caller_owns (GICallableInfo *info);
244 gboolean               g_callable_info_may_return_null (GICallableInfo *info);
245 gint                   g_callable_info_get_n_args      (GICallableInfo *info);
246 GIArgInfo *            g_callable_info_get_arg         (GICallableInfo *info,
247                                                         gint           n);
248
249 /* GIArgInfo */
250
251 typedef enum  {
252   GI_DIRECTION_IN,
253   GI_DIRECTION_OUT,
254   GI_DIRECTION_INOUT
255 } GIDirection;
256
257 GIDirection            g_arg_info_get_direction          (GIArgInfo *info);
258 gboolean               g_arg_info_is_dipper              (GIArgInfo *info);
259 gboolean               g_arg_info_is_return_value        (GIArgInfo *info);
260 gboolean               g_arg_info_is_optional            (GIArgInfo *info);
261 gboolean               g_arg_info_may_be_null            (GIArgInfo *info);
262 GITransfer             g_arg_info_get_ownership_transfer (GIArgInfo *info);
263 GITypeInfo *           g_arg_info_get_type               (GIArgInfo *info);
264
265
266 /* GITypeInfo */
267
268 typedef enum {
269   GI_TYPE_TAG_VOID      =  0,
270   GI_TYPE_TAG_BOOLEAN   =  1,
271   GI_TYPE_TAG_INT8      =  2,
272   GI_TYPE_TAG_UINT8     =  3,
273   GI_TYPE_TAG_INT16     =  4,
274   GI_TYPE_TAG_UINT16    =  5,  
275   GI_TYPE_TAG_INT32     =  6,
276   GI_TYPE_TAG_UINT32    =  7,
277   GI_TYPE_TAG_INT64     =  8,
278   GI_TYPE_TAG_UINT64    =  9,
279   GI_TYPE_TAG_INT       = 10,
280   GI_TYPE_TAG_UINT      = 11,
281   GI_TYPE_TAG_LONG      = 12,
282   GI_TYPE_TAG_ULONG     = 13,
283   GI_TYPE_TAG_SSIZE     = 14,
284   GI_TYPE_TAG_SIZE      = 15,
285   GI_TYPE_TAG_FLOAT     = 16,
286   GI_TYPE_TAG_DOUBLE    = 17,
287   GI_TYPE_TAG_UTF8      = 18,
288   GI_TYPE_TAG_FILENAME  = 19,
289   GI_TYPE_TAG_ARRAY     = 20,
290   GI_TYPE_TAG_INTERFACE = 21,
291   GI_TYPE_TAG_GLIST     = 22,
292   GI_TYPE_TAG_GSLIST    = 23,
293   GI_TYPE_TAG_GHASH     = 24,
294   GI_TYPE_TAG_ERROR     = 25
295 } GITypeTag;
296
297 const gchar*           g_type_tag_to_string            (GITypeTag   type);
298
299 gboolean               g_type_info_is_pointer          (GITypeInfo *info);
300 GITypeTag              g_type_info_get_tag             (GITypeInfo *info);
301 GITypeInfo *           g_type_info_get_param_type      (GITypeInfo *info,
302                                                         gint       n);
303 GIBaseInfo *           g_type_info_get_interface       (GITypeInfo *info);
304 gint                   g_type_info_get_array_length    (GITypeInfo *info);
305 gboolean               g_type_info_is_zero_terminated  (GITypeInfo *info);
306
307 gint                   g_type_info_get_n_error_domains (GITypeInfo *info);
308 GIErrorDomainInfo     *g_type_info_get_error_domain    (GITypeInfo *info,
309                                                         gint       n);
310
311 /* GIErrorDomainInfo */
312
313 const gchar *          g_error_domain_info_get_quark   (GIErrorDomainInfo *info);
314 GIInterfaceInfo *           g_error_domain_info_get_codes (GIErrorDomainInfo *info);
315
316
317 /* GIValueInfo */
318  
319 glong                  g_value_info_get_value      (GIValueInfo *info);
320
321
322 /* GIFieldInfo */
323
324 typedef enum
325 {
326   GI_FIELD_IS_READABLE = 1 << 0,
327   GI_FIELD_IS_WRITABLE = 1 << 1
328 } GIFieldInfoFlags;
329
330 GIFieldInfoFlags       g_field_info_get_flags      (GIFieldInfo *info);
331 gint                   g_field_info_get_size       (GIFieldInfo *info);
332 gint                   g_field_info_get_offset     (GIFieldInfo *info);
333 GITypeInfo *           g_field_info_get_type       (GIFieldInfo *info);
334
335
336 /* GIUnionInfo */
337 gint                   g_union_info_get_n_fields  (GIUnionInfo *info);
338 GIFieldInfo *          g_union_info_get_field     (GIUnionInfo *info,
339                                                    gint         n);
340 gint                   g_union_info_get_n_methods (GIUnionInfo *info);
341 GIFunctionInfo *       g_union_info_get_method    (GIUnionInfo *info,
342                                                    gint         n);
343 gboolean               g_union_info_is_discriminated (GIUnionInfo *info);
344 gint                   g_union_info_get_discriminator_offset (GIUnionInfo *info);
345 GITypeInfo *           g_union_info_get_discriminator_type (GIUnionInfo *info);
346 GIConstantInfo *       g_union_info_get_discriminator      (GIUnionInfo *info,
347                                                             gint         n);
348
349
350 /* GIStructInfo */
351 gint                   g_struct_info_get_n_fields  (GIStructInfo *info);
352 GIFieldInfo *          g_struct_info_get_field     (GIStructInfo *info,
353                                                     gint         n);
354 gint                   g_struct_info_get_n_methods (GIStructInfo *info);
355 GIFunctionInfo *       g_struct_info_get_method    (GIStructInfo *info,
356                                                     gint         n);
357 GIFunctionInfo *       g_struct_info_find_method   (GIStructInfo *info,
358                                                     const gchar *name);
359
360 /* GIRegisteredTypeInfo */
361
362 const gchar *          g_registered_type_info_get_type_name (GIRegisteredTypeInfo *info);
363 const gchar *          g_registered_type_info_get_type_init (GIRegisteredTypeInfo *info);
364 GType                  g_registered_type_info_get_g_type    (GIRegisteredTypeInfo *info);
365
366 /* GIEnumInfo */
367
368 gint                   g_enum_info_get_n_values             (GIEnumInfo      *info);
369 GIValueInfo  *         g_enum_info_get_value                (GIEnumInfo      *info,
370                                                              gint            n);
371
372 /* GIObjectInfo */
373
374 const gchar *          g_object_info_get_type_name          (GIObjectInfo    *info);
375 const gchar *          g_object_info_get_type_init          (GIObjectInfo    *info);
376 GIObjectInfo *         g_object_info_get_parent             (GIObjectInfo    *info);
377 gint                   g_object_info_get_n_interfaces       (GIObjectInfo    *info);
378 GIInterfaceInfo *      g_object_info_get_interface          (GIObjectInfo    *info,
379                                                              gint            n);
380 gint                   g_object_info_get_n_fields           (GIObjectInfo    *info);
381 GIFieldInfo *          g_object_info_get_field              (GIObjectInfo    *info,
382                                                              gint            n);
383 gint                   g_object_info_get_n_properties       (GIObjectInfo    *info);
384 GIPropertyInfo *       g_object_info_get_property           (GIObjectInfo    *info,
385                                                              gint            n);
386 gint                   g_object_info_get_n_methods          (GIObjectInfo    *info);
387 GIFunctionInfo *       g_object_info_get_method             (GIObjectInfo    *info,
388                                                              gint            n);
389 GIFunctionInfo *       g_object_info_find_method            (GIObjectInfo *info,
390                                                              const gchar *name);
391 gint                   g_object_info_get_n_signals          (GIObjectInfo    *info);
392 GISignalInfo *         g_object_info_get_signal             (GIObjectInfo    *info,
393                                                              gint            n);
394 gint                   g_object_info_get_n_vfuncs           (GIObjectInfo    *info);
395 GIVFuncInfo *          g_object_info_get_vfunc              (GIObjectInfo    *info,
396                                                              gint            n);
397 gint                   g_object_info_get_n_constants        (GIObjectInfo    *info);
398 GIConstantInfo *       g_object_info_get_constant           (GIObjectInfo    *info,
399                                                              gint            n);
400
401                                                              
402 /* GIInterfaceInfo */
403
404 gint                   g_interface_info_get_n_prerequisites (GIInterfaceInfo *info);
405 GIBaseInfo *           g_interface_info_get_prerequisite    (GIInterfaceInfo *info,
406                                                              gint        n);
407 gint                   g_interface_info_get_n_properties    (GIInterfaceInfo *info);
408 GIPropertyInfo *       g_interface_info_get_property        (GIInterfaceInfo *info,
409                                                              gint        n);
410 gint                   g_interface_info_get_n_methods       (GIInterfaceInfo *info);
411 GIFunctionInfo *       g_interface_info_get_method          (GIInterfaceInfo *info,
412                                                              gint        n);
413 GIFunctionInfo *       g_interface_info_find_method         (GIInterfaceInfo *info,
414                                                              const gchar *name);
415 gint                   g_interface_info_get_n_signals       (GIInterfaceInfo *info);
416 GISignalInfo *         g_interface_info_get_signal          (GIInterfaceInfo *info,
417                                                              gint        n);
418 gint                   g_interface_info_get_n_vfuncs        (GIInterfaceInfo *info);
419 GIVFuncInfo *          g_interface_info_get_vfunc           (GIInterfaceInfo *info,
420                                                              gint        n);
421 gint                   g_interface_info_get_n_constants     (GIInterfaceInfo *info);
422 GIConstantInfo *       g_interface_info_get_constant        (GIInterfaceInfo *info,
423                                                              gint        n);
424
425
426 /* GIPropertyInfo  */
427
428 GParamFlags             g_property_info_get_flags                (GIPropertyInfo         *info);
429 GITypeInfo *            g_property_info_get_type                 (GIPropertyInfo         *info);
430
431
432 /* GISignalInfo */
433
434 GSignalFlags            g_signal_info_get_flags                  (GISignalInfo           *info);
435 GIVFuncInfo *           g_signal_info_get_class_closure          (GISignalInfo           *info);
436 gboolean                g_signal_info_true_stops_emit            (GISignalInfo           *info);
437
438
439 /* GIVFuncInfo */
440
441 typedef enum
442 {
443   GI_VFUNC_MUST_CHAIN_UP     = 1 << 0,
444   GI_VFUNC_MUST_OVERRIDE     = 1 << 1,
445   GI_VFUNC_MUST_NOT_OVERRIDE = 1 << 2
446 } GIVFuncInfoFlags;
447
448 GIVFuncInfoFlags        g_vfunc_info_get_flags                   (GIVFuncInfo            *info);
449 gint                    g_vfunc_info_get_offset                  (GIVFuncInfo            *info);
450 GISignalInfo *          g_vfunc_info_get_signal                  (GIVFuncInfo            *info);
451
452
453 /* GIConstantInfo */
454
455 GITypeInfo *            g_constant_info_get_type                 (GIConstantInfo         *info);
456 gint                    g_constant_info_get_value                (GIConstantInfo         *info,
457                                                                   GArgument             *value);
458
459
460 G_END_DECLS
461
462 #endif  /* __G_IREPOSITORY_H__ */
463