| // 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/type_traits/remove_cv.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 boost::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 boost::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 |