|
I'm new to C programming and I have this simplified code: typedef struct Sprite {
int w;
int h;
Transform transform;
}
typedef struct SinCos {
float sin;
float cos;
}
typedef struct Transform {
Vec2 pos; // position
SinCos r; // rotation
}
typedef struct Vec2 {
float x;
float y;
}
static const struct mrb_data_type mrb_vec2_data_type = {"Vec2", mrb_free };
static mrb_value mrb_vec2_initialize(mrb_state* mrb, mrb_value self)
{
Vec2* vec = (Vec2*) mrb_malloc(mrb, sizeof(Vec2));
DATA_PTR(self) = vec;
DATA_TYPE(self) = &mrb_vec2_data_type;
return self;
}
static const struct mrb_data_type mrb_sprite_type = {
"Sprite", mrb_free
};
static mrb_value mrb_sprite_initialize(mrb_state* mrb, mrb_value self)
{
Sprite* sprite = (Sprite*) mrb_malloc(mrb, sizeof(Sprite));
*sprite = sprite_defaults();
DATA_PTR(self) = sprite;
DATA_TYPE(self) = &mrb_sprite_type;
return self;
}
static mrb_value mrb_sprite_get_transform(mrb_state* mrb, mrb_value self)
{
Sprite* sprite = DATA_PTR(self);
return mrb_obj_value(Data_Wrap_Struct(mrb, mrb_transform_class, &mrb_sprite_type, &sprite->transform));
}Basically, I have a 2D framework that has a What is the correct way to expose and wrap those structs? I think ideally I'd like to have a |
Replies: 1 comment 13 replies
|
To maintain a reference from a mrb_value sprite_obj = ...;
mrb_value transform_obj = ...;
mrb_sym iv_name = mrb_intern_lit(mrb, "owner");
mrb_iv_set(mrb, transform_obj, iv_name, sprite_obj);Note that |
If so, it must not be free at the same time as destroying the
Transforminstance.All that is required is to set the
Spriteinstance to an instance variable of theTransforminstance.