For some reason, people tend to think of accessing Perl arrays from C code. I think you'll run into a lot fewer bugs if you instead deal with C arrays from Perl code, since the code is so trivial to write:
use Inline ( 'C', <<END_C ); void _munge( char *outlist, int size, char *inlist1, char *inlist2 ) { double *output = (double *) outlist; double *list1 = (double *) inlist1; double *list2 = (double *) inlist2; /* use the "arrays" just like normal for C code: */ int i; for( i= 0; i < size; ++i ) { output[i] = combine( list1[i], list2[i] ); } } END_C sub munge { my( $l1, $l2 ) = @_; my $size = 0+@$l1; my $out = "\0" x ( $size * length pack "d", 0.0 ); my $pack1 = pack "d$size", @$l1; my $pack2 = pack "d$size", @$l2; _munge( $out, $size, $pack1, $pack2 ); return unpack "d$size", $out; }
- tye
In reply to Re: Arrays and Inline C (pack)
by tye
in thread Arrays and Inline C
by BobQQ
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |