// Copyright David Abrahams 2002. | |
// Distributed under the Boost Software License, Version 1.0. (See | |
// accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef OBJECT_PROTOCOL_DWA2002615_HPP | |
# define OBJECT_PROTOCOL_DWA2002615_HPP | |
# include <boost/python/detail/prefix.hpp> | |
# include <boost/python/object_protocol_core.hpp> | |
# include <boost/python/object_core.hpp> | |
# include <boost/detail/workaround.hpp> | |
namespace boost { namespace python { namespace api { | |
# if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) | |
// attempt to use SFINAE to prevent functions accepting T const& from | |
// coming up as ambiguous with the one taking a char const* when a | |
// string literal is passed | |
# define BOOST_PYTHON_NO_ARRAY_ARG(T) , T (*)() = 0 | |
# else | |
# define BOOST_PYTHON_NO_ARRAY_ARG(T) | |
# endif | |
template <class Target, class Key> | |
object getattr(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
return getattr(object(target), object(key)); | |
} | |
template <class Target, class Key, class Default> | |
object getattr(Target const& target, Key const& key, Default const& default_ BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
return getattr(object(target), object(key), object(default_)); | |
} | |
template <class Key, class Value> | |
void setattr(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
setattr(target, object(key), object(value)); | |
} | |
template <class Key> | |
void delattr(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
delattr(target, object(key)); | |
} | |
template <class Target, class Key> | |
object getitem(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
return getitem(object(target), object(key)); | |
} | |
template <class Key, class Value> | |
void setitem(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
setitem(target, object(key), object(value)); | |
} | |
template <class Key> | |
void delitem(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) | |
{ | |
delitem(target, object(key)); | |
} | |
template <class Target, class Begin, class End> | |
object getslice(Target const& target, Begin const& begin, End const& end) | |
{ | |
return getslice(object(target), object(begin), object(end)); | |
} | |
template <class Begin, class End, class Value> | |
void setslice(object const& target, Begin const& begin, End const& end, Value const& value) | |
{ | |
setslice(target, object(begin), object(end), object(value)); | |
} | |
template <class Begin, class End> | |
void delslice(object const& target, Begin const& begin, End const& end) | |
{ | |
delslice(target, object(begin), object(end)); | |
} | |
}}} // namespace boost::python::api | |
#endif // OBJECT_PROTOCOL_DWA2002615_HPP |