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