%module funcptr_cpp %{ #if defined(__SUNPRO_CC) #pragma error_messages (off, badargtype2w) /* Formal argument ... is being passed extern "C" ... */ #endif %} %inline %{ int addByValue(const int &a, int b) { return a+b; } int * addByPointer(const int &a, int b) { static int val; val = a+b; return &val; } int & addByReference(const int &a, int b) { static int val; val = a+b; return val; } int call1(int (*d)(const int &, int), int a, int b) { return d(a, b); } int call2(int * (*d)(const int &, int), int a, int b) { return *d(a, b); } int call3(int & (*d)(const int &, int), int a, int b) { return d(a, b); } int call4(int & (*d)(int &, int *), int a, int b) { return d(a, &b); } int call5(int & (*d)(int &, int const * const), int a, int b) { return d(a, &b); } int callconst1(int (* const d)(const int &, int), int a, int b) { return d(a, b); } %} %constant int (*ADD_BY_VALUE)(const int &, int) = addByValue; %constant int * (*ADD_BY_POINTER)(const int &, int) = addByPointer; %constant int & (*ADD_BY_REFERENCE)(const int &, int) = addByReference; %constant int (* const ADD_BY_VALUE_C)(const int &, int) = addByValue; %inline %{ typedef int AddByValueTypedef(const int &a, int b); typedef int * AddByPointerTypedef(const int &a, int b); typedef int & AddByReferenceTypedef(const int &a, int b); void *typedef_call1(AddByValueTypedef *& precallback, AddByValueTypedef * postcallback) { return 0; } void *typedef_call2(AddByPointerTypedef *& precallback, AddByPointerTypedef * postcallback) { return 0; } void *typedef_call3(AddByReferenceTypedef *& precallback, AddByReferenceTypedef * postcallback) { return 0; } %}