Hello all,
Following the recent discussion about accessing Perl variables directly from a
C function, I've put together some sample code that I think would be
appropriate to add into the Inline::C Cookbook. I thought to present the
example here first to allow users to comment or provide suggestions.
The code was tested in the following environments,
- Linux Fedora 20.0, ActivePerl 5.14.4, Inline::C 0.76
- OS X Yosemite 10.10.5, ActivePerl 5.24.0, Inline::C 0.76
The code example:
use strict;
use warnings;
use Inline C => Config => ccflagsex => "-std=c99";
use Inline C => "DATA";
our $mesh_data = "MESH-POINTS 0.0 0.0 0.5 0.25 1.0 0.5 1.5 0.75";
CalcSurfaceHeights();
__DATA__
__C__
#define N_MP 4
void CalcSurfaceHeights() {
double x[N_MP], y[N_MP], z;
char *mesh_data = SvPV_nolen(get_sv("main::mesh_data", 0));
sscanf(mesh_data, "MESH-POINTS %lf%lf%lf%lf%lf%lf%lf%lf",
x, y, x+1, y+1, x+2, y+2, x+3, y+3);
for (int ix=0; ix < N_MP; ix++) {
z = 0.5*( sin(x[ix]) + sin(y[ix]) );
printf("Surface-Height: %6.3f Mesh-Point: %6.2f, %6.2f\n",
z, x[ix], y[ix]);
}
}
________________________________________
Ron Grunwald
[email protected]
http://www.dvlcorner.org