blob: 3965a976e7f45453985444716a9e8d4ed4210130 [file] [log] [blame]
%module li_boost_shared_ptr_template
// First test- Bug 3333549 - using INTEGER typedef in %shared_ptr before typedef defined
%{
#include <boost/shared_ptr.hpp>
#ifdef SWIGR
// remove naming conflict with R symbol
#define INTEGER MYINTEGER
#endif
typedef int INTEGER;
template <class T>
class Base {
public:
virtual T bar() {return 1;}
virtual ~Base() {}
};
template <class T>
class Derived : public Base<T> {
public:
virtual T bar() {return 2;}
};
INTEGER bar_getter(Base<INTEGER>& foo) {
return foo.bar();
}
%}
#if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGPYTHON) || defined(SWIGD) || defined(SWIGOCTAVE) || defined(SWIGRUBY)
#define SHARED_PTR_WRAPPERS_IMPLEMENTED
#endif
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
%include <boost_shared_ptr.i>
%shared_ptr(Base<INTEGER>)
%shared_ptr(Derived<INTEGER>)
#endif
typedef int INTEGER;
template <class T>
class Base {
public:
virtual T bar() {return 1;}
};
template <class T>
class Derived : public Base<T> {
public:
virtual T bar() {return 2;}
};
INTEGER bar_getter(Base<INTEGER>& foo) {
return foo.bar();
}
%template(BaseINTEGER) Base<INTEGER>;
%template(DerivedINTEGER) Derived<INTEGER>;
// 2nd test - templates with default template parameters
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
%shared_ptr(Space::BaseDefault<short, int>)
%shared_ptr(Space::DerivedDefault<short>)
%shared_ptr(Space::DerivedDefault2<short>)
#endif
%inline %{
namespace Space {
typedef int INT_TYPEDEF;
template <class X, class T = int>
class BaseDefault {
public:
virtual T bar2() {return 3;}
virtual ~BaseDefault() {}
};
template <class X, class T = int>
class DerivedDefault : public BaseDefault<X, T> {
public:
virtual T bar2() {return 4;}
};
template <class X>
class DerivedDefault2 : public BaseDefault<X> {
public:
virtual int bar2() {return 4;}
};
int bar2_getter(BaseDefault<short>& foo) {
return foo.bar2();
}
}
%}
%template(BaseDefaultInt) Space::BaseDefault<short>;
%template(DerivedDefaultInt) Space::DerivedDefault<short>;
%template(DerivedDefaultInt2) Space::DerivedDefault2<short>;