2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-22 05:22:45 +00:00

list implementation

[SVN r14261]
This commit is contained in:
Dave Abrahams
2002-06-29 19:24:11 +00:00
parent d7273dee1c
commit f30fde3a52
23 changed files with 777 additions and 398 deletions

View File

@@ -12,33 +12,33 @@ 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.ptr().get(), key.ptr().get()));
return object(detail::new_reference(PyObject_GetAttr(target.ptr(), key.ptr())));
}
BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value)
{
if (PyObject_SetAttr(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1)
if (PyObject_SetAttr(target.ptr(), key.ptr(), value.ptr()) == -1)
throw_error_already_set();
}
BOOST_PYTHON_DECL void delattr(object const& target, object const& key)
{
if (PyObject_DelAttr(target.ptr().get(), key.ptr().get()) == -1)
if (PyObject_DelAttr(target.ptr(), key.ptr()) == -1)
throw_error_already_set();
}
BOOST_PYTHON_DECL object getattr(object const& target, char const* key)
{
return object(
(object::new_pyobject_reference*)
PyObject_GetAttrString(target.ptr().get(), const_cast<char*>(key))
);
detail::new_reference(
PyObject_GetAttrString(target.ptr(), const_cast<char*>(key))
));
}
BOOST_PYTHON_DECL void setattr(object const& target, char const* key, object const& value)
{
if (PyObject_SetAttrString(
target.ptr().get(), const_cast<char*>(key), value.ptr().get()) == -1
target.ptr(), const_cast<char*>(key), value.ptr()) == -1
)
{
throw_error_already_set();
@@ -48,7 +48,7 @@ BOOST_PYTHON_DECL void setattr(object const& target, char const* key, object con
BOOST_PYTHON_DECL void delattr(object const& target, char const* key)
{
if (PyObject_DelAttrString(
target.ptr().get(), const_cast<char*>(key)) == -1
target.ptr(), const_cast<char*>(key)) == -1
)
{
throw_error_already_set();
@@ -57,18 +57,19 @@ BOOST_PYTHON_DECL void delattr(object const& target, char const* key)
BOOST_PYTHON_DECL object getitem(object const& target, object const& key)
{
return object((object::new_pyobject_reference*)PyObject_GetItem(target.ptr().get(), key.ptr().get()));
return object(detail::new_reference(
PyObject_GetItem(target.ptr(), key.ptr())));
}
BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value)
{
if (PyObject_SetItem(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1)
if (PyObject_SetItem(target.ptr(), key.ptr(), value.ptr()) == -1)
throw_error_already_set();
}
BOOST_PYTHON_DECL void delitem(object const& target, object const& key)
{
if (PyObject_DelItem(target.ptr().get(), key.ptr().get()) == -1)
if (PyObject_DelItem(target.ptr(), key.ptr()) == -1)
throw_error_already_set();
}
@@ -141,14 +142,14 @@ namespace // slicing code copied directly out of the Python implementation
BOOST_PYTHON_DECL object getslice(object const& target, handle<> const& begin, handle<> const& end)
{
return object(
(object::new_pyobject_reference*)
apply_slice(target.ptr().get(), begin.get(), end.get()));
detail::new_reference(
apply_slice(target.ptr(), begin.get(), end.get())));
}
BOOST_PYTHON_DECL void setslice(object const& target, handle<> const& begin, handle<> const& end, object const& value)
{
if (assign_slice(
target.ptr().get(), begin.get(), end.get(), value.ptr().get()) == -1
target.ptr(), begin.get(), end.get(), value.ptr()) == -1
)
{
throw_error_already_set();
@@ -158,7 +159,7 @@ BOOST_PYTHON_DECL void setslice(object const& target, handle<> const& begin, han
BOOST_PYTHON_DECL void delslice(object const& target, handle<> const& begin, handle<> const& end)
{
if (assign_slice(
target.ptr().get(), begin.get(), end.get(), 0) == -1
target.ptr(), begin.get(), end.get(), 0) == -1
)
{
throw_error_already_set();