/*
 */

VALUE
rb_struct_initialize(VALUE self, VALUE values)
{
    VALUE klass = rb_obj_class(self);
    VALUE size;
    long n;

    rb_struct_modify(self);
    size = rb_struct_iv_get(klass, "__size__");
    n = FIX2LONG(size);
    if (n < RARRAY_LEN(values)) {
        rb_raise(rb_eArgError, "struct size differs");
    }
    MEMCPY(RSTRUCT_PTR(self), RARRAY_PTR(values), VALUE, RARRAY_LEN(values));
    if (n > RARRAY_LEN(values)) {
        rb_mem_clear(RSTRUCT_PTR(self)+RARRAY_LEN(values),
                     n-RARRAY_LEN(values));
    }
    return Qnil;
}