77 lines
2.0 KiB
C++
77 lines
2.0 KiB
C++
|
// 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
|