%module smart_pointer_extend %warnfilter(SWIGWARN_RUBY_WRONG_NAME) hi::CBase::z; /* Ruby, wrong const name */ %inline %{ namespace hi { struct CBase { static int hello() { return 1; } int x; static const int z = 1; }; class CDerived : public CBase { }; class CPtr { public: CDerived* operator->(void) {return 0;} }; int get_hello(CPtr ptr) { return ptr->hello(); } class CPtrConst { public: const CDerived* operator->() const {return 0;}; }; } %} %extend hi::CBase { int foo(void) {return 1;}; int bar(void) {return 2;}; int boo(int i) {return i;}; } %extend hi::CDerived { int foo(void) {return 1;}; } %extend Foo { int extension(int i, int j) { return i; } int extension(int i) { return i; } int extension() { return 1; } } %inline %{ struct Foo { }; class Bar { Foo *f; public: Bar(Foo *f) : f(f) { } Foo *operator->() { return f; } }; %} %extend CFoo { public: static void StatFun() {}; static void StatFun(int i) {}; static void HoHoHo(int i, int j) {}; } %inline %{ class CFoo { }; class CPtrFoo { public: CFoo* operator->(void) {return 0;}; }; %} %inline %{ namespace foo { class DFoo; class DPtrFoo { DFoo *p; public: DPtrFoo(DFoo *ptr) : p(ptr) { } DFoo* operator->(void) {return p;}; }; class DFoo { public: void F(void) {}; }; } %} %extend foo::DFoo { static int SExt(int i = 1) {return i;}; int Ext(int i = 2) {return i;}; }