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 22namespace 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") { 34struct 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 > } 50SWIG_SHARED_PTR_TYPEMAPS(SWIGEMPTYHACK, TYPE) 51SWIG_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