Any "easy" example of using T_HASH in a C extension?

Hi, I’ve found some tutorials explaining how to create and manipulat a
Ruby
array from a C extension using T_ARRAY and its realted functions.
However I find nothing about T_HASH, and trying to extract the functions
from
Ruby “hash.c” code is… not very cool.

Is there any tutorial about creating a simple hash in Ruby C extension?

Thanks a lot.

On Oct 12, 2009, at 9:24 AM, Iñaki Baz C. wrote:

Hi, I’ve found some tutorials explaining how to create and manipulat
a Ruby
array from a C extension using T_ARRAY and its realted functions.
However I find nothing about T_HASH, and trying to extract the
functions from
Ruby “hash.c” code is… not very cool.

Sure it is! All of the hipsters at Beauty Bar were talking about it
the other night. But you’d better hop on board quickly before it
becomes uncool, otherwise you’re going to have to wait until it
becomes “retro cool”.

Is there any tutorial about creating a simple hash in Ruby C
extension?

rb_hash_new(void)
rb_hash_aset(VALUE hash, VALUE key, VALUE val)
rb_hash_aref(VALUE hash, VALUE key)

Though, if you’re just doing hash manipulation, why not just do it in
Ruby?


Aaron P.
http://tenderlovemaking.com

El Lunes, 12 de Octubre de 2009, Aaron P.
escribió:> becomes uncool, otherwise you’re going to have to wait until it

becomes “retro cool”.

Is there any tutorial about creating a simple hash in Ruby C
extension?

rb_hash_new(void)
rb_hash_aset(VALUE hash, VALUE key, VALUE val)
rb_hash_aref(VALUE hash, VALUE key)

Yeah! just found these functions in an online presentation. :slight_smile:

Though, if you’re just doing hash manipulation, why not just do it in
Ruby?

Not exactly. I’ve coded a parser in C and it must return a Ruby hash.

Thanks a lot.

On 12 Oct 2009, at 18:24, Iñaki Baz C. wrote:

Hi, I’ve found some tutorials explaining how to create and manipulat
a Ruby
array from a C extension using T_ARRAY and its realted functions.
However I find nothing about T_HASH, and trying to extract the
functions from
Ruby “hash.c” code is… not very cool.

I’d advise against using T_ARRAY, RARRAY_PTR etc, writing stuff with
the following methods makes life a lot easier for other Ruby
implementations that also support MRI C extensions:

rb_ary_new(void);
rb_ary_push(VALUE array, VALUE element);
rb_ary_entry(VALUE array, long i);
rb_ary_store(VALUE array, long i, VALUE element);


Regards,

Dirkjan Bussink

El Lunes, 12 de Octubre de 2009, Dirkjan Bussink
escribió:> implementations that also support MRI C extensions:

rb_ary_new(void);
rb_ary_push(VALUE array, VALUE element);
rb_ary_entry(VALUE array, long i);
rb_ary_store(VALUE array, long i, VALUE element);

Yes, finally I used just “rb_hash_new” and “rb_hash_aset” functions.