Chris@16
|
1 // Copyright David Abrahams 2002.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
3 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5 #ifndef OBJECT_PROTOCOL_DWA2002615_HPP
|
Chris@16
|
6 # define OBJECT_PROTOCOL_DWA2002615_HPP
|
Chris@16
|
7
|
Chris@16
|
8 # include <boost/python/detail/prefix.hpp>
|
Chris@16
|
9
|
Chris@16
|
10 # include <boost/python/object_protocol_core.hpp>
|
Chris@16
|
11 # include <boost/python/object_core.hpp>
|
Chris@16
|
12
|
Chris@16
|
13 # include <boost/detail/workaround.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 namespace boost { namespace python { namespace api {
|
Chris@16
|
16
|
Chris@16
|
17 # if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
|
Chris@16
|
18 // attempt to use SFINAE to prevent functions accepting T const& from
|
Chris@16
|
19 // coming up as ambiguous with the one taking a char const* when a
|
Chris@16
|
20 // string literal is passed
|
Chris@16
|
21 # define BOOST_PYTHON_NO_ARRAY_ARG(T) , T (*)() = 0
|
Chris@16
|
22 # else
|
Chris@16
|
23 # define BOOST_PYTHON_NO_ARRAY_ARG(T)
|
Chris@16
|
24 # endif
|
Chris@16
|
25
|
Chris@16
|
26 template <class Target, class Key>
|
Chris@16
|
27 object getattr(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
28 {
|
Chris@16
|
29 return getattr(object(target), object(key));
|
Chris@16
|
30 }
|
Chris@16
|
31
|
Chris@16
|
32 template <class Target, class Key, class Default>
|
Chris@16
|
33 object getattr(Target const& target, Key const& key, Default const& default_ BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
34 {
|
Chris@16
|
35 return getattr(object(target), object(key), object(default_));
|
Chris@16
|
36 }
|
Chris@16
|
37
|
Chris@16
|
38
|
Chris@16
|
39 template <class Key, class Value>
|
Chris@16
|
40 void setattr(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
41 {
|
Chris@16
|
42 setattr(target, object(key), object(value));
|
Chris@16
|
43 }
|
Chris@16
|
44
|
Chris@16
|
45 template <class Key>
|
Chris@16
|
46 void delattr(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
47 {
|
Chris@16
|
48 delattr(target, object(key));
|
Chris@16
|
49 }
|
Chris@16
|
50
|
Chris@16
|
51 template <class Target, class Key>
|
Chris@16
|
52 object getitem(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
53 {
|
Chris@16
|
54 return getitem(object(target), object(key));
|
Chris@16
|
55 }
|
Chris@16
|
56
|
Chris@16
|
57
|
Chris@16
|
58 template <class Key, class Value>
|
Chris@16
|
59 void setitem(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
60 {
|
Chris@16
|
61 setitem(target, object(key), object(value));
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 template <class Key>
|
Chris@16
|
65 void delitem(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key))
|
Chris@16
|
66 {
|
Chris@16
|
67 delitem(target, object(key));
|
Chris@16
|
68 }
|
Chris@16
|
69
|
Chris@16
|
70 template <class Target, class Begin, class End>
|
Chris@16
|
71 object getslice(Target const& target, Begin const& begin, End const& end)
|
Chris@16
|
72 {
|
Chris@16
|
73 return getslice(object(target), object(begin), object(end));
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76 template <class Begin, class End, class Value>
|
Chris@16
|
77 void setslice(object const& target, Begin const& begin, End const& end, Value const& value)
|
Chris@16
|
78 {
|
Chris@16
|
79 setslice(target, object(begin), object(end), object(value));
|
Chris@16
|
80 }
|
Chris@16
|
81
|
Chris@16
|
82 template <class Begin, class End>
|
Chris@16
|
83 void delslice(object const& target, Begin const& begin, End const& end)
|
Chris@16
|
84 {
|
Chris@16
|
85 delslice(target, object(begin), object(end));
|
Chris@16
|
86 }
|
Chris@16
|
87
|
Chris@16
|
88 }}} // namespace boost::python::api
|
Chris@16
|
89
|
Chris@16
|
90 #endif // OBJECT_PROTOCOL_DWA2002615_HPP
|