Server IP : 172.67.216.182 / Your IP : 172.69.166.69 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/boost/boost_1_59_0/boost/python/object/ |
Upload File : |
// 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 PY_FUNCTION_DWA200286_HPP # define PY_FUNCTION_DWA200286_HPP # include <boost/python/detail/signature.hpp> # include <boost/detail/workaround.hpp> # include <boost/mpl/size.hpp> # include <memory> namespace boost { namespace python { namespace objects { // This type is used as a "generalized Python callback", wrapping the // function signature: // // PyObject* (PyObject* args, PyObject* keywords) struct BOOST_PYTHON_DECL py_function_impl_base { virtual ~py_function_impl_base(); virtual PyObject* operator()(PyObject*, PyObject*) = 0; virtual unsigned min_arity() const = 0; virtual unsigned max_arity() const; virtual python::detail::py_func_sig_info signature() const = 0; }; template <class Caller> struct caller_py_function_impl : py_function_impl_base { caller_py_function_impl(Caller const& caller) : m_caller(caller) {} PyObject* operator()(PyObject* args, PyObject* kw) { return m_caller(args, kw); } virtual unsigned min_arity() const { return m_caller.min_arity(); } virtual python::detail::py_func_sig_info signature() const { return m_caller.signature(); } private: Caller m_caller; }; template <class Caller, class Sig> struct signature_py_function_impl : py_function_impl_base { signature_py_function_impl(Caller const& caller) : m_caller(caller) {} PyObject* operator()(PyObject* args, PyObject* kw) { return m_caller(args, kw); } virtual unsigned min_arity() const { return mpl::size<Sig>::value - 1; } virtual python::detail::py_func_sig_info signature() const { python::detail::signature_element const* sig = python::detail::signature<Sig>::elements(); python::detail::py_func_sig_info res = {sig, sig}; return res; } private: Caller m_caller; }; template <class Caller, class Sig> struct full_py_function_impl : py_function_impl_base { full_py_function_impl(Caller const& caller, unsigned min_arity, unsigned max_arity) : m_caller(caller) , m_min_arity(min_arity) , m_max_arity(max_arity > min_arity ? max_arity : min_arity) {} PyObject* operator()(PyObject* args, PyObject* kw) { return m_caller(args, kw); } virtual unsigned min_arity() const { return m_min_arity; } virtual unsigned max_arity() const { return m_max_arity; } virtual python::detail::py_func_sig_info signature() const { python::detail::signature_element const* sig = python::detail::signature<Sig>::elements(); python::detail::py_func_sig_info res = {sig, sig}; return res; } private: Caller m_caller; unsigned m_min_arity; unsigned m_max_arity; }; struct py_function { template <class Caller> py_function(Caller const& caller) : m_impl(new caller_py_function_impl<Caller>(caller)) {} template <class Caller, class Sig> py_function(Caller const& caller, Sig) : m_impl(new signature_py_function_impl<Caller, Sig>(caller)) {} template <class Caller, class Sig> py_function(Caller const& caller, Sig, int min_arity, int max_arity = 0) : m_impl(new full_py_function_impl<Caller, Sig>(caller, min_arity, max_arity)) {} py_function(py_function const& rhs) : m_impl(rhs.m_impl) {} PyObject* operator()(PyObject* args, PyObject* kw) const { return (*m_impl)(args, kw); } unsigned min_arity() const { return m_impl->min_arity(); } unsigned max_arity() const { return m_impl->max_arity(); } python::detail::signature_element const* signature() const { return m_impl->signature().signature; } python::detail::signature_element const& get_return_type() const { return *m_impl->signature().ret; } private: mutable std::auto_ptr<py_function_impl_base> m_impl; }; }}} // namespace boost::python::objects #endif // PY_FUNCTION_DWA200286_HPP