12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // 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 ARG_FROM_PYTHON_DWA2002128_HPP
- # define ARG_FROM_PYTHON_DWA2002128_HPP
- # include <boost/python/detail/prefix.hpp>
- # include <boost/python/converter/arg_from_python.hpp>
- # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
- || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
- # include <boost/python/detail/type_traits.hpp>
- #endif
- namespace boost { namespace python {
- template <class T>
- struct arg_from_python
- : converter::select_arg_from_python<
- # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
- || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
- typename detail::remove_cv<T>::type
- # else
- T
- # endif
- >::type
- {
- typedef typename converter::select_arg_from_python<
- # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
- || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
- typename detail::remove_cv<T>::type
- # else
- T
- # endif
- >::type base;
-
- arg_from_python(PyObject*);
- };
- // specialization for PyObject*
- template <>
- struct arg_from_python<PyObject*>
- {
- typedef PyObject* result_type;
-
- arg_from_python(PyObject* p) : m_source(p) {}
- bool convertible() const { return true; }
- PyObject* operator()() const { return m_source; }
- private:
- PyObject* m_source;
- };
- template <>
- struct arg_from_python<PyObject* const&>
- {
- typedef PyObject* const& result_type;
-
- arg_from_python(PyObject* p) : m_source(p) {}
- bool convertible() const { return true; }
- PyObject*const& operator()() const { return m_source; }
- private:
- PyObject* m_source;
- };
- //
- // implementations
- //
- template <class T>
- inline arg_from_python<T>::arg_from_python(PyObject* source)
- : base(source)
- {
- }
- }} // namespace boost::python
- #endif // ARG_FROM_PYTHON_DWA2002128_HPP
|