| %module operator_overload_break |
| |
| #if defined(SWIGPYTHON) || defined(SWIGD) |
| %warnfilter(SWIGWARN_IGNORE_OPERATOR_PLUSPLUS); |
| #endif |
| |
| #if !defined(SWIGLUA) && !defined(SWIGR) && !defined(SWIGPERL) |
| %rename(Plus) operator +; |
| %rename(Minus) operator -; |
| %rename(EqualEqual) operator ==; |
| %rename(PlusPlusPrefix) operator++(); |
| %rename(PlusPlusPostfix) operator++(int); |
| #endif |
| |
| %ignore operator new (size_t); |
| %ignore operator delete (void *); |
| %ignore operator delete[] (void *); |
| |
| %{ |
| #include <iostream> |
| #include <stdlib.h> |
| using namespace std; |
| %} |
| |
| %inline %{ |
| |
| class Op |
| { |
| public: |
| Op(int n) {k = n;} |
| Op(const Op& other) { |
| std::cerr << "COPY: "<< other.k << std::endl; |
| k = other.k; |
| } |
| |
| bool operator==(const Op& rhs) { |
| std::cerr << "Op: " << k << std::endl; |
| std::cerr << "obj: " << rhs.k << std::endl; |
| return (k == rhs.k); |
| } |
| bool operator==(int i) { |
| std::cerr << "Op: " << k << std::endl; |
| std::cerr << "other: " << i << std::endl; |
| return (k == i); |
| } |
| |
| Op operator+(const Op& rhs) {return Op(k + rhs.k);} |
| Op operator+(int rhs) {return Op(k + rhs);} |
| |
| Op operator-(const Op& rhs) {return Op(k - rhs.k);} |
| Op operator-(int rhs) { |
| std::cerr << "sub: " << rhs << std::endl; |
| return Op(k - rhs); |
| } |
| |
| Op __rsub__(int lhs) { |
| std::cerr << "sub: " << lhs << std::endl; |
| return Op(lhs - k); |
| } |
| |
| Op& operator++() {k++; return *this;} |
| |
| void PrintK() {std::cerr << k << std::endl;} |
| |
| int k; |
| }; |
| |
| struct Op2 { |
| void *operator new |
| (size_t); // definition split over two lines was giving syntax error |
| void operator delete /* comment here did not work */ (void *); |
| void operator |
| delete[] (void *); |
| }; |
| |
| void *Op2::operator new(size_t) { return malloc(sizeof(Op)); } |
| void Op2::operator delete(void *p) { free(p); } |
| void Op2::operator delete[] (void *) {} |
| |
| %} |