I am trying to use ruby.h to extend Ruby with C/C++. I understand how
to deal with numbers and strings, but I am having trouble finding
documentation about vectors and maps. Let’s say I have this function
for example:
VALUE read_values(VALUE self, VALUE object);
The ‘object’ variable can represent either a Ruby array or a Ruby hash.
If it is a Ruby array, I want to translate it to a vector. If it is a
Ruby hash, I want to translate it to a map. I know for integers, there
is a macro called NUM2INT that converts a Ruby number into a C/C++
integer. For strings, I know that the function StringValueCStr does
what I want. I couldn’t find it in the ruby.h documentation, but is
there any similar functionality in ruby.h for translating to vectors and
maps? If so, what is the functionality? If there is not a direct
translation, what would be the best approach to do my task? I’d like to
avoid using another protocol, like SWIG, for this task, if possible.
I already know how to check if ‘object’ is an array or a hash. I am
looking for how to translate ‘object’ from a Ruby array to a C/C++
vector or from a Ruby hash to a C/C++ map.
Also, when I do the translation, I don’t want to use functions like
rb_ary_new2 or rb_hash_new, since these two functions both return VALUE
objects, not std::vector or std::map objects. I know there is no direct
function in ruby.h to do the translation. I’m wondering if this is a
certain process of function calls in ruby.h to do this. Thanks!
Edward L. wrote:
I already know how to check if ‘object’ is an array or a hash. I am
looking for how to translate ‘object’ from a Ruby array to a C/C++
vector or from a Ruby hash to a C/C++ map.
I’m looking through the documentation for ruby.h and intern.h, and I am
having a problem with trying to be able to access a Ruby hash inside a
C/C++ program. I see that using ruby.h, I have access to rb_hash_new
and a couple other hash functions. However, it doesn’t seem that I can
use a function that will return me an array of keys to access the hash.
For example, hash.c in Ruby has a rb_hash_keys functions. However, it
is not accessible through either ruby.h or intern.h. Does anyone know
of any way I can full access to the Ruby hash and array functions for
C/C++?