From 3eec3e2ea572512e185541b0b56627d930a4e5f7 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sat, 6 Feb 2016 13:56:43 +0000 Subject: [PATCH] interface feature support for references --- .../java/multiple_inheritance_abstract_runme.java | 14 ++++++++++++++ .../test-suite/multiple_inheritance_abstract.i | 10 ++++++++++ Lib/java/feature_interface.i | 12 ++++++------ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Examples/test-suite/java/multiple_inheritance_abstract_runme.java b/Examples/test-suite/java/multiple_inheritance_abstract_runme.java index e804a5964..7cc8f3be3 100644 --- a/Examples/test-suite/java/multiple_inheritance_abstract_runme.java +++ b/Examples/test-suite/java/multiple_inheritance_abstract_runme.java @@ -93,5 +93,19 @@ public class multiple_inheritance_abstract_runme { check(multiple_inheritance_abstract.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract"); check(multiple_inheritance_abstract.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract"); check(multiple_inheritance_abstract.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract"); + + //Reference parameters + //Test ABase1 as a parameter + check(multiple_inheritance_abstract.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed in multiple_inheritance_abstract"); + + //Test CBase1 CBase2 as parameters + check(multiple_inheritance_abstract.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract"); + check(multiple_inheritance_abstract.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract"); } } diff --git a/Examples/test-suite/multiple_inheritance_abstract.i b/Examples/test-suite/multiple_inheritance_abstract.i index fbe69c995..b8cb63363 100644 --- a/Examples/test-suite/multiple_inheritance_abstract.i +++ b/Examples/test-suite/multiple_inheritance_abstract.i @@ -92,6 +92,7 @@ DECLARE_INTERFACE_RENAME(CBase2, CBase2, SWIGTYPE_CBase2) int InputValueCBase2(CBase2 cb2) { return cb2.cbase2(); } + int InputPtrABase1(ABase1 *pab1) { return pab1->abase1(); } @@ -102,4 +103,13 @@ DECLARE_INTERFACE_RENAME(CBase2, CBase2, SWIGTYPE_CBase2) return pcb2->cbase2(); } + int InputRefABase1(ABase1 &rab1) { + return rab1.abase1(); + } + int InputRefCBase1(CBase1 &rcb1) { + return rcb1.cbase1y(); + } + int InputRefCBase2(CBase2 &rcb2) { + return rcb2.cbase2(); + } %} diff --git a/Lib/java/feature_interface.i b/Lib/java/feature_interface.i index 3693488f6..052e35abf 100644 --- a/Lib/java/feature_interface.i +++ b/Lib/java/feature_interface.i @@ -1,12 +1,12 @@ %define DECLARE_INTERFACE_(CTYPE, INTERFACE, IMPL) %feature("interface", name = "INTERFACE", cptr = #INTERFACE ## "_getCPtr") CTYPE; -%typemap(jstype) CTYPE *, const CTYPE & "INTERFACE" -%typemap(jtype, nopgcpp="1") CTYPE *, const CTYPE & "long" -%typemap(javadirectorout) CTYPE *, const CTYPE & "$javacall." ## #INTERFACE ## "_getCPtr()" -%typemap(javadirectorin) CTYPE *, const CTYPE & "($jniinput == 0) ? null : (INTERFACE)new IMPL($jniinput, false)" +%typemap(jstype) CTYPE *, CTYPE & "INTERFACE" +%typemap(jtype, nopgcpp="1") CTYPE *, CTYPE & "long" +%typemap(javadirectorout) CTYPE *, CTYPE & "$javacall." ## #INTERFACE ## "_getCPtr()" +%typemap(javadirectorin) CTYPE *, CTYPE & "($jniinput == 0) ? null : (INTERFACE)new IMPL($jniinput, false)" %typemap(javain) CTYPE * "($javainput == null) ? 0 : $javainput." ## #INTERFACE ## "_getCPtr()" -%typemap(javain) const CTYPE & "$javainput." ## #INTERFACE ## "_getCPtr()" -%typemap(javaout) CTYPE *, const CTYPE & { +%typemap(javain) CTYPE & "$javainput." ## #INTERFACE ## "_getCPtr()" +%typemap(javaout) CTYPE *, CTYPE & { long cPtr = $jnicall; return (cPtr == 0) ? null : (INTERFACE)new IMPL(cPtr, true); }