/** * g_type_info_get_param_type: * @info: a #GITypeInfo * @n: index of the parameter * * Obtain the parameter type @n. * * Returns: (transfer full): the param type info */ GITypeInfo * g_type_info_get_param_type (GITypeInfo *info, gint n) { GIRealInfo *rinfo = (GIRealInfo *)info; SimpleTypeBlob *type; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_TYPE_INFO (info), NULL); type = (SimpleTypeBlob *)&rinfo->typelib->data[rinfo->offset]; if (!(type->flags.reserved == 0 && type->flags.reserved2 == 0)) { ParamTypeBlob *param = (ParamTypeBlob *)&rinfo->typelib->data[rinfo->offset]; switch (param->tag) { case GI_TYPE_TAG_ARRAY: case GI_TYPE_TAG_GLIST: case GI_TYPE_TAG_GSLIST: case GI_TYPE_TAG_GHASH: return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + sizeof (ParamTypeBlob) + sizeof (SimpleTypeBlob) * n); break; default: break; } } return NULL; }
/** * g_field_info_get_type: * @info: a #GIFieldInfo * * Obtain the type of a field as a #GITypeInfo. * * Returns: (transfer full): the #GITypeInfo. Free the struct by calling * g_base_info_unref() when done. */ GITypeInfo * g_field_info_get_type (GIFieldInfo *info) { GIRealInfo *rinfo = (GIRealInfo *)info; Header *header = (Header *)rinfo->typelib->data; FieldBlob *blob; GIRealInfo *type_info; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_FIELD_INFO (info), NULL); blob = (FieldBlob *)&rinfo->typelib->data[rinfo->offset]; if (blob->has_embedded_type) { type_info = (GIRealInfo *) g_info_new (GI_INFO_TYPE_TYPE, (GIBaseInfo*)info, rinfo->typelib, rinfo->offset + header->field_blob_size); type_info->type_is_embedded = TRUE; } else return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (FieldBlob, type)); return (GIBaseInfo*)type_info; }
/** * g_constant_info_get_type: * @info: a #GIConstantInfo * * Obtain the type of the constant as a #GITypeInfo. * * Returns: (transfer full): the #GITypeInfo. Free the struct by calling * g_base_info_unref() when done. */ GITypeInfo * g_constant_info_get_type (GIConstantInfo *info) { GIRealInfo *rinfo = (GIRealInfo *)info; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_CONSTANT_INFO (info), NULL); return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + 8); }
/** * g_arg_info_get_type: * @info: a #GIArgInfo * * Obtain the type information for @info. * * Returns: (transfer full): the #GIArgInfo, free it with * g_base_info_unref() when done. */ GITypeInfo * g_arg_info_get_type (GIArgInfo *info) { GIRealInfo *rinfo = (GIRealInfo *)info; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_ARG_INFO (info), NULL); return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (ArgBlob, arg_type)); }
/** * g_callable_info_get_return_type: * @info: a #GICallableInfo * * Obtain the return type of a callable item as a #GITypeInfo. * * Returns: (transfer full): the #GITypeInfo. Free the struct by calling * g_base_info_unref() when done. */ GITypeInfo * g_callable_info_get_return_type (GICallableInfo *info) { GIRealInfo *rinfo = (GIRealInfo *)info; guint32 offset; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_CALLABLE_INFO (info), NULL); offset = signature_offset (info); return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, offset); }