Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef ARG_FROM_PYTHON_DWA2002128_HPP Chris@16: # define ARG_FROM_PYTHON_DWA2002128_HPP Chris@16: Chris@16: # include Chris@16: # include Chris@16: # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ Chris@16: || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) Chris@16: # include Chris@16: #endif Chris@16: Chris@16: namespace boost { namespace python { Chris@16: Chris@16: template Chris@16: struct arg_from_python Chris@16: : converter::select_arg_from_python< Chris@16: # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ Chris@16: || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) Chris@16: typename boost::remove_cv::type Chris@16: # else Chris@16: T Chris@16: # endif Chris@16: >::type Chris@16: { Chris@16: typedef typename converter::select_arg_from_python< Chris@16: # if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ Chris@16: || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) Chris@16: typename boost::remove_cv::type Chris@16: # else Chris@16: T Chris@16: # endif Chris@16: >::type base; Chris@16: Chris@16: arg_from_python(PyObject*); Chris@16: }; Chris@16: Chris@16: // specialization for PyObject* Chris@16: template <> Chris@16: struct arg_from_python Chris@16: { Chris@16: typedef PyObject* result_type; Chris@16: Chris@16: arg_from_python(PyObject* p) : m_source(p) {} Chris@16: bool convertible() const { return true; } Chris@16: PyObject* operator()() const { return m_source; } Chris@16: private: Chris@16: PyObject* m_source; Chris@16: }; Chris@16: Chris@16: template <> Chris@16: struct arg_from_python Chris@16: { Chris@16: typedef PyObject* const& result_type; Chris@16: Chris@16: arg_from_python(PyObject* p) : m_source(p) {} Chris@16: bool convertible() const { return true; } Chris@16: PyObject*const& operator()() const { return m_source; } Chris@16: private: Chris@16: PyObject* m_source; Chris@16: }; Chris@16: Chris@16: // Chris@16: // implementations Chris@16: // Chris@16: template Chris@16: inline arg_from_python::arg_from_python(PyObject* source) Chris@16: : base(source) Chris@16: { Chris@16: } Chris@16: Chris@16: }} // namespace boost::python Chris@16: Chris@16: #endif // ARG_FROM_PYTHON_DWA2002128_HPP