J
Joachim (München)
I need to make some C functions available to Ruby. One of them sets an
array of doubles. I want to return this array to Ruby.
On the C side:
data_reader.c:
#include "hardwaredriver.h"
....
void read_data( double *data )
{
for( i=0; i<8; ++i )
data = .... // get values from hardware driver
}
On the Ruby side, I would like to obtain the following
irb> require "data_reader"
true
irb> arr = Data_reader.read_data
[ 0.0, 0.1, ... ] # arr now contains eight Floats
Question 1:
Do I understand correctly that there are basically two different ways
to proceed ?:
(a) wrapping the C code with SWIG,
(b) converting the C code to an explicit Ruby extension as
described in the Book: http://www.rubycentral.com/pickaxe/ext_ruby.html
IF the answer is yes, THEN
Question 2:
How do I return an array through C->SWIG-> Ruby ?
Web search gave me some hints on how to do it in the opposite
direction, using typemap(in); but it seems not trivial to invert
to typemap(out).
Thanks in advance, Joachim
array of doubles. I want to return this array to Ruby.
On the C side:
data_reader.c:
#include "hardwaredriver.h"
....
void read_data( double *data )
{
for( i=0; i<8; ++i )
data = .... // get values from hardware driver
}
On the Ruby side, I would like to obtain the following
irb> require "data_reader"
true
irb> arr = Data_reader.read_data
[ 0.0, 0.1, ... ] # arr now contains eight Floats
Question 1:
Do I understand correctly that there are basically two different ways
to proceed ?:
(a) wrapping the C code with SWIG,
(b) converting the C code to an explicit Ruby extension as
described in the Book: http://www.rubycentral.com/pickaxe/ext_ruby.html
IF the answer is yes, THEN
Question 2:
How do I return an array through C->SWIG-> Ruby ?
Web search gave me some hints on how to do it in the opposite
direction, using typemap(in); but it seems not trivial to invert
to typemap(out).
Thanks in advance, Joachim