From: <wsf...@us...> - 2011-11-25 20:57:03
|
Revision: 12843 http://swig.svn.sourceforge.net/swig/?rev=12843&view=rev Author: wsfulton Date: 2011-11-25 20:56:56 +0000 (Fri, 25 Nov 2011) Log Message: ----------- Fix inconsistencies in Java and C# getCPtr() and pointer constructor visibility - change to protected/internal from public. Add SWIG_JAVABODY_PROXY, SWIG_JAVABODY_TYPEWRAPPER and SWIG_CSBODY_PROXY, SWIG_CSBODY_TYPEWRAPPER for users to easily change when using multiple modules. Modified Paths: -------------- trunk/CHANGES.current trunk/Doc/Manual/CSharp.html trunk/Doc/Manual/Java.html trunk/Lib/csharp/boost_intrusive_ptr.i trunk/Lib/csharp/boost_shared_ptr.i trunk/Lib/csharp/csharp.swg trunk/Lib/java/boost_intrusive_ptr.i trunk/Lib/java/boost_shared_ptr.i trunk/Lib/java/java.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/CHANGES.current 2011-11-25 20:56:56 UTC (rev 12843) @@ -5,6 +5,30 @@ Version 2.0.5 (in progress) =========================== +2011-11-25: wsfulton + [C#] Provide an easy way to override the default visibility for the proxy class pointer + constructors and getCPtr() method. The visibility is 'internal' by default and if multiple + SWIG modules are being used and compiled into different assemblies, then they need to be + 'public' in order to use the constructor or getCPtr() method from a different assembly. + Use the following macros to change the visibilities in the proxy and type wrapper class: + + SWIG_CSBODY_PROXY(public, public, SWIGTYPE) + SWIG_CSBODY_TYPEWRAPPER(public, public, public, SWIGTYPE) + + [Java] Provide an easy way to override the default visibility for the proxy class pointer + constructors and getCPtr() method. The visibility is 'protected' by default and if multiple + SWIG modules are being used and compiled into different packages, then they need to be + 'public' in order to use the constructor or getCPtr() method from a different package. + Use the following macros to change the visibilities in the proxy and type wrapper class: + + SWIG_JAVABODY_PROXY(public, public, SWIGTYPE) + SWIG_JAVABODY_TYPEWRAPPER(public, public, public, SWIGTYPE) + + The default for Java has changed from public to protected for the proxy classes. Use the + SWIG_JAVABODY_PROXY macro above to restore to the previous visibilities. + + *** POTENTIAL INCOMPATIBILITY *** + 2011-11-22: szager [python] Bug 3440044: #ifdef out SWIG_Python_NonDynamicSetAttr if -builtin isn't being used, to avoid unnecessary binary incompatibilities between Modified: trunk/Doc/Manual/CSharp.html =================================================================== --- trunk/Doc/Manual/CSharp.html 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Doc/Manual/CSharp.html 2011-11-25 20:56:56 UTC (rev 12843) @@ -171,6 +171,14 @@ </li> <li> +<p>Typemap macros:</p> +<div class="code"><pre> +SWIG_JAVABODY_PROXY -> SWIG_CSBODY_PROXY +SWIG_JAVABODY_TYPEWRAPPER -> SWIG_CSBODY_TYPEWRAPPER +</pre></div> +</li> + +<li> <p>Additional typemaps:</p> <div class="code"><pre> Modified: trunk/Doc/Manual/Java.html =================================================================== --- trunk/Doc/Manual/Java.html 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Doc/Manual/Java.html 2011-11-25 20:56:56 UTC (rev 12843) @@ -2379,7 +2379,7 @@ swigCPtr = cPtr; } - public static long getCPtr(Foo obj) { + protected static long getCPtr(Foo obj) { return (obj == null) ? 0 : obj.swigCPtr; } @@ -2630,7 +2630,7 @@ swigCPtr = cPtr; } - public static long getCPtr(Base obj) { + protected static long getCPtr(Base obj) { return (obj == null) ? 0 : obj.swigCPtr; } @@ -2670,7 +2670,7 @@ swigCPtr = cPtr; } - public static long getCPtr(Derived obj) { + protected static long getCPtr(Derived obj) { return (obj == null) ? 0 : obj.swigCPtr; } @@ -2949,7 +2949,7 @@ swigCPtr = cPtr; } - public static long getCPtr(Test obj) { + protected static long getCPtr(Test obj) { return (obj == null) ? 0 : obj.swigCPtr; } @@ -5550,15 +5550,8 @@ Note that <tt>SWIGTYPE</tt> will target all proxy classes, but not the type wrapper classes. Also the above typemap is only used for proxy classes that are potential base classes. To target proxy classes that are derived from a wrapped class as well, the "javabody_derived" typemap should also be overridden. -There is a macro in <tt>java.swg</tt> that implements this and the above can instead be implemented using: </p> -<div class="code"> -<pre> -SWIG_JAVABODY_METHODS(protected, protected, SWIGTYPE) -</pre> -</div> - <p> For the typemap to be used in all type wrapper classes, all the different types that type wrapper classes could be used for should be targeted: </p> @@ -5568,7 +5561,7 @@ %typemap(javabody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) %{ private long swigCPtr; - public $javaclassname(long cPtr, boolean bFutureUse) { + protected $javaclassname(long cPtr, boolean bFutureUse) { swigCPtr = cPtr; } @@ -5576,7 +5569,7 @@ swigCPtr = 0; } - public static long getCPtr($javaclassname obj) { + protected static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} @@ -5587,6 +5580,29 @@ Again this is the same that is in "<tt>java.swg</tt>", barring the method modifier for <tt>getCPtr</tt>. </p> +<p> +When using <a href="Modules.html">multiple modules</a> it is common to invoke SWIG with a different <tt>-package</tt> +command line option for each module. +However, by default the generated code may not compile if +generated classes in one package use generated classes in another package. +The visibility of the +<tt>getCPtr()</tt> and pointer constructor generated from the <tt>javabody</tt> typemaps needs changing. +The default visibility is <tt>protected</tt> but it needs to be <tt>public</tt> for access from a different package. +Just changing 'protected' to 'public' in the typemap achieves this. +Two macros are available in <tt>java.swg</tt> to make this easier and using them is the preferred approach +over simply copying the typemaps and modifying as this is forward compatible with any changes in +the <tt>javabody</tt> typemap in future versions of SWIG. +The macros are for the proxy and typewrapper classes and can respectively be used to +to make the method and constructor public: +</p> + +<div class="code"> +<pre> + SWIG_JAVABODY_PROXY(public, public, SWIGTYPE) + SWIG_JAVABODY_TYPEWRAPPER(public, public, public, SWIGTYPE) +</pre> +</div> + <H3><a name="Java_directors_typemaps"></a>23.9.10 Director specific typemaps</H3> Modified: trunk/Lib/csharp/boost_intrusive_ptr.i =================================================================== --- trunk/Lib/csharp/boost_intrusive_ptr.i 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/csharp/boost_intrusive_ptr.i 2011-11-25 20:56:56 UTC (rev 12843) @@ -1,7 +1,16 @@ +// Users can provide their own SWIG_INTRUSIVE_PTR_TYPEMAPS or SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP macros before including this file to change the +// visibility of the constructor and getCPtr method if desired to public if using multiple modules. +#ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS +#define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(internal, internal, CONST, TYPE) +#endif +#ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP +#define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(internal, internal, CONST, TYPE) +#endif + %include <intrusive_ptr.i> // Language specific macro implementing all the customisations for handling the smart pointer -%define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) +%define SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) // %naturalvar is as documented for member variables %naturalvar TYPE; @@ -280,12 +289,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnBase; - public $csclassname(IntPtr cPtr, bool cMemoryOwn) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} @@ -295,14 +304,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnDerived; - public $csclassname(IntPtr cPtr, bool cMemoryOwn) - : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { - + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { swigCMemOwnDerived = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} @@ -349,7 +356,7 @@ %include <shared_ptr.i> -%define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) +%define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) %naturalvar TYPE; %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >; @@ -441,12 +448,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnBase; - public $csclassname(IntPtr cPtr, bool cMemoryOwn) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} @@ -456,14 +463,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnDerived; - public $csclassname(IntPtr cPtr, bool cMemoryOwn) - : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { - + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { swigCMemOwnDerived = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} Modified: trunk/Lib/csharp/boost_shared_ptr.i =================================================================== --- trunk/Lib/csharp/boost_shared_ptr.i 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/csharp/boost_shared_ptr.i 2011-11-25 20:56:56 UTC (rev 12843) @@ -1,7 +1,13 @@ +// Users can provide their own SWIG_SHARED_PTR_TYPEMAPS macro before including this file to change the +// visibility of the constructor and getCPtr method if desired to public if using multiple modules. +#ifndef SWIG_SHARED_PTR_TYPEMAPS +#define SWIG_SHARED_PTR_TYPEMAPS(CONST, TYPE...) SWIG_SHARED_PTR_TYPEMAPS_IMPLEMENTATION(internal, internal, CONST, TYPE) +#endif + %include <shared_ptr.i> // Language specific macro implementing all the customisations for handling the smart pointer -%define SWIG_SHARED_PTR_TYPEMAPS(CONST, TYPE...) +%define SWIG_SHARED_PTR_TYPEMAPS_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) // %naturalvar is as documented for member variables %naturalvar TYPE; @@ -175,12 +181,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnBase; - internal $csclassname(IntPtr cPtr, bool cMemoryOwn) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} @@ -190,12 +196,12 @@ private HandleRef swigCPtr; private bool swigCMemOwnDerived; - internal $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) { swigCMemOwnDerived = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} Modified: trunk/Lib/csharp/csharp.swg =================================================================== --- trunk/Lib/csharp/csharp.swg 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/csharp/csharp.swg 2011-11-25 20:56:56 UTC (rev 12843) @@ -820,67 +820,79 @@ %typemap(csinterfaces) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" %typemap(csinterfaces_derived) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" + +// csbody typemaps... these are in macros so that the visibility of the methods can be easily changed by users. + +%define SWIG_CSBODY_PROXY(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) // Proxy classes (base classes, ie, not derived classes) -%typemap(csbody) SWIGTYPE %{ +%typemap(csbody) TYPE %{ private HandleRef swigCPtr; protected bool swigCMemOwn; - internal $csclassname(IntPtr cPtr, bool cMemoryOwn) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) { swigCMemOwn = cMemoryOwn; swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} // Derived proxy classes -%typemap(csbody_derived) SWIGTYPE %{ +%typemap(csbody_derived) TYPE %{ private HandleRef swigCPtr; - internal $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGUpcast(cPtr), cMemoryOwn) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGUpcast(cPtr), cMemoryOwn) { swigCPtr = new HandleRef(this, cPtr); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} +%enddef +%define SWIG_CSBODY_TYPEWRAPPER(PTRCTOR_VISIBILITY, DEFAULTCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) // Typewrapper classes -%typemap(csbody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{ +%typemap(csbody) TYPE *, TYPE &, TYPE [] %{ private HandleRef swigCPtr; - internal $csclassname(IntPtr cPtr, bool futureUse) { + PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool futureUse) { swigCPtr = new HandleRef(this, cPtr); } - protected $csclassname() { + DEFAULTCTOR_VISIBILITY $csclassname() { swigCPtr = new HandleRef(null, IntPtr.Zero); } - internal static HandleRef getCPtr($csclassname obj) { + CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; } %} -%typemap(csbody) SWIGTYPE (CLASS::*) %{ +%typemap(csbody) TYPE (CLASS::*) %{ private string swigCMemberPtr; - internal $csclassname(string cMemberPtr, bool futureUse) { + PTRCTOR_VISIBILITY $csclassname(string cMemberPtr, bool futureUse) { swigCMemberPtr = cMemberPtr; } - protected $csclassname() { + DEFAULTCTOR_VISIBILITY $csclassname() { swigCMemberPtr = null; } - internal static string getCMemberPtr($csclassname obj) { + CPTR_VISIBILITY static string getCMemberPtr($csclassname obj) { return obj.swigCMemberPtr; } %} +%enddef +/* Set the default csbody typemaps to use internal visibility. + Use the macros to change to public if using multiple modules. */ +SWIG_CSBODY_PROXY(internal, internal, SWIGTYPE) +SWIG_CSBODY_TYPEWRAPPER(internal, protected, internal, SWIGTYPE) + %typemap(csfinalize) SWIGTYPE %{ ~$csclassname() { Dispose(); Modified: trunk/Lib/java/boost_intrusive_ptr.i =================================================================== --- trunk/Lib/java/boost_intrusive_ptr.i 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/java/boost_intrusive_ptr.i 2011-11-25 20:56:56 UTC (rev 12843) @@ -1,7 +1,17 @@ +// Users can provide their own SWIG_INTRUSIVE_PTR_TYPEMAPS or SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP macros before including this file to change the +// visibility of the constructor and getCPtr method if desired to public if using multiple modules. +#ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP +#define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(protected, protected, CONST, TYPE) +#endif +#ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS +#define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(protected, protected, CONST, TYPE) +#endif + + %include <intrusive_ptr.i> // Language specific macro implementing all the customisations for handling the smart pointer -%define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) +%define SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) // %naturalvar is as documented for member variables %naturalvar TYPE; @@ -256,12 +266,12 @@ private long swigCPtr; private boolean swigCMemOwnBase; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} @@ -271,13 +281,13 @@ private long swigCPtr; private boolean swigCMemOwnDerived; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { super($imclassname.$javaclazznameSWIGSmartPtrUpcast(cPtr), true); swigCMemOwnDerived = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} @@ -314,7 +324,7 @@ %include <shared_ptr.i> -%define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) +%define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) %naturalvar TYPE; %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >; @@ -406,12 +416,12 @@ private long swigCPtr; private boolean swigCMemOwnBase; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} @@ -421,13 +431,13 @@ private long swigCPtr; private boolean swigCMemOwnDerived; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { super($imclassname.$javaclazznameSWIGSmartPtrUpcast(cPtr), true); swigCMemOwnDerived = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} Modified: trunk/Lib/java/boost_shared_ptr.i =================================================================== --- trunk/Lib/java/boost_shared_ptr.i 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/java/boost_shared_ptr.i 2011-11-25 20:56:56 UTC (rev 12843) @@ -1,7 +1,13 @@ +// Users can provide their own SWIG_SHARED_PTR_TYPEMAPS macro before including this file to change the +// visibility of the constructor and getCPtr method if desired to public if using multiple modules. +#ifndef SWIG_SHARED_PTR_TYPEMAPS +#define SWIG_SHARED_PTR_TYPEMAPS(CONST, TYPE...) SWIG_SHARED_PTR_TYPEMAPS_IMPLEMENTATION(protected, protected, CONST, TYPE) +#endif + %include <shared_ptr.i> // Language specific macro implementing all the customisations for handling the smart pointer -%define SWIG_SHARED_PTR_TYPEMAPS(CONST, TYPE...) +%define SWIG_SHARED_PTR_TYPEMAPS_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...) // %naturalvar is as documented for member variables %naturalvar TYPE; @@ -142,12 +148,12 @@ private long swigCPtr; private boolean swigCMemOwnBase; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} @@ -157,13 +163,13 @@ private long swigCPtr; private boolean swigCMemOwnDerived; - public $javaclassname(long cPtr, boolean cMemoryOwn) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { super($imclassname.$javaclazznameSWIGSmartPtrUpcast(cPtr), true); swigCMemOwnDerived = cMemoryOwn; swigCPtr = cPtr; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} Modified: trunk/Lib/java/java.swg =================================================================== --- trunk/Lib/java/java.swg 2011-11-23 06:34:02 UTC (rev 12842) +++ trunk/Lib/java/java.swg 2011-11-25 20:56:56 UTC (rev 12843) @@ -1116,9 +1116,11 @@ /* javabody typemaps */ -%define SWIG_JAVABODY_METHODS(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPENAME...) +%define SWIG_JAVABODY_METHODS(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) SWIG_JAVABODY_PROXY(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE) %enddef // legacy name + +%define SWIG_JAVABODY_PROXY(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) // Base proxy classes -%typemap(javabody) TYPENAME %{ +%typemap(javabody) TYPE %{ private long swigCPtr; protected boolean swigCMemOwn; @@ -1133,7 +1135,7 @@ %} // Derived proxy classes -%typemap(javabody_derived) TYPENAME %{ +%typemap(javabody_derived) TYPE %{ private long swigCPtr; PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) { @@ -1147,44 +1149,46 @@ %} %enddef -/* Set the default for SWIGTYPE: pointer constructor is protected, - getCPtr is protected. Season to your own taste! */ - -SWIG_JAVABODY_METHODS(public, public, SWIGTYPE) - +%define SWIG_JAVABODY_TYPEWRAPPER(PTRCTOR_VISIBILITY, DEFAULTCTOR_VISIBILITY, CPTR_VISIBILITY, TYPE...) // Typewrapper classes -%typemap(javabody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{ +%typemap(javabody) TYPE *, TYPE &, TYPE [] %{ private long swigCPtr; - protected $javaclassname(long cPtr, boolean futureUse) { + PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean futureUse) { swigCPtr = cPtr; } - protected $javaclassname() { + DEFAULTCTOR_VISIBILITY $javaclassname() { swigCPtr = 0; } - protected static long getCPtr($javaclassname obj) { + CPTR_VISIBILITY static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} -%typemap(javabody) SWIGTYPE (CLASS::*) %{ +%typemap(javabody) TYPE (CLASS::*) %{ private String swigCMemberPtr; - protected $javaclassname(String cMemberPtr, boolean futureUse) { + PTRCTOR_VISIBILITY $javaclassname(String cMemberPtr, boolean futureUse) { swigCMemberPtr = cMemberPtr; } - protected $javaclassname() { + DEFAULTCTOR_VISIBILITY $javaclassname() { swigCMemberPtr = null; } - protected static String getCMemberPtr($javaclassname obj) { + CPTR_VISIBILITY static String getCMemberPtr($javaclassname obj) { return obj.swigCMemberPtr; } %} +%enddef +/* Set the default javabody typemaps to use protected visibility. + Use the macros to change to public if using multiple modules. */ +SWIG_JAVABODY_PROXY(public, public, SWIGTYPE) +SWIG_JAVABODY_TYPEWRAPPER(protected, protected, protected, SWIGTYPE) + %typemap(javafinalize) SWIGTYPE %{ protected void finalize() { delete(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |