diff options
Diffstat (limited to 'boost/python/arg_from_python.hpp')
-rw-r--r-- | boost/python/arg_from_python.hpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/boost/python/arg_from_python.hpp b/boost/python/arg_from_python.hpp new file mode 100644 index 0000000000..05611edbbd --- /dev/null +++ b/boost/python/arg_from_python.hpp @@ -0,0 +1,76 @@ +// 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 |