91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // 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 |