Esempio n. 1
0
static void
in_arguments_to_ruby(GArray *in_args,
                     GArray *out_args,
                     GPtrArray *args_metadata,
                     GArray *rb_args)
{
    guint i;

    for (i = 0; i < args_metadata->len; i++) {
        RBGIArgMetadata *metadata;
        GIArgument *argument;
        GITypeInfo *type_info;
        VALUE rb_arg;

        metadata = g_ptr_array_index(args_metadata, i);

        if (metadata->direction == GI_DIRECTION_OUT) {
            continue;
        }
        if (metadata->closure_p) {
            continue;
        }

        argument = &g_array_index(in_args, GIArgument, metadata->in_arg_index);
        type_info = g_arg_info_get_type(&(metadata->arg_info));
        rb_arg = GI_ARGUMENT2RVAL(argument,
                                  FALSE,
                                  type_info,
                                  in_args,
                                  out_args,
                                  args_metadata);
        g_array_append_val(rb_args, rb_arg);
    }
}
Esempio n. 2
0
    type_tag = g_type_info_get_tag(type_info);

    if (!g_field_info_get_field(info, memory, &argument)) {
        g_base_info_unref(type_info);
        rb_raise(rb_eArgError, "failed to get field value: %s[%s]",
                 g_base_info_get_name(info),
                 g_type_tag_to_string(type_tag));
    }

    if (type_tag == GI_TYPE_TAG_UTF8) {
        int offset;
        offset = g_field_info_get_offset(info);
        argument.v_string = G_STRUCT_MEMBER(gchar *, memory, offset);
    }

    rb_field_value = GI_ARGUMENT2RVAL(&argument, FALSE, type_info,
                                      NULL, NULL, NULL);
    g_base_info_unref(type_info);

    return rb_field_value;
}

void
rb_gi_field_info_set_field_raw(GIFieldInfo *info, gpointer memory,
                               VALUE rb_field_value)
{
    GIArgument field_value;
    GITypeInfo *type_info;
    GITypeTag type_tag;
    gboolean succeeded;

    type_info = g_field_info_get_type(info);