mirror of
https://github.com/boostorg/python.git
synced 2026-01-23 05:42:30 +00:00
Fix tru64cxx problems, remove operator*/-> from object
[SVN r14173]
This commit is contained in:
@@ -32,23 +32,14 @@ namespace api
|
||||
typedef proxy<const_item_policies> const_object_item;
|
||||
typedef proxy<item_policies> 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 <class T, class U>
|
||||
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 <class T>
|
||||
# if BOOST_MSVC != 1300
|
||||
typename dependent<const_object_item,T>::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 <class T>
|
||||
# if BOOST_MSVC != 1300
|
||||
typename dependent<object_item,T>::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<detail::borrowed<PyObject> >*);
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <class T>
|
||||
inline const_object_item
|
||||
object::operator[](T const& key) const
|
||||
{
|
||||
return (*this)[object(key)];
|
||||
}
|
||||
|
||||
template <class T>
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -10,11 +10,12 @@
|
||||
|
||||
namespace boost { namespace python { namespace api {
|
||||
|
||||
# define BOOST_PYTHON_COMPARE_OP(op, opid) \
|
||||
template <class L, class R> \
|
||||
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 <class L, class R> \
|
||||
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)
|
||||
|
||||
@@ -10,91 +10,91 @@ template<class A0>
|
||||
object
|
||||
operator()(A0 const&a0)const
|
||||
{
|
||||
return call<object>(&**this,a0);
|
||||
return call<object>(this->ptr().get(),a0);
|
||||
}
|
||||
template<class A0,class A1>
|
||||
object
|
||||
operator()(A0 const&a0,A1 const&a1)const
|
||||
{
|
||||
return call<object>(&**this,a0,a1);
|
||||
return call<object>(this->ptr().get(),a0,a1);
|
||||
}
|
||||
template<class A0,class A1,class A2>
|
||||
object
|
||||
operator()(A0 const&a0,A1 const&a1,A2 const&a2)const
|
||||
{
|
||||
return call<object>(&**this,a0,a1,a2);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3>
|
||||
object
|
||||
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3)const
|
||||
{
|
||||
return call<object>(&**this,a0,a1,a2,a3);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4>
|
||||
object
|
||||
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4)const
|
||||
{
|
||||
return call<object>(&**this,a0,a1,a2,a3,a4);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5>
|
||||
object
|
||||
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5)const
|
||||
{
|
||||
return call<object>(&**this,a0,a1,a2,a3,a4,a5);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
|
||||
}
|
||||
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13,class A14>
|
||||
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<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
|
||||
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user