GIBaseInfo

## GIBaseInfo GIBaseInfo — Base struct for all GITypelib structs |

## Synopsis

    enum                GIInfoType;
                        GIAttributeIter;
    GIBaseInfo *        g_info_new                          (GIInfoType type,
                                                             GIBaseInfo *container,
                                                             GITypelib *typelib,
                                                             guint32 offset);
    GIBaseInfo *        g_base_info_ref                     (GIBaseInfo *info);
    void                g_base_info_unref                   (GIBaseInfo *info);
    gboolean            g_base_info_equal                   (GIBaseInfo *info1,
                                                             GIBaseInfo *info2);
    GIInfoType          g_base_info_get_type                (GIBaseInfo *info);
    GITypelib *         g_base_info_get_typelib             (GIBaseInfo *info);
    const gchar *       g_base_info_get_namespace           (GIBaseInfo *info);
    const gchar *       g_base_info_get_name                (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);
    gboolean            g_base_info_is_deprecated           (GIBaseInfo *info);

## Description

GIBaseInfo is the common base struct of all other *Info structs accessible through the GIRepository API. All other structs can be casted to a GIBaseInfo, for instance:

Example 1. Casting a GIFunctionInfo to GIBaseInfo

    1
    2
    GIFunctionInfo *function_info = ...;
    GIBaseInfo *info = (GIBaseInfo*)function_info;

Most GIRepository APIs returning a GIBaseInfo is actually creating a new struct, in other words, `g_base_info_unref()` has to be called when done accessing the data. GIBaseInfos are normally accessed by calling either `g_irepository_find_by_name()`, `g_irepository_find_by_gtype()` or `g_irepository_get_info()`.

Example 2. Getting the Button of the Gtk typelib

    1
    2
    3
    GIBaseInfo *button_info = g_irepository_find_by_name(NULL, "Gtk", "Button");
    ... use button_info ...
    g_base_info_unref(button_info);

## Struct hierarchy

      GIBaseInfo
       +----GIArgInfo
       +----GICallableInfo
       +----GIConstantInfo
       +----GIFieldInfo
       +----GIPropertyInfo
       +----GIRegisteredTypeInfo
       +----GITypeInfo

## Details

### enum GIInfoType

    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,         /*  5 */
      GI_INFO_TYPE_FLAGS,
      GI_INFO_TYPE_OBJECT,
      GI_INFO_TYPE_INTERFACE,
      GI_INFO_TYPE_CONSTANT,
      GI_INFO_TYPE_INVALID_0,    /* 10 */
      GI_INFO_TYPE_UNION,
      GI_INFO_TYPE_VALUE,
      GI_INFO_TYPE_SIGNAL,
      GI_INFO_TYPE_VFUNC,
      GI_INFO_TYPE_PROPERTY,     /* 15 */
      GI_INFO_TYPE_FIELD,
      GI_INFO_TYPE_ARG,
      GI_INFO_TYPE_TYPE,
      GI_INFO_TYPE_UNRESOLVED
    } GIInfoType;

The type of a GIBaseInfo struct.

`GI_INFO_TYPE_INVALID` | invalid type
`GI_INFO_TYPE_FUNCTION` | function, see GIFunctionInfo
`GI_INFO_TYPE_CALLBACK` | callback, see GIFunctionInfo
`GI_INFO_TYPE_STRUCT` | struct, see GIStructInfo
`GI_INFO_TYPE_BOXED` | boxed, see GIStructInfo or GIUnionInfo
`GI_INFO_TYPE_ENUM` | enum, see GIEnumInfo
`GI_INFO_TYPE_FLAGS` | flags, see GIEnumInfo
`GI_INFO_TYPE_OBJECT` | object, see GIObjectInfo
`GI_INFO_TYPE_INTERFACE` | interface, see GIInterfaceInfo
`GI_INFO_TYPE_CONSTANT` | contant, see GIConstantInfo
`GI_INFO_TYPE_INVALID_0` | deleted, used to be GI_INFO_TYPE_ERROR_DOMAIN.
`GI_INFO_TYPE_UNION` | union, see GIUnionInfo
`GI_INFO_TYPE_VALUE` | enum value, see GIValueInfo
`GI_INFO_TYPE_SIGNAL` | signal, see GISignalInfo
`GI_INFO_TYPE_VFUNC` | virtual function, see GIVFuncInfo
`GI_INFO_TYPE_PROPERTY` | GObject property, see GIPropertyInfo
`GI_INFO_TYPE_FIELD` | struct or union field, see GIFieldInfo
`GI_INFO_TYPE_ARG` | argument of a function or callback, see GIArgInfo
`GI_INFO_TYPE_TYPE` | type information, see GITypeInfo
`GI_INFO_TYPE_UNRESOLVED` | unresolved type, a type which is not present in the typelib, or any of its dependencies.

### GIAttributeIter

    typedef struct {
    } GIAttributeIter;

An opaque structure used to iterate over attributes in a GIBaseInfo struct.

### g_info_new ()

    GIBaseInfo *        g_info_new                          (GIInfoType type,
                                                             GIBaseInfo *container,
                                                             GITypelib *typelib,
                                                             guint32 offset);

TODO

`type` : | TODO
`container` : | TODO
`typelib` : | TODO
`offset` : | TODO
Returns : | TODO

### g_base_info_ref ()

    GIBaseInfo *        g_base_info_ref                     (GIBaseInfo *info);

Increases the reference count of `info`.

`info` : | a GIBaseInfo
Returns : | the same `info`.

### g_base_info_unref ()

    void                g_base_info_unref                   (GIBaseInfo *info);

Decreases the reference count of `info`. When its reference count drops to 0, the info is freed.

`info` : | a GIBaseInfo

### g_base_info_equal ()

    gboolean            g_base_info_equal                   (GIBaseInfo *info1,
                                                             GIBaseInfo *info2);

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.

`info1` : | a GIBaseInfo
`info2` : | a GIBaseInfo
Returns : | `TRUE` if and only if `info1` equals `info2`.

### g_base_info_get_type ()

    GIInfoType          g_base_info_get_type                (GIBaseInfo *info);

Obtain the info type of the GIBaseInfo.

`info` : | a GIBaseInfo
Returns : | the info type of `info`

### g_base_info_get_typelib ()

    GITypelib *         g_base_info_get_typelib             (GIBaseInfo *info);

Obtain the typelib this `info` belongs to

`info` : | a GIBaseInfo
Returns : | the typelib. [transfer none]

### g_base_info_get_namespace ()

    const gchar *       g_base_info_get_namespace           (GIBaseInfo *info);

Obtain the namespace of `info`.

`info` : | a GIBaseInfo
Returns : | the namespace

### g_base_info_get_name ()

    const gchar *       g_base_info_get_name                (GIBaseInfo *info);

Obtain the name of the `info`. What the name represents depends on the GIInfoType of the `info`. For instance for GIFunctionInfo it is the name of the function.

`info` : | a GIBaseInfo
Returns : | the name of `info` or `NULL` if it lacks a name.

### g_base_info_get_attribute ()

    const gchar *       g_base_info_get_attribute           (GIBaseInfo *info,
                                                             const gchar *name);

Retrieve an arbitrary attribute associated with this node.

`info` : | a GIBaseInfo
`name` : | a freeform string naming an attribute
Returns : | The value of the attribute, or `NULL` if no such attribute exists

### g_base_info_iterate_attributes ()

    gboolean            g_base_info_iterate_attributes      (GIBaseInfo *info,
                                                             GIAttributeIter *iterator,
                                                             char **name,
                                                             char **value);

Iterate over all attributes associated with this node. The iterator structure is typically stack allocated, and must have its first member initialized to `NULL`. Attributes are arbitrary namespaced key–value pairs which can be attached to almost any item. They are intended for use by software higher in the toolchain than bindings, and are distinct from normal GIR annotations.

Both the `name` and `value` should be treated as constants and must not be freed.

Example 3. Iterating over attributes

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void
    print_attributes (GIBaseInfo *info)
    {
      GIAttributeIter iter = { 0, };
      char *name;
      char *value;
      while (g_base_info_iterate_attributes (info, &iter, &name, &value))
        {
          g_print ("attribute name: %s value: %s", name, value);
        }
    }

`info` : | a GIBaseInfo
`iterator` : | a GIAttributeIter structure, must be initialized; see below
`name` : | Returned name, must not be freed. [out][transfer none]
`value` : | Returned name, must not be freed. [out][transfer none]
Returns : | `TRUE` if there are more attributes

### g_base_info_get_container ()

    GIBaseInfo *        g_base_info_get_container           (GIBaseInfo *info);

Obtain the container of the `info`. The container is the parent GIBaseInfo. For instance, the parent of a GIFunctionInfo is an GIObjectInfo or GIInterfaceInfo.

`info` : | a GIBaseInfo
Returns : | the container. [transfer none]

### g_base_info_is_deprecated ()

    gboolean            g_base_info_is_deprecated           (GIBaseInfo *info);

Obtain whether the `info` is represents a metadata which is deprecated or not.

`info` : | a GIBaseInfo
Returns : | `TRUE` if deprecated