| /* 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; } |
| }; |
| } |