Index: swig/Lib/intrusive_ptr.i |
=================================================================== |
--- swig/Lib/intrusive_ptr.i (revision 0) |
+++ swig/Lib/intrusive_ptr.i (revision 0) |
@@ -0,0 +1,95 @@ |
+// Allow for different namespaces for shared_ptr / intrusive_ptr - they could be boost or std or std::tr1 |
+// For example for std::tr1, use: |
+// #define SWIG_SHARED_PTR_NAMESPACE std |
+// #define SWIG_SHARED_PTR_SUBNAMESPACE tr1 |
+// #define SWIG_INTRUSIVE_PTR_NAMESPACE boost |
+// #define SWIG_INTRUSIVE_PTR_SUBNAMESPACE |
+ |
+#if !defined(SWIG_INTRUSIVE_PTR_NAMESPACE) |
+# define SWIG_INTRUSIVE_PTR_NAMESPACE boost |
+#endif |
+ |
+#if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) |
+# define SWIG_INTRUSIVE_PTR_QNAMESPACE SWIG_INTRUSIVE_PTR_NAMESPACE::SWIG_INTRUSIVE_PTR_SUBNAMESPACE |
+#else |
+# define SWIG_INTRUSIVE_PTR_QNAMESPACE SWIG_INTRUSIVE_PTR_NAMESPACE |
+#endif |
+ |
+namespace SWIG_INTRUSIVE_PTR_NAMESPACE { |
+#if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) |
+ namespace SWIG_INTRUSIVE_PTR_SUBNAMESPACE { |
+#endif |
+ template <class T> class intrusive_ptr { |
+ }; |
+#if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) |
+ } |
+#endif |
+} |
+ |
+%fragment("SWIG_intrusive_deleter", "header") { |
+template<class T> struct SWIG_intrusive_deleter { |
+ void operator()(T *p) { |
+ if (p) |
+ intrusive_ptr_release(p); |
+ } |
+}; |
+} |
+ |
+%fragment("SWIG_null_deleter", "header") { |
+struct SWIG_null_deleter { |
+ void operator() (void const *) const { |
+ } |
+}; |
+%#define SWIG_NO_NULL_DELETER_0 , SWIG_null_deleter() |
+%#define SWIG_NO_NULL_DELETER_1 |
+} |
+ |
+// Main user macro for defining intrusive_ptr typemaps for both const and non-const pointer types |
+// For plain classes, do not use for derived classes |
+%define SWIG_INTRUSIVE_PTR(PROXYCLASS, TYPE...) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, , TYPE) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, const, TYPE) |
+%enddef |
+ |
+// Main user macro for defining intrusive_ptr typemaps for both const and non-const pointer types |
+// For derived classes |
+%define SWIG_INTRUSIVE_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE...) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, , TYPE) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, const, TYPE) |
+%types(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > = SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE >) %{ |
+ *newmemory = SWIG_CAST_NEW_MEMORY; |
+ return (void *) new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE >(*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *)$from); |
+ %} |
+%extend TYPE { |
+ static SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE > SWIGSharedPtrUpcast(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast) { |
+ return swigSharedPtrUpcast; |
+ } |
+} |
+%enddef |
+ |
+// Extra user macro for including classes in intrusive_ptr typemaps for both const and non-const pointer types |
+// This caters for classes which cannot be wrapped by intrusive_ptrs but are still part of the class hierarchy |
+// For plain classes, do not use for derived classes |
+%define SWIG_INTRUSIVE_PTR_NO_WRAP(PROXYCLASS, TYPE...) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(PROXYCLASS, , TYPE) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(PROXYCLASS, const, TYPE) |
+%enddef |
+ |
+// Extra user macro for including classes in intrusive_ptr typemaps for both const and non-const pointer types |
+// This caters for classes which cannot be wrapped by intrusive_ptrs but are still part of the class hierarchy |
+// For derived classes |
+%define SWIG_INTRUSIVE_PTR_DERIVED_NO_WRAP(PROXYCLASS, BASECLASSTYPE, TYPE...) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(PROXYCLASS, , TYPE) |
+SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(PROXYCLASS, const, TYPE) |
+%types(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > = SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE >) %{ |
+ *newmemory = SWIG_CAST_NEW_MEMORY; |
+ return (void *) new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE >(*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *)$from); |
+%} |
+%extend TYPE { |
+ static SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< BASECLASSTYPE > SWIGSharedPtrUpcast(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast) { |
+ return swigSharedPtrUpcast; |
+ } |
+} |
+%enddef |
+ |
+ |