]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/python/include/boost/python/arg_from_python.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / python / include / boost / python / arg_from_python.hpp
1 // Copyright David Abrahams 2002.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 #ifndef ARG_FROM_PYTHON_DWA2002128_HPP
6 # define ARG_FROM_PYTHON_DWA2002128_HPP
7
8 # include <boost/python/detail/prefix.hpp>
9 # include <boost/python/converter/arg_from_python.hpp>
10 # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
11 || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
12 # include <boost/type_traits/remove_cv.hpp>
13 #endif
14
15 namespace boost { namespace python {
16
17 template <class T>
18 struct arg_from_python
19 : converter::select_arg_from_python<
20 # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
21 || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
22 typename boost::remove_cv<T>::type
23 # else
24 T
25 # endif
26 >::type
27 {
28 typedef typename converter::select_arg_from_python<
29 # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
30 || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
31 typename boost::remove_cv<T>::type
32 # else
33 T
34 # endif
35 >::type base;
36
37 arg_from_python(PyObject*);
38 };
39
40 // specialization for PyObject*
41 template <>
42 struct arg_from_python<PyObject*>
43 {
44 typedef PyObject* result_type;
45
46 arg_from_python(PyObject* p) : m_source(p) {}
47 bool convertible() const { return true; }
48 PyObject* operator()() const { return m_source; }
49 private:
50 PyObject* m_source;
51 };
52
53 template <>
54 struct arg_from_python<PyObject* const&>
55 {
56 typedef PyObject* const& result_type;
57
58 arg_from_python(PyObject* p) : m_source(p) {}
59 bool convertible() const { return true; }
60 PyObject*const& operator()() const { return m_source; }
61 private:
62 PyObject* m_source;
63 };
64
65 //
66 // implementations
67 //
68 template <class T>
69 inline arg_from_python<T>::arg_from_python(PyObject* source)
70 : base(source)
71 {
72 }
73
74 }} // namespace boost::python
75
76 #endif // ARG_FROM_PYTHON_DWA2002128_HPP