Skip to content

Instantly share code, notes, and snippets.

@hfabre
Last active May 11, 2022 20:14
Show Gist options
  • Save hfabre/4f037bc09eede14da8349dfc8085fd6a to your computer and use it in GitHub Desktop.
Save hfabre/4f037bc09eede14da8349dfc8085fd6a to your computer and use it in GitHub Desktop.
pub const Color = struct {
a: u8,
r: u8,
g: u8,
b: u8
};
var new_mrb = mruby.open();
var mrb_color_class = new_mrb.define_class("Color", new_mrb.object_class());
new_mrb.define_method(mrb_color_class, "initialize", mrb_initialize_color, .{ .req = 3 });
const mrb_color_descriptor = mruby.mrb_data_type {
.struct_name = "Color",
.dfree = mruby.mrb_free
};
pub export fn mrb_initialize_color(mrb: *mruby.mrb_state, self: mruby.mrb_value) mruby.mrb_value {
var r = 0;
var g = 0;
var b = 0;
var color_data = @ptrCast(*Color, mruby.mrb_alloc(mrb, @sizeOf(Color)));
const num_args = mrb.get_args("iii", .{ &r, &g, &b });
color_data.* = Color {
.r = @intCast(u8, r),
.g = @intCast(u8, g),
.b = @intCast(u8, b),
.a = @intCast(u8, 0),
};
const data_obj = try mrb.data_object_alloc(mrb_color_class, color_data, &mrb_color_descriptor);
var instance = data_obj_to_value(); // Not sure how to do this
return instance;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment