Hi Eric:

Eric Wilhelm wrote:
> # from Joe Landman
> # on Monday 21 August 2006 10:36 am:
> 
>> $x      = solve_for (@f,@k);
> 
> Firstly, that is going to pass a flat list:
> 
>   4.0, 3.0, 2.0 0.1, 0.2, 0.0, 0.0, 0.2, 0.3, 1.0, 1.0, 1.0 
> 
> (Aside:  unless you set a prototype of two array refs, but don't do 
> that.)

Was planning on fixing that later on, did it now to make life easier.

> 
> But there is another problem:  the error you are seeing is because 
> Inline doesn't grok this function signature.
> 
>> double *solve_for(double* f, double* k) {
> 
> What you probably want is to pass [EMAIL PROTECTED], and [EMAIL PROTECTED]  
> But, that means you'll 
> need to change the signature to get a pair of SV*'s and you'll then 
> need to unpack them.

Yup.  Just did that.

> 
> You also cannot return a pointer.
> 
> Here's a basic example of using array references.  There's more in the 
> Inline::C-Cookbook.
> 
> #!/usr/bin/perl
> use Inline C;
> 
> @inputArray = ( "134.3", "2.224", "3.343");
> array_pass([EMAIL PROTECTED]);
> 
> __END__
> __C__
> 
> int array_pass (SV* array_ref) {
>   AV  *av_ptr;
>   int n;
> 
>   if ( !SvROK(array_ref) || SvTYPE(SvRV(array_ref)) != SVt_PVAV )
>     croak("Argument must be array reference");
> 
>   av_ptr = (AV*) SvRV(array_ref);
>   printf("Number of elements: %d\n", 1+av_len(av_ptr));
> }
> 
> 
> --Eric

The major issue appears to be that I need to return an int, or an SV*.
It is working now with both of these.  Reasonably sanely at that.


 I would like to return an array reference though.  Will need to look a
little deeper.

Thanks!

Joe


-- 
Joseph Landman, Ph.D
Founder and CEO
Scalable Informatics LLC,
email: [EMAIL PROTECTED]
web  : http://www.scalableinformatics.com
phone: +1 734 786 8423
fax  : +1 734 786 8452 or +1 866 888 3112
cell : +1 734 612 4615

Reply via email to