|
SWIG/Examples/perl5/value/
Passing and Returning Structures by Value$Header: /cvs/projects/SWIG/Examples/perl5/value/index.html,v 1.1 2000/08/31 18:20:37 beazley Exp $Occasionally, a C program will manipulate structures by value such as shown in the following code: Since SWIG only knows how to manage pointers to structures (not their internal representation), the following translations are made when wrappers are created:/* File : example.c */ typedef struct Vector { double x, y, z; } Vector; double dot_product(Vector a, Vector b) { return (a.x*b.x + a.y*b.y + a.z*b.z); } Vector vector_add(Vector a, Vector b) { Vector r; r.x = a.x + b.x; r.y = a.y + b.y; r.z = a.z + b.z; return r; } The functions are then called using pointers from the scripting language interface. It should also be noted that any function that returns a structure by value results in an implicit memory allocation. This will be a memory leak unless you take steps to free the result (see below).double wrap_dot_product(Vector *a, Vector *b) { return dot_product(*a,*b); } Vector *wrap_vector_add(Vector *a, Vector *b) { Vector *r = (Vector *) malloc(sizeof(Vector)); *r = vector_add(*a,*b); return r; } The SWIG interfaceClick here to see a SWIG interface file that wraps these two functions. In this file, there are a few essential features:
A Perl ScriptClick here to see a script that uses these functions from Perl.Notes
|