mirror of https://github.com/swig/swig
52 lines
1.0 KiB
OpenEdge ABL
52 lines
1.0 KiB
OpenEdge ABL
%module(directors="1") director_void
|
|
|
|
%warnfilter(SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) voidPtrOut;
|
|
|
|
%feature("director") DirectorVoidPointer;
|
|
|
|
#if defined(SWIGCSHARP)
|
|
%apply void *VOID_INT_PTR { void * }
|
|
#endif
|
|
|
|
%inline %{
|
|
class DirectorVoidPointer {
|
|
int *ptr;
|
|
public:
|
|
DirectorVoidPointer(int val) : ptr(new int(val)) {}
|
|
virtual ~DirectorVoidPointer() { delete ptr; }
|
|
|
|
virtual void * voidPtrOut() { return ptr; }
|
|
virtual int voidPtrIn(void *p) {
|
|
return nonVirtualVoidPtrIn(p);
|
|
}
|
|
|
|
void setNewValue(int val) {
|
|
delete ptr;
|
|
ptr = new int(val);
|
|
}
|
|
void *nonVirtualVoidPtrOut() { return ptr; }
|
|
int nonVirtualVoidPtrIn(void *p) {
|
|
int val = *(int *)p;
|
|
setNewValue(val + 100);
|
|
return *ptr;
|
|
}
|
|
};
|
|
|
|
struct Caller {
|
|
int callVirtualIn(DirectorVoidPointer *d, int num) {
|
|
return d->voidPtrIn(&num);
|
|
}
|
|
int callVirtualOut(DirectorVoidPointer *d) {
|
|
return *(int *)d->voidPtrOut();
|
|
}
|
|
static int VoidToInt(void *p) {
|
|
return *(int *)p;
|
|
}
|
|
};
|
|
|
|
struct MemberVoid {
|
|
void *memberVariable;
|
|
};
|
|
%}
|
|
|