Skip to content

Commit

Permalink
interface feature support for references
Browse files Browse the repository at this point in the history
  • Loading branch information
wsfulton committed Feb 6, 2016
1 parent eb15ba1 commit 3eec3e2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
14 changes: 14 additions & 0 deletions Examples/test-suite/java/multiple_inheritance_abstract_runme.java
Expand Up @@ -93,5 +93,19 @@ public static void main(String argv[]) {
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");
}
}
10 changes: 10 additions & 0 deletions Examples/test-suite/multiple_inheritance_abstract.i
Expand Up @@ -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();
}
Expand All @@ -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();
}
%}
12 changes: 6 additions & 6 deletions 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);
}
Expand Down

0 comments on commit 3eec3e2

Please sign in to comment.