1 // This is a helper file for shared_ptr and should not be included directly. 2 3 // The main implementation detail in using this smart pointer of a type is to customise the code generated 4 // to use a pointer to the smart pointer of the type, rather than the usual pointer to the underlying type. 5 // So for some type T, shared_ptr<T> * is used rather than T *. 6 7 // shared_ptr namespaces could be boost or std or std::tr1 8 // For example for std::tr1, use: 9 // #define SWIG_SHARED_PTR_NAMESPACE std 10 // #define SWIG_SHARED_PTR_SUBNAMESPACE tr1 11 12 #if !defined(SWIG_SHARED_PTR_NAMESPACE) 13 # define SWIG_SHARED_PTR_NAMESPACE boost 14 #endif 15 16 #if defined(SWIG_SHARED_PTR_SUBNAMESPACE) 17 # define SWIG_SHARED_PTR_QNAMESPACE SWIG_SHARED_PTR_NAMESPACE::SWIG_SHARED_PTR_SUBNAMESPACE 18 #else 19 # define SWIG_SHARED_PTR_QNAMESPACE SWIG_SHARED_PTR_NAMESPACE 20 #endif 21 22 namespace SWIG_SHARED_PTR_NAMESPACE { 23 #if defined(SWIG_SHARED_PTR_SUBNAMESPACE) 24 namespace SWIG_SHARED_PTR_SUBNAMESPACE { 25 #endif 26 template <class T> class shared_ptr { 27 }; 28 #if defined(SWIG_SHARED_PTR_SUBNAMESPACE) 29 } 30 #endif 31 } 32 33 %fragment("SWIG_null_deleter", "header") { 34 struct SWIG_null_deleter { 35 void operator() (void const *) const { 36 } 37 }; 38 %#define SWIG_NO_NULL_DELETER_0 , SWIG_null_deleter() 39 %#define SWIG_NO_NULL_DELETER_1 40 %#define SWIG_NO_NULL_DELETER_SWIG_POINTER_NEW 41 %#define SWIG_NO_NULL_DELETER_SWIG_POINTER_OWN 42 } 43 44 45 // Workaround empty first macro argument bug 46 #define SWIGEMPTYHACK 47 // Main user macro for defining shared_ptr typemaps for both const and non-const pointer types 48 %define %shared_ptr(TYPE...) 49 %feature("smartptr", noblock=1) TYPE { SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > } 50 SWIG_SHARED_PTR_TYPEMAPS(SWIGEMPTYHACK, TYPE) 51 SWIG_SHARED_PTR_TYPEMAPS(const, TYPE) 52 %enddef 53 54 // Legacy macros 55 %define SWIG_SHARED_PTR(PROXYCLASS, TYPE...) 56 #warning "SWIG_SHARED_PTR(PROXYCLASS, TYPE) is deprecated. Please use %shared_ptr(TYPE) instead." 57 %shared_ptr(TYPE) 58 %enddef 59 60 %define SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE...) 61 #warning "SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE) is deprecated. Please use %shared_ptr(TYPE) instead." 62 %shared_ptr(TYPE) 63 %enddef 64 65