// Tests %extend with default arguments as well as %extend with default arguments with overloading %module extend_default %warnfilter(SWIGWARN_PARSE_REDEFINED) Override::over; %warnfilter(SWIGWARN_PARSE_REDEFINED) Override::overload; %warnfilter(SWIGWARN_PARSE_REDEFINED) Override::ride; // %extend before the class definition %extend Before { Before(int i = -1, double d = -1.0) { Before *self = new Before(); self->i = i; self->d = d; return self; } static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; } double AddedMethod(int i = -1, double d = -1.0) { return i+d; } } %inline %{ struct Before { double d; int i; }; %} // %extend after the class definition %inline %{ struct After { double d; int i; }; %} %extend After { After(int i = -1, double d = -1.0) { After *self = new After(); self->i = i; self->d = d; return self; } static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; } double AddedMethod(int i = -1, double d = -1.0) { return i+d; } } // %extend before the class definition - with overloading and default args %extend OverBefore { OverBefore(int i = -1, double d = -1.0) { OverBefore *self = new OverBefore("boo"); self->i = i; self->d = d; return self; } static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; } double AddedMethod(int i = -1, double d = -1.0) { return i+d; } } %inline %{ struct OverBefore { OverBefore(const char *str, int ii = -2, double dd = -2.0) : d(dd), i(ii) { str=0; } static double AddedStaticMethod(const char*, int ii = -1, double dd = -1) { return ii+dd; } double AddedMethod(const char*, int ii = -1, double dd = -1.0) { return ii+dd; } double d; int i; }; %} // %extend after the class definition - with overloading and default args %extend OverAfter { OverAfter(int i = -1, double d = -1.0) { OverAfter *self = new OverAfter("boo"); self->i = i; self->d = d; return self; } static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; } double AddedMethod(int i = -1, double d = -1.0) { return i+d; } } %inline %{ struct OverAfter { OverAfter(const char *str, int ii = -2, double dd = -2.0) : d(dd), i(ii) { str=0; } static double AddedStaticMethod(const char*, int ii = -1, double dd = -1) { return ii+dd; } double AddedMethod(const char*, int ii = -1, double dd = -1.0) { return ii+dd; } double d; int i; }; %} // %extend overrides the class definition %extend Override { int over(int a) { return a*a; } // SWIG should give a warning then choose this one over the real one int overload(int a) { return a*a; } // Similarly, but this one generated uncompilable code in SWIG-1.3.22 } %inline %{ struct Override { int over(int a = -1) { return a; } int ride(int a = -1) { return a; } int overload(int a) { return a; } int overload() { return -10; } }; %} %extend Override { int ride(int a) { return a+a; } // SWIG should give a warning then ignore this one } // %extend in class hierarchy %extend Base { virtual int * virtualmethod(int a = 0) { return 0; } int * nonvirtual(int a = 0) { return 0; } static int * static_method(int a = 0) { return 0; } } %extend Derived { int * virtualmethod(int a = 0) { return 0; } int * nonvirtual(int a = 0) { return 0; } static int * static_method(int a = 0) { return 0; } int * realvirtual(int a = 0) { return 0; } } %inline %{ struct Base { virtual ~Base() {} virtual int * realvirtual(int a = 0) { return 0; } }; struct Derived : Base { }; %}