Add missing VOID_INT_PTR director typemaps
This commit is contained in:
parent
d3ac729f78
commit
e9e6a99f0f
5 changed files with 136 additions and 1 deletions
|
|
@ -5,6 +5,9 @@ See the RELEASENOTES file for a summary of changes in each release.
|
||||||
Version 3.0.11 (in progress)
|
Version 3.0.11 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
2016-10-23: wsfulton
|
||||||
|
[C#] Add missing csdirectorin VOID_INT_PTR and csdirectorout VOID_INT_PTR typemaps.
|
||||||
|
|
||||||
2016-10-23: jiulongw
|
2016-10-23: jiulongw
|
||||||
Patch #781 - Fix wrapping of C compound expressions containing char constants
|
Patch #781 - Fix wrapping of C compound expressions containing char constants
|
||||||
in quotes such as:
|
in quotes such as:
|
||||||
|
|
|
||||||
|
|
@ -203,6 +203,7 @@ CPP_TEST_CASES += \
|
||||||
director_thread \
|
director_thread \
|
||||||
director_unroll \
|
director_unroll \
|
||||||
director_using \
|
director_using \
|
||||||
|
director_void \
|
||||||
director_wombat \
|
director_wombat \
|
||||||
disown \
|
disown \
|
||||||
dynamic_cast \
|
dynamic_cast \
|
||||||
|
|
|
||||||
83
Examples/test-suite/csharp/director_void_runme.cs
Normal file
83
Examples/test-suite/csharp/director_void_runme.cs
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
using System;
|
||||||
|
using director_voidNamespace;
|
||||||
|
|
||||||
|
public class runme
|
||||||
|
{
|
||||||
|
private static void WaitForGC()
|
||||||
|
{
|
||||||
|
System.GC.Collect();
|
||||||
|
System.GC.WaitForPendingFinalizers();
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
runme r = new runme();
|
||||||
|
r.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
Caller caller = new Caller();
|
||||||
|
{
|
||||||
|
DirectorVoidPointer dvp = new DirectorVoidPointer(5);
|
||||||
|
int x = caller.callVirtualIn(dvp, 6);
|
||||||
|
if (x != 106)
|
||||||
|
throw new Exception("Fail1 should be 106, got " + x);
|
||||||
|
global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut();
|
||||||
|
x = Caller.VoidToInt(ptr);
|
||||||
|
if (x != 106)
|
||||||
|
throw new Exception("Fail2 should be 106, got " + x);
|
||||||
|
x = Caller.VoidToInt(dvp.voidPtrOut());
|
||||||
|
if (x != 106)
|
||||||
|
throw new Exception("Fail3 should be 106, got " + x);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DirectorVoidPointer dvp = new director_void_VoidPointer(5);
|
||||||
|
int x = caller.callVirtualIn(dvp, 6);
|
||||||
|
if (x != 12)
|
||||||
|
throw new Exception("Fail1 should be 12, got " + x);
|
||||||
|
global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut();
|
||||||
|
x = Caller.VoidToInt(ptr);
|
||||||
|
if (x != 25)
|
||||||
|
throw new Exception("Fail2 should be 25, got " + x);
|
||||||
|
x = Caller.VoidToInt(dvp.voidPtrOut());
|
||||||
|
if (x != 1234)
|
||||||
|
throw new Exception("Fail3 should be 1234, got " + x);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
DirectorVoidPointer dvp = new DirectorVoidPointer(10);
|
||||||
|
int x = caller.callVirtualOut(dvp);
|
||||||
|
if (x != 10)
|
||||||
|
throw new Exception("Bad1 should be 10, got " + x);
|
||||||
|
global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut();
|
||||||
|
x = dvp.nonVirtualVoidPtrIn(ptr);
|
||||||
|
if (x != 110)
|
||||||
|
throw new Exception("Bad2 should be 110, got " + x);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
DirectorVoidPointer dvp = new director_void_VoidPointer(10);
|
||||||
|
int x = caller.callVirtualOut(dvp);
|
||||||
|
if (x != 1234)
|
||||||
|
throw new Exception("Bad3 should be 1234, got " + x);
|
||||||
|
global::System.IntPtr ptr = dvp.nonVirtualVoidPtrOut();
|
||||||
|
x = dvp.nonVirtualVoidPtrIn(ptr);
|
||||||
|
if (x != 1334)
|
||||||
|
throw new Exception("Bad4 should be 1334, got " + x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class director_void_VoidPointer : DirectorVoidPointer {
|
||||||
|
public director_void_VoidPointer(int num) : base(num*num) {
|
||||||
|
}
|
||||||
|
public override int voidPtrIn(global::System.IntPtr p) {
|
||||||
|
return Caller.VoidToInt(p) * 2;
|
||||||
|
}
|
||||||
|
public override global::System.IntPtr voidPtrOut() {
|
||||||
|
setNewValue(1234);
|
||||||
|
return nonVirtualVoidPtrOut();
|
||||||
|
}
|
||||||
|
}
|
||||||
47
Examples/test-suite/director_void.i
Normal file
47
Examples/test-suite/director_void.i
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
%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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
@ -860,7 +860,8 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
|
||||||
global::System.IntPtr ret = $imcall;$excode
|
global::System.IntPtr ret = $imcall;$excode
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
%typemap(csdirectorin) void *VOID_INT_PTR "$iminput"
|
||||||
|
%typemap(csdirectorout) void *VOID_INT_PTR "$cscall"
|
||||||
|
|
||||||
/* Typemaps used for the generation of proxy and type wrapper class code */
|
/* Typemaps used for the generation of proxy and type wrapper class code */
|
||||||
%typemap(csbase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
|
%typemap(csbase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) ""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue