| /* Test the tp_richcompare functions generated with the -builtin option */ | |
| %module python_richcompare | |
| %inline { | |
| class BaseClass { | |
| public: | |
| BaseClass (int i_) : i(i_) {} | |
| ~BaseClass () {} | |
| int getValue () const | |
| { return i; } | |
| bool operator< (const BaseClass& x) const | |
| { return this->i < x.i; } | |
| bool operator> (const BaseClass& x) const | |
| { return this->i > x.i; } | |
| bool operator<= (const BaseClass& x) const | |
| { return this->i <= x.i; } | |
| bool operator>= (const BaseClass& x) const | |
| { return this->i >= x.i; } | |
| bool operator== (const BaseClass& x) const | |
| { return this->i == x.i; } | |
| bool operator!= (const BaseClass& x) const | |
| { return this->i != x.i; } | |
| int i; | |
| }; | |
| class SubClassA : public BaseClass { | |
| public: | |
| SubClassA (int i_) : BaseClass(i_) {} | |
| ~SubClassA () {} | |
| bool operator== (const SubClassA& x) const | |
| { return true; } | |
| bool operator== (const BaseClass& x) const | |
| { return false; } | |
| }; | |
| class SubClassB : public BaseClass { | |
| public: | |
| SubClassB (int i_) : BaseClass(i_) {} | |
| ~SubClassB () {} | |
| bool operator== (const SubClassB& x) const | |
| { return true; } | |
| bool operator== (const SubClassA& x) const | |
| { return false; } | |
| }; | |
| } | |
| // Test custom exceptions can still be thrown in operators which use %pythonmaybecall | |
| %{ | |
| struct ZeroValueProblem { | |
| ZeroValueProblem() {} | |
| }; | |
| %} | |
| %exception ExceptionThrower::operator< { | |
| try | |
| { | |
| $action | |
| } | |
| catch(const ZeroValueProblem&) | |
| { | |
| PyErr_SetString(PyExc_ValueError, "Zero not liked in operator<"); | |
| SWIG_fail; | |
| } | |
| } | |
| %inline { | |
| class ExceptionThrower { | |
| int i; | |
| public: | |
| ExceptionThrower (int i_) : i(i_) {} | |
| bool operator< (const ExceptionThrower& rhs) const { | |
| if (rhs.i == 0 || i == 0) | |
| throw ZeroValueProblem(); | |
| return this->i < rhs.i; | |
| } | |
| }; | |
| } | |
| %exception SubClassCThrower::operator== { | |
| try | |
| { | |
| $action | |
| } | |
| catch(const ZeroValueProblem&) | |
| { | |
| PyErr_SetString(PyExc_ValueError, "Zero not liked in operator=="); | |
| SWIG_fail; | |
| } | |
| } | |
| // Overloaded operators and custom exceptions | |
| %inline { | |
| class SubClassCThrower : public BaseClass { | |
| public: | |
| SubClassCThrower (int i_) : BaseClass(i_) {} | |
| ~SubClassCThrower () {} | |
| bool operator== (const SubClassCThrower& rhs) const | |
| { | |
| if (rhs.i == 0 || i == 0) | |
| throw ZeroValueProblem(); | |
| return rhs.i == i; | |
| } | |
| bool operator== (const SubClassA& rhs) const | |
| { return rhs.i == i; } | |
| }; | |
| } |