diff -r 000000000000 -r e4d67989cc36 ossrv_pub/boost_apis/boost/python/override.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ossrv_pub/boost_apis/boost/python/override.hpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,144 @@ +#if !defined(BOOST_PP_IS_ITERATING) + +// Copyright David Abrahams 2004. 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 OVERRIDE_DWA2004721_HPP +# define OVERRIDE_DWA2004721_HPP + +# include + +# include + +# include +# include + +# include +# include +# include +# include +# include + +# include + +namespace boost { namespace python { + +class override; + +namespace detail +{ + class wrapper_base; + + // The result of calling a method. + class method_result + { + private: + friend class boost::python::override; + explicit method_result(PyObject* x) + : m_obj(x) + {} + + public: + template + operator T() + { + converter::return_from_python converter; + return converter(m_obj.release()); + } + +# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(140050215)) + template + operator T*() + { + converter::return_from_python converter; + return converter(m_obj.release()); + } +# endif + +# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) || BOOST_WORKAROUND(BOOST_INTEL_WIN, >= 900) + // No operator T& +# else + + template + operator T&() const + { + converter::return_from_python converter; + return converter(const_cast&>(m_obj).release()); + } +# endif + + template + T as(type* = 0) + { + converter::return_from_python converter; + return converter(m_obj.release()); + } + + template + T unchecked(type* = 0) + { + return extract(m_obj)(); + } + private: + mutable handle<> m_obj; + }; +} + +class override : public object +{ + private: + friend class detail::wrapper_base; + override(handle<> x) + : object(x) + {} + + public: + detail::method_result + operator()() const + { + detail::method_result x( + PyEval_CallFunction( + this->ptr() + , const_cast("()") + )); + return x; + } + +# define BOOST_PYTHON_fast_arg_to_python_get(z, n, _) \ + , converter::arg_to_python(a##n).get() + +# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, )) +# include BOOST_PP_ITERATE() + +# undef BOOST_PYTHON_fast_arg_to_python_get +}; + +}} // namespace boost::python + +#endif // OVERRIDE_DWA2004721_HPP + +#else +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, override.hpp) +# endif + +# define N BOOST_PP_ITERATION() + +template < + BOOST_PP_ENUM_PARAMS_Z(1, N, class A) + > +detail::method_result +operator()( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a) ) const +{ + detail::method_result x( + PyEval_CallFunction( + this->ptr() + , const_cast("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")") + BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_fast_arg_to_python_get, nil) + )); + return x; +} + +# undef N +#endif