| // Tests SWIG's handling of pass-by-value for complex datatypes |
| %module example |
| |
| %{ |
| #include "example.h" |
| %} |
| |
| /* Some functions that manipulate Vectors by value */ |
| %inline %{ |
| extern double dot_product(Vector a, Vector b); |
| extern Vector vector_add(Vector a, Vector b); |
| %} |
| |
| /* Include this because the vector_add() function will leak memory */ |
| void free(void *); |
| |
| /* Some helper functions for our interface */ |
| %inline %{ |
| |
| Vector *new_Vector(double x, double y, double z) { |
| Vector *v = (Vector *) malloc(sizeof(Vector)); |
| v->x = x; |
| v->y = y; |
| v->z = z; |
| return v; |
| } |
| |
| void vector_print(Vector *v) { |
| printf("Vector %p = (%g, %g, %g)\n", (void *)v, v->x, v->y, v->z); |
| } |
| %} |
| |