-
|
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 |
Beta Was this translation helpful? Give feedback.
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 |
Beta Was this translation helpful? Give feedback.
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.