From: Eric Hodel Date: 2007-08-17T18:16:06+09:00 Subject: Re: [C ext to Ruby] how to get the key, value pairs of RHASH ??? On Aug 17, 2007, at 01:59, unbewust wrote: > i'd like to have, in my module options (is in FileUtils for ex) like > that in the Ruby side: > > symt = SYMBOL_TEST.new( "/my/src/path", :verbose => true, :noop => > true ) > > i know, from experiment, that, in my C init i get 2 VALUES in that > case the first being a RString the second an RHash. > > if i look at ruby.h i get : > > > struct RHash { > struct RBasic basic; > struct st_table *tbl; > int iter_lev; > VALUE ifnone; > }; > > i didn't found anything about "struct st_table *tbl" i imagine that's > here the key/value pairs are stored ??? > > but how to retrieve them ??? Use rb_hash_aset and rb_hash_aref from hash.c. Jump down to the Init_Hash() to get a list of what you can do. > generally speaking where could i find examples for each type of > struct ??? The pickaxe (including first edition) has a section on this. The C API hasn't changed much. http://www.rubycentral.com/pickaxe/ext_ruby.html > because i'll need in the near future the same kind of knoledge about : > > > struct RRegexp { > struct RBasic basic; > struct re_pattern_buffer *ptr; > long len; > char *str; > }; re.c > struct RFile { > struct RBasic basic; > struct OpenFile *fptr; > }; io.c and file.c > struct RData { > struct RBasic basic; > void (*dmark)(void*); > void (*dfree)(void*); > void *data; > }; I think the pickaxe has a section on this. -- Poor workers blame their tools. Good workers build better tools. The best workers get their tools to do the work for them. -- Syndicate Wars