Bug 552858: versioning
[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 gboolean      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 } GIFunctionInfoFlags;
195
196 const gchar *           g_function_info_get_symbol     (GIFunctionInfo *info);
197 GIFunctionInfoFlags     g_function_info_get_flags      (GIFunctionInfo *info);
198 GIPropertyInfo *        g_function_info_get_property   (GIFunctionInfo *info);
199 GIVFuncInfo *           g_function_info_get_vfunc      (GIFunctionInfo *info);
200
201 typedef union 
202 {
203   gboolean v_boolean;
204   gint8    v_int8;
205   guint8   v_uint8;
206   gint16   v_int16;
207   guint16  v_uint16;
208   gint32   v_int32;
209   guint32  v_uint32;
210   gint64   v_int64;
211   guint64  v_uint64;
212   gfloat   v_float;
213   gdouble  v_double;
214   gint     v_int;
215   guint    v_uint;
216   glong    v_long;
217   gulong   v_ulong;
218   gssize   v_ssize;
219   gsize    v_size;
220   gchar *  v_string;
221   gpointer v_pointer;
222 } GArgument;
223
224 #define G_INVOKE_ERROR (g_invoke_error_quark ())
225 GQuark g_invoke_error_quark (void);
226
227 typedef enum
228 {
229   G_INVOKE_ERROR_FAILED,
230   G_INVOKE_ERROR_SYMBOL_NOT_FOUND,
231   G_INVOKE_ERROR_ARGUMENT_MISMATCH
232 } GInvokeError;
233
234 gboolean              g_function_info_invoke         (GIFunctionInfo *info, 
235                                                       const GArgument  *in_args,
236                                                       int               n_in_args,
237                                                       const GArgument  *out_args,
238                                                       int               n_out_args,
239                                                       GArgument        *return_value,
240                                                       GError          **error);
241
242
243 /* GICallableInfo */
244
245 typedef enum {
246   GI_TRANSFER_NOTHING,
247   GI_TRANSFER_CONTAINER,
248   GI_TRANSFER_EVERYTHING
249 } GITransfer;
250
251 GITypeInfo *           g_callable_info_get_return_type (GICallableInfo *info);
252 GITransfer             g_callable_info_get_caller_owns (GICallableInfo *info);
253 gboolean               g_callable_info_may_return_null (GICallableInfo *info);
254 gint                   g_callable_info_get_n_args      (GICallableInfo *info);
255 GIArgInfo *            g_callable_info_get_arg         (GICallableInfo *info,
256                                                         gint           n);
257
258 /* GIArgInfo */
259
260 typedef enum  {
261   GI_DIRECTION_IN,
262   GI_DIRECTION_OUT,
263   GI_DIRECTION_INOUT
264 } GIDirection;
265
266 GIDirection            g_arg_info_get_direction          (GIArgInfo *info);
267 gboolean               g_arg_info_is_dipper              (GIArgInfo *info);
268 gboolean               g_arg_info_is_return_value        (GIArgInfo *info);
269 gboolean               g_arg_info_is_optional            (GIArgInfo *info);
270 gboolean               g_arg_info_may_be_null            (GIArgInfo *info);
271 GITransfer             g_arg_info_get_ownership_transfer (GIArgInfo *info);
272 GITypeInfo *           g_arg_info_get_type               (GIArgInfo *info);
273
274
275 /* GITypeInfo */
276
277 typedef enum {
278   /* Basic types */
279   GI_TYPE_TAG_VOID      =  0,
280   GI_TYPE_TAG_BOOLEAN   =  1,
281   GI_TYPE_TAG_INT8      =  2,
282   GI_TYPE_TAG_UINT8     =  3,
283   GI_TYPE_TAG_INT16     =  4,
284   GI_TYPE_TAG_UINT16    =  5,  
285   GI_TYPE_TAG_INT32     =  6,
286   GI_TYPE_TAG_UINT32    =  7,
287   GI_TYPE_TAG_INT64     =  8,
288   GI_TYPE_TAG_UINT64    =  9,
289   GI_TYPE_TAG_INT       = 10,
290   GI_TYPE_TAG_UINT      = 11,
291   GI_TYPE_TAG_LONG      = 12,
292   GI_TYPE_TAG_ULONG     = 13,
293   GI_TYPE_TAG_SSIZE     = 14,
294   GI_TYPE_TAG_SIZE      = 15,
295   GI_TYPE_TAG_FLOAT     = 16,
296   GI_TYPE_TAG_DOUBLE    = 17,
297   GI_TYPE_TAG_TIME_T    = 18,
298   GI_TYPE_TAG_GTYPE     = 19,
299   GI_TYPE_TAG_UTF8      = 20,
300   GI_TYPE_TAG_FILENAME  = 21,
301   /* Non-basic types */
302   GI_TYPE_TAG_ARRAY     = 22,
303   GI_TYPE_TAG_INTERFACE = 23,
304   GI_TYPE_TAG_GLIST     = 24,
305   GI_TYPE_TAG_GSLIST    = 25,
306   GI_TYPE_TAG_GHASH     = 26,
307   GI_TYPE_TAG_ERROR     = 27
308   /* Note - there is only room currently for 32 tags.
309    * See docs/typelib-format.txt SimpleTypeBlob definition */
310 } GITypeTag;
311
312 #define G_TYPE_TAG_IS_BASIC(tag) (tag < GI_TYPE_TAG_ARRAY)
313
314 const gchar*           g_type_tag_to_string            (GITypeTag   type);
315
316 gboolean               g_type_info_is_pointer          (GITypeInfo *info);
317 GITypeTag              g_type_info_get_tag             (GITypeInfo *info);
318 GITypeInfo *           g_type_info_get_param_type      (GITypeInfo *info,
319                                                         gint       n);
320 GIBaseInfo *           g_type_info_get_interface       (GITypeInfo *info);
321 gint                   g_type_info_get_array_length    (GITypeInfo *info);
322 gboolean               g_type_info_is_zero_terminated  (GITypeInfo *info);
323
324 gint                   g_type_info_get_n_error_domains (GITypeInfo *info);
325 GIErrorDomainInfo     *g_type_info_get_error_domain    (GITypeInfo *info,
326                                                         gint       n);
327
328 /* GIErrorDomainInfo */
329
330 const gchar *          g_error_domain_info_get_quark   (GIErrorDomainInfo *info);
331 GIInterfaceInfo *           g_error_domain_info_get_codes (GIErrorDomainInfo *info);
332
333
334 /* GIValueInfo */
335  
336 glong                  g_value_info_get_value      (GIValueInfo *info);
337
338
339 /* GIFieldInfo */
340
341 typedef enum
342 {
343   GI_FIELD_IS_READABLE = 1 << 0,
344   GI_FIELD_IS_WRITABLE = 1 << 1
345 } GIFieldInfoFlags;
346
347 GIFieldInfoFlags       g_field_info_get_flags      (GIFieldInfo *info);
348 gint                   g_field_info_get_size       (GIFieldInfo *info);
349 gint                   g_field_info_get_offset     (GIFieldInfo *info);
350 GITypeInfo *           g_field_info_get_type       (GIFieldInfo *info);
351
352
353 /* GIUnionInfo */
354 gint                   g_union_info_get_n_fields  (GIUnionInfo *info);
355 GIFieldInfo *          g_union_info_get_field     (GIUnionInfo *info,
356                                                    gint         n);
357 gint                   g_union_info_get_n_methods (GIUnionInfo *info);
358 GIFunctionInfo *       g_union_info_get_method    (GIUnionInfo *info,
359                                                    gint         n);
360 gboolean               g_union_info_is_discriminated (GIUnionInfo *info);
361 gint                   g_union_info_get_discriminator_offset (GIUnionInfo *info);
362 GITypeInfo *           g_union_info_get_discriminator_type (GIUnionInfo *info);
363 GIConstantInfo *       g_union_info_get_discriminator      (GIUnionInfo *info,
364                                                             gint         n);
365
366
367 /* GIStructInfo */
368 gint                   g_struct_info_get_n_fields  (GIStructInfo *info);
369 GIFieldInfo *          g_struct_info_get_field     (GIStructInfo *info,
370                                                     gint         n);
371 gint                   g_struct_info_get_n_methods (GIStructInfo *info);
372 GIFunctionInfo *       g_struct_info_get_method    (GIStructInfo *info,
373                                                     gint         n);
374 GIFunctionInfo *       g_struct_info_find_method   (GIStructInfo *info,
375                                                     const gchar *name);
376
377 /* GIRegisteredTypeInfo */
378
379 const gchar *          g_registered_type_info_get_type_name (GIRegisteredTypeInfo *info);
380 const gchar *          g_registered_type_info_get_type_init (GIRegisteredTypeInfo *info);
381 GType                  g_registered_type_info_get_g_type    (GIRegisteredTypeInfo *info);
382
383 /* GIEnumInfo */
384
385 gint                   g_enum_info_get_n_values             (GIEnumInfo      *info);
386 GIValueInfo  *         g_enum_info_get_value                (GIEnumInfo      *info,
387                                                              gint            n);
388
389 /* GIObjectInfo */
390
391 const gchar *          g_object_info_get_type_name          (GIObjectInfo    *info);
392 const gchar *          g_object_info_get_type_init          (GIObjectInfo    *info);
393 GIObjectInfo *         g_object_info_get_parent             (GIObjectInfo    *info);
394 gint                   g_object_info_get_n_interfaces       (GIObjectInfo    *info);
395 GIInterfaceInfo *      g_object_info_get_interface          (GIObjectInfo    *info,
396                                                              gint            n);
397 gint                   g_object_info_get_n_fields           (GIObjectInfo    *info);
398 GIFieldInfo *          g_object_info_get_field              (GIObjectInfo    *info,
399                                                              gint            n);
400 gint                   g_object_info_get_n_properties       (GIObjectInfo    *info);
401 GIPropertyInfo *       g_object_info_get_property           (GIObjectInfo    *info,
402                                                              gint            n);
403 gint                   g_object_info_get_n_methods          (GIObjectInfo    *info);
404 GIFunctionInfo *       g_object_info_get_method             (GIObjectInfo    *info,
405                                                              gint            n);
406 GIFunctionInfo *       g_object_info_find_method            (GIObjectInfo *info,
407                                                              const gchar *name);
408 gint                   g_object_info_get_n_signals          (GIObjectInfo    *info);
409 GISignalInfo *         g_object_info_get_signal             (GIObjectInfo    *info,
410                                                              gint            n);
411 gint                   g_object_info_get_n_vfuncs           (GIObjectInfo    *info);
412 GIVFuncInfo *          g_object_info_get_vfunc              (GIObjectInfo    *info,
413                                                              gint            n);
414 gint                   g_object_info_get_n_constants        (GIObjectInfo    *info);
415 GIConstantInfo *       g_object_info_get_constant           (GIObjectInfo    *info,
416                                                              gint            n);
417
418                                                              
419 /* GIInterfaceInfo */
420
421 gint                   g_interface_info_get_n_prerequisites (GIInterfaceInfo *info);
422 GIBaseInfo *           g_interface_info_get_prerequisite    (GIInterfaceInfo *info,
423                                                              gint        n);
424 gint                   g_interface_info_get_n_properties    (GIInterfaceInfo *info);
425 GIPropertyInfo *       g_interface_info_get_property        (GIInterfaceInfo *info,
426                                                              gint        n);
427 gint                   g_interface_info_get_n_methods       (GIInterfaceInfo *info);
428 GIFunctionInfo *       g_interface_info_get_method          (GIInterfaceInfo *info,
429                                                              gint        n);
430 GIFunctionInfo *       g_interface_info_find_method         (GIInterfaceInfo *info,
431                                                              const gchar *name);
432 gint                   g_interface_info_get_n_signals       (GIInterfaceInfo *info);
433 GISignalInfo *         g_interface_info_get_signal          (GIInterfaceInfo *info,
434                                                              gint        n);
435 gint                   g_interface_info_get_n_vfuncs        (GIInterfaceInfo *info);
436 GIVFuncInfo *          g_interface_info_get_vfunc           (GIInterfaceInfo *info,
437                                                              gint        n);
438 gint                   g_interface_info_get_n_constants     (GIInterfaceInfo *info);
439 GIConstantInfo *       g_interface_info_get_constant        (GIInterfaceInfo *info,
440                                                              gint        n);
441
442
443 /* GIPropertyInfo  */
444
445 GParamFlags             g_property_info_get_flags                (GIPropertyInfo         *info);
446 GITypeInfo *            g_property_info_get_type                 (GIPropertyInfo         *info);
447
448
449 /* GISignalInfo */
450
451 GSignalFlags            g_signal_info_get_flags                  (GISignalInfo           *info);
452 GIVFuncInfo *           g_signal_info_get_class_closure          (GISignalInfo           *info);
453 gboolean                g_signal_info_true_stops_emit            (GISignalInfo           *info);
454
455
456 /* GIVFuncInfo */
457
458 typedef enum
459 {
460   GI_VFUNC_MUST_CHAIN_UP     = 1 << 0,
461   GI_VFUNC_MUST_OVERRIDE     = 1 << 1,
462   GI_VFUNC_MUST_NOT_OVERRIDE = 1 << 2
463 } GIVFuncInfoFlags;
464
465 GIVFuncInfoFlags        g_vfunc_info_get_flags                   (GIVFuncInfo            *info);
466 gint                    g_vfunc_info_get_offset                  (GIVFuncInfo            *info);
467 GISignalInfo *          g_vfunc_info_get_signal                  (GIVFuncInfo            *info);
468
469
470 /* GIConstantInfo */
471
472 GITypeInfo *            g_constant_info_get_type                 (GIConstantInfo         *info);
473 gint                    g_constant_info_get_value                (GIConstantInfo         *info,
474                                                                   GArgument             *value);
475
476
477 G_END_DECLS
478
479 #endif  /* __G_IREPOSITORY_H__ */
480