diff --git a/doc/v2/object.html b/doc/v2/object.html index 10be8757..a8913c70 100644 --- a/doc/v2/object.html +++ b/doc/v2/object.html @@ -854,12 +854,12 @@ void del(proxy<T> const& x);
 
-template<class L,class R> bool operator>(L const&l,R const&r);
-template<class L,class R> bool operator>=(L const&l,R const&r);
-template<class L,class R> bool operator<(L const&l,R const&r);
-template<class L,class R> bool operator<=(L const&l,R const&r);
-template<class L,class R> bool operator==(L const&l,R const&r);
-template<class L,class R> bool operator!=(L const&l,R const&r);
+template<class L,class R> object operator>(L const&l,R const&r);
+template<class L,class R> object operator>=(L const&l,R const&r);
+template<class L,class R> object operator<(L const&l,R const&r);
+template<class L,class R> object operator<=(L const&l,R const&r);
+template<class L,class R> object operator==(L const&l,R const&r);
+template<class L,class R> object operator!=(L const&l,R const&r);
 
diff --git a/include/boost/python/object_operators.hpp b/include/boost/python/object_operators.hpp index 0515309b..f27f88f8 100644 --- a/include/boost/python/object_operators.hpp +++ b/include/boost/python/object_operators.hpp @@ -73,17 +73,11 @@ object_operators::operator!() const # define BOOST_PYTHON_COMPARE_OP(op, opid) \ template \ -BOOST_PYTHON_BINARY_RETURN(bool) operator op(L const& l, R const& r) \ +BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r) \ { \ - return PyObject_RichCompareBool( \ + return PyObject_RichCompare( \ object(l).ptr(), object(r).ptr(), opid); \ } -BOOST_PYTHON_COMPARE_OP(>, Py_GT) -BOOST_PYTHON_COMPARE_OP(>=, Py_GE) -BOOST_PYTHON_COMPARE_OP(<, Py_LT) -BOOST_PYTHON_COMPARE_OP(<=, Py_LE) -BOOST_PYTHON_COMPARE_OP(==, Py_EQ) -BOOST_PYTHON_COMPARE_OP(!=, Py_NE) # undef BOOST_PYTHON_COMPARE_OP # define BOOST_PYTHON_BINARY_OPERATOR(op) \ @@ -93,6 +87,12 @@ BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r) \ { \ return object(l) op object(r); \ } +BOOST_PYTHON_BINARY_OPERATOR(>) +BOOST_PYTHON_BINARY_OPERATOR(>=) +BOOST_PYTHON_BINARY_OPERATOR(<) +BOOST_PYTHON_BINARY_OPERATOR(<=) +BOOST_PYTHON_BINARY_OPERATOR(==) +BOOST_PYTHON_BINARY_OPERATOR(!=) BOOST_PYTHON_BINARY_OPERATOR(+) BOOST_PYTHON_BINARY_OPERATOR(-) BOOST_PYTHON_BINARY_OPERATOR(*) diff --git a/src/object_operators.cpp b/src/object_operators.cpp index 5d8ffd6a..b6f1c5fb 100644 --- a/src/object_operators.cpp +++ b/src/object_operators.cpp @@ -8,6 +8,24 @@ namespace boost { namespace python { namespace api { +# define BOOST_PYTHON_COMPARE_OP(op, opid) \ +BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \ +{ \ + return object( \ + detail::new_reference( \ + PyObject_RichCompare( \ + l.ptr(), r.ptr(), opid)) \ + ); \ +} +BOOST_PYTHON_COMPARE_OP(>, Py_GT) +BOOST_PYTHON_COMPARE_OP(>=, Py_GE) +BOOST_PYTHON_COMPARE_OP(<, Py_LT) +BOOST_PYTHON_COMPARE_OP(<=, Py_LE) +BOOST_PYTHON_COMPARE_OP(==, Py_EQ) +BOOST_PYTHON_COMPARE_OP(!=, Py_NE) +# undef BOOST_PYTHON_COMPARE_OP + + #define BOOST_PYTHON_BINARY_OPERATOR(op, name) \ BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \ { \