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.

···

--
Iñaki Baz Castillo <ibc@aliax.net>

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?

···

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

---
Aaron Patterson
http://tenderlovemaking.com

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);

···

On 12 Oct 2009, at 18:24, Iñaki Baz Castillo 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.

--
Regards,

Dirkjan Bussink

> 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)

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.

···

El Lunes, 12 de Octubre de 2009, Aaron Patterson escribió:

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

--
Iñaki Baz Castillo <ibc@aliax.net>

Yes, finally I used just "rb_hash_new" and "rb_hash_aset" functions.

···

El Lunes, 12 de Octubre de 2009, Dirkjan Bussink escribió:

On 12 Oct 2009, at 18:24, Iñaki Baz Castillo 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);

--
Iñaki Baz Castillo <ibc@aliax.net>