This class manages C types.
It embbed {FFI::Type::Builtin} objects as constants (for names, see {FFI::NativeType}).
static VALUE
type_initialize(VALUE self, VALUE value)
{
Type* type;
Type* other;
Data_Get_Struct(self, Type, type);
if (FIXNUM_P(value)) {
type->nativeType = FIX2INT(value);
} else if (rb_obj_is_kind_of(value, rbffi_TypeClass)) {
Data_Get_Struct(value, Type, other);
type->nativeType = other->nativeType;
type->ffiType = other->ffiType;
} else {
rb_raise(rb_eArgError, "wrong type");
}
return self;
}
static VALUE
type_alignment(VALUE self)
{
Type *type;
Data_Get_Struct(self, Type, type);
return INT2FIX(type->ffiType->alignment);
}
static VALUE
type_inspect(VALUE self)
{
char buf[100];
Type *type;
Data_Get_Struct(self, Type, type);
snprintf(buf, sizeof(buf), "#<%s:%p size=%d alignment=%d>",
rb_obj_classname(self), type, (int) type->ffiType->size, (int) type->ffiType->alignment);
return rb_str_new2(buf);
}
Generated with the Darkfish Rdoc Generator 2.