On 12/12/05, Joe Van Dyk <joevandyk / gmail.com> wrote: > On 12/12/05, Joe Van Dyk <joevandyk / gmail.com> wrote: > > (I've already looked at Swig, btw. I'd like to do this one by hand.) > > > > I have the following: > > > > typedef struct { > > double x; > > double y; > > double z; > > } VelocityRecord; > > > > typedef struct { > > double x; > > double y; > > double z; > > } PositionRecord; > > > > typedef struct { > > int id; > > int type; > > PositionRecord position; > > VelocityRecord velocity; > > } Player; > > > > Player Players[10]; > > > > > > The number of Players is fixed ahead of time. I want to be able to > > access that data from Ruby. Ideally, something like: > > > > module Simulation > > attr_accessor :players # Other stuff will be here > > class Player > > class VelocityRecord > > attr_accessor :x, :y :z > > end > > class PositionRecord > > attr_accessor :x, :y, :z > > end > > end > > end > > Hm, on second thought, it's probably a lot easier to do: > > class Player > attr_reader :x_position, :y_position, :z_position, :x_velocity, > :y_velocity, :z_velocity > end > > So, maybe something like this? > > void Init_Simulation() > { > rb_define_module(mSimulation, "Simulation"); > rb_define_class_under(cPlayer, "Player"); > > rb_define_method(cPlayer, "x_position", get_x_position, 0); > rb_define_method(cPlayer, "y_position", get_y_position, 0); > rb_define_method(cPlayer, "z_position", get_z_position, 0); > rb_define_method(cPlayer, "x_velocity", get_x_velocity, 0); > rb_define_method(cPlayer, "y_velocity", get_y_velocity, 0); > rb_define_method(cPlayer, "z_velocity", get_z_velocity, 0); > } So, I have a bunch of functions that look like this now: VALUE get_player_x_pos(VALUE self) { Player* p; Data_Get_Struct(self, Player, p); rb_float_new(p->position.x); } That the way to go?