From 8aba4862951ac4533bca2302019b5aec9cde1880 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Wed, 19 Jun 2002 02:12:14 +0000 Subject: [PATCH] Fix tru64cxx problems, remove operator*/-> from object [SVN r14173] --- include/boost/python/object_core.hpp | 50 +++++++------------ include/boost/python/object_items.hpp | 16 ++++++ include/boost/python/object_operators.hpp | 11 ++-- .../boost/python/preprocessed/object_call.hpp | 30 +++++------ src/object_operators.cpp | 4 +- src/object_protocol.cpp | 8 +-- 6 files changed, 60 insertions(+), 59 deletions(-) diff --git a/include/boost/python/object_core.hpp b/include/boost/python/object_core.hpp index e243b1ee..f3aa3907 100755 --- a/include/boost/python/object_core.hpp +++ b/include/boost/python/object_core.hpp @@ -32,23 +32,14 @@ namespace api typedef proxy const_object_item; typedef proxy object_item; - // A way to turn a conrete type T into a type dependent on U. This - // keeps conforming compilers from complaining about returning an - // incomplete T from a template member function (which must be - // defined in the class body to keep MSVC happy). - template - struct dependent - { - typedef T type; - }; - class object { # if !defined(BOOST_MSVC) || BOOST_MSVC > 1200 typedef object const& self_cref; # else typedef object self_cref; -# endif +# endif + public: # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING // copy constructor without NULL checking, for efficiency @@ -78,7 +69,6 @@ namespace api ) ) { - } // Throw error_already_set() if the handle is null. @@ -116,30 +106,29 @@ namespace api object_item operator[](self_cref); template -# if BOOST_MSVC != 1300 - typename dependent::type -# else const_object_item -# endif operator[](T const& key) const +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 + ; +# else { return (*this)[object(key)]; } +# endif template -# if BOOST_MSVC != 1300 - typename dependent::type -# else object_item -# endif operator[](T const& key) +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 + ; +# else { return (*this)[object(key)]; } +# endif // Underlying object access - PyObject* operator->() const; - PyObject& operator*() const; + handle<> const& ptr() const; public: // implementation detail -- for internal use only object(null_ok >*); @@ -218,7 +207,7 @@ inline object::object(handle<> const& x) # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING // copy constructor without NULL checking, for efficiency inline object::object(object const& rhs) - : m_ptr(python::allow_null(python::borrowed(&*rhs))) + : m_ptr(python::allow_null(python::borrowed(rhs.m_ptr.get()))) {} # endif @@ -238,24 +227,19 @@ inline object::object(object::new_pyobject_reference* p) : m_ptr((PyObject*)p) {} -inline PyObject* object::operator->() const +inline handle<> const& object::ptr() const { - return m_ptr.operator->(); -} - -inline PyObject& object::operator*() const -{ - return *m_ptr; + return m_ptr; } inline object::operator object::bool_type() const { - return PyObject_IsTrue(&**this) ? &object::m_ptr : 0; + return PyObject_IsTrue(m_ptr.get()) ? &object::m_ptr : 0; } inline bool object::operator!() const { - return !PyObject_IsTrue(&**this); + return !PyObject_IsTrue(m_ptr.get()); } // @@ -302,7 +286,7 @@ namespace converter inline PyObject* get_managed_object(object const& x) { - return &*x; + return x.ptr().get(); } } diff --git a/include/boost/python/object_items.hpp b/include/boost/python/object_items.hpp index a294dff6..6c69ad58 100755 --- a/include/boost/python/object_items.hpp +++ b/include/boost/python/object_items.hpp @@ -35,6 +35,22 @@ inline const_object_item object::operator[](object::self_cref key) const return const_object_item(*this, key); } +# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 +template +inline const_object_item +object::operator[](T const& key) const +{ + return (*this)[object(key)]; +} + +template +inline object_item +object::operator[](T const& key) +{ + return (*this)[object(key)]; +} +# endif + inline object const_item_policies::get(object const& target, object const& key) { diff --git a/include/boost/python/object_operators.hpp b/include/boost/python/object_operators.hpp index c339c906..b911905c 100644 --- a/include/boost/python/object_operators.hpp +++ b/include/boost/python/object_operators.hpp @@ -10,11 +10,12 @@ namespace boost { namespace python { namespace api { -# define BOOST_PYTHON_COMPARE_OP(op, opid) \ -template \ -bool operator op(L const& l, R const& r) \ -{ \ - return PyObject_RichCompareBool(&*object(l), &*object(r), opid); \ +# define BOOST_PYTHON_COMPARE_OP(op, opid) \ +template \ +bool operator op(L const& l, R const& r) \ +{ \ + return PyObject_RichCompareBool( \ + object(l).ptr().get(), object(r).ptr().get(), opid); \ } BOOST_PYTHON_COMPARE_OP(>, Py_GT) BOOST_PYTHON_COMPARE_OP(>=, Py_GE) diff --git a/include/boost/python/preprocessed/object_call.hpp b/include/boost/python/preprocessed/object_call.hpp index e3d605cb..7ac34373 100755 --- a/include/boost/python/preprocessed/object_call.hpp +++ b/include/boost/python/preprocessed/object_call.hpp @@ -10,91 +10,91 @@ template object operator()(A0 const&a0)const { - return call(&**this,a0); + return call(this->ptr().get(),a0); } template object operator()(A0 const&a0,A1 const&a1)const { - return call(&**this,a0,a1); + return call(this->ptr().get(),a0,a1); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2)const { - return call(&**this,a0,a1,a2); + return call(this->ptr().get(),a0,a1,a2); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3)const { - return call(&**this,a0,a1,a2,a3); + return call(this->ptr().get(),a0,a1,a2,a3); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4)const { - return call(&**this,a0,a1,a2,a3,a4); + return call(this->ptr().get(),a0,a1,a2,a3,a4); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5)const { - return call(&**this,a0,a1,a2,a3,a4,a5); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13); } template object operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,A14 const&a14)const { - return call(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); + return call(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); } diff --git a/src/object_operators.cpp b/src/object_operators.cpp index ed824ab6..0aa0f1b7 100644 --- a/src/object_operators.cpp +++ b/src/object_operators.cpp @@ -13,7 +13,7 @@ BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \ { \ return object( \ (object::new_pyobject_reference*) \ - PyNumber_##name(&*l, &*r)); \ + PyNumber_##name(l.ptr().get(), r.ptr().get())); \ } BOOST_PYTHON_BINARY_OPERATOR(+, Add) @@ -33,7 +33,7 @@ BOOST_PYTHON_DECL object& operator op##=(object& l, object const& r) \ { \ return l = object( \ (object::new_pyobject_reference*) \ - PyNumber_InPlace##name(&*l, &*r)); \ + PyNumber_InPlace##name(l.ptr().get(), r.ptr().get())); \ } BOOST_PYTHON_INPLACE_OPERATOR(+, Add) diff --git a/src/object_protocol.cpp b/src/object_protocol.cpp index 8f2548ab..3e9baa35 100755 --- a/src/object_protocol.cpp +++ b/src/object_protocol.cpp @@ -12,23 +12,23 @@ namespace boost { namespace python { namespace api { BOOST_PYTHON_DECL object getattr(object const& target, object const& key) { - return object((object::new_pyobject_reference*)PyObject_GetAttr(&*target, &*key)); + return object((object::new_pyobject_reference*)PyObject_GetAttr(target.ptr().get(), key.ptr().get())); } BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value) { - if (PyObject_SetAttr(&*target, &*key, &*value) == -1) + if (PyObject_SetAttr(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1) throw_error_already_set(); } BOOST_PYTHON_DECL object getitem(object const& target, object const& key) { - return object((object::new_pyobject_reference*)PyObject_GetItem(&*target, &*key)); + return object((object::new_pyobject_reference*)PyObject_GetItem(target.ptr().get(), key.ptr().get())); } BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value) { - if (PyObject_SetItem(&*target, &*key, &*value) == -1) + if (PyObject_SetItem(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1) throw_error_already_set(); }