| %module smart_pointer_const_overload |
| |
| %warnfilter(SWIGWARN_LANG_OVERLOAD_IGNORED) Bar::operator->; // Overloaded method Bar::operator ->() ignored |
| %warnfilter(SWIGWARN_LANG_OVERLOAD_IGNORED) Bar2::operator->; // Overloaded method Bar2::operator ->() ignored |
| |
| %{ |
| #include <stdlib.h> |
| %} |
| |
| %inline %{ |
| int CONST_ACCESS = 1; |
| int MUTABLE_ACCESS = 2; |
| |
| int *new_int(int ivalue) { |
| int *i = (int *) malloc(sizeof(ivalue)); |
| *i = ivalue; |
| return i; |
| } |
| |
| int get_int(int *i) { |
| return *i; |
| } |
| |
| void set_int(int *i, int ivalue) { |
| *i = ivalue; |
| } |
| |
| void delete_int(int *i) { |
| free(i); |
| } |
| |
| struct Foo { |
| int x; |
| int * const xp; |
| const int y; |
| const int *yp; |
| int access; |
| Foo() : x(0), xp(&x), y(0), yp(&y), access(0) { } |
| int getx() const { return x; } |
| void setx(int x_) { x = x_; } |
| static void statMethod() {} |
| }; |
| %} |
| |
| %extend Foo { |
| int getx2() const { return self->x; } |
| void setx2(int x_) { self->x = x_; } |
| }; |
| |
| %inline %{ |
| class Bar { |
| Foo *f; |
| public: |
| Bar(Foo *f) : f(f) { } |
| const Foo *operator->() const { |
| f->access = CONST_ACCESS; |
| return f; |
| } |
| Foo *operator->() { |
| f->access = MUTABLE_ACCESS; |
| return f; |
| } |
| }; |
| |
| class Bar2 { |
| Foo *f; |
| public: |
| Bar2(Foo *f) : f(f) { } |
| Foo *operator->() { |
| f->access = MUTABLE_ACCESS; |
| return f; |
| } |
| const Foo *operator->() const { |
| f->access = CONST_ACCESS; |
| return f; |
| } |
| }; |
| %} |