Home | History | Annotate | Download | only in 2.0.11
      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