1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#include "EXTERN.h"
#include "perl.h"
#include "pdlcore.h"
#include <gsl/gsl_math.h>
SV* ext_funname;
void set_funname(SV *fn) {
ext_funname = fn;
}
double FUNC(double x,void * p){
double res;
int count;
dSP;
SV* funname = ext_funname; /* get function name on the perl side */
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVnv(x)));
PUTBACK;
count=call_sv(funname,G_SCALAR);
SPAGAIN;
if (count!=1)
croak("error calling perl function\n");
/* recover output value */
res = POPn;
PUTBACK;
FREETMPS;
LEAVE;
return res;
}
|