This method is just verifying that I'm able to see the elements of a ruby array correctly.
static VALUE
print_cards(self)
VALUE self;
{
VALUE cards;
int i;
cards = rb_ivar_get(self, rb_intern("@cards"));
VALUE *ary_ptr = RARRAY_PTR(cards);
int ary_length = RARRAY_LEN(cards);
for(i=0; i< ary_length; i++)
printf("%d\n", ary_ptr[i]);
return Qnil;
}
void Init_ev() {
rb_eval_string("require './lib/ev/pair_counter'");
VALUE PairCounter = rb_path2class("EV::PairCounter");
rb_define_method(PairCounter, "print_cards", print_cards, 0);
}
But when I put the method to use, the elements of the array are wrong. The strange thing is that it doesn't look like I'm getting some kind of address information, since the size of the number that is printed roughly corresponds with the size of the number in the ruby array. The numbers are also consistent each time I create a new object and run print_cards.
ruby-1.9.2-p180 :001 > p = EV::PairCounter.new #=> #<EV::PairCounter:0x000001046a10f8 @pairs={}, @cards=[]>
ruby-1.9.2-p180 :002 > p.add_card(1) #=> 1
ruby-1.9.2-p180 :003 > p.print_cards
3 #=> nil
ruby-1.9.2-p180 :004 > p.add_card(5) #=> 2
ruby-1.9.2-p180 :005 > p.add_card(88) #=> 3
ruby-1.9.2-p180 :006 > p
=> #<EV::PairCounter:0x000001046a10f8 @pairs={1=>1, 5=>1, 88=>1}, @cards=[1, 5, 88]>
ruby-1.9.2-p180 :007 > p.print_cards
3
11
177