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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
%module funcptr
/*
Complicated one that should defeat just reading , to find
the number of arguments expected in the function pointer.
extern void do(int (*op)(int (*i)(double, double), int j));
*/
%inline %{
typedef double (*DistFun)(double* data, int r, int c, int i, int j, void *xdata);
void distance(double *data, int *dim, DistFun fun, double *output) {
}
typedef int (*Operator)(int i,int j);
int do_op(int a, int b, int (*op)(int,int)) {
return (*op)(a,b);
}
int add(int a, int b) {
return a+b;
}
int subtract(int a, int b) {
return a-b;
}
int multiply(int a, int b) {
return a*b;
}
int *nowt() {
return 0;
}
int *nowt2(void) {
return 0;
}
struct MyStruct { int i; };
typedef struct MyStruct * MyStructPtr;
MyStructPtr mystructptr() {
return 0;
}
typedef int * Integer;
int (*funcvar)(int,int) = add;
int * (*funcvar2)() = nowt;
int * (*funcvar3)(void) = nowt2;
Integer (*funcvar4)() = nowt;
MyStructPtr (*funcvar5)() = mystructptr;
void (*pfunc0)();
int (*pfuncA)();
void (*pfunc1)(int);
void (*pfunc2)(int, double);
%}
|