2
0
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:
Dave Abrahams
2002-06-19 02:12:14 +00:00
parent 66f2cd81a8
commit 8aba486295
6 changed files with 60 additions and 59 deletions

View File

@@ -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();
}
}

View File

@@ -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)
{

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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();
}