Server IP : 104.21.38.3 / Your IP : 162.158.106.108 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/detail/ |
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 DEF_HELPER_DWA200287_HPP # define DEF_HELPER_DWA200287_HPP # include <boost/python/args.hpp> # include <boost/type_traits/ice.hpp> # include <boost/type_traits/same_traits.hpp> # include <boost/python/detail/indirect_traits.hpp> # include <boost/mpl/not.hpp> # include <boost/mpl/and.hpp> # include <boost/mpl/or.hpp> # include <boost/type_traits/add_reference.hpp> # include <boost/mpl/lambda.hpp> # include <boost/mpl/apply.hpp> # include <boost/tuple/tuple.hpp> # include <boost/python/detail/not_specified.hpp> # include <boost/python/detail/def_helper_fwd.hpp> namespace boost { namespace python { struct default_call_policies; namespace detail { // tuple_extract<Tuple,Predicate>::extract(t) returns the first // element of a Tuple whose type E satisfies the given Predicate // applied to add_reference<E>. The Predicate must be an MPL // metafunction class. template <class Tuple, class Predicate> struct tuple_extract; // Implementation class for when the tuple's head type does not // satisfy the Predicate template <bool matched> struct tuple_extract_impl { template <class Tuple, class Predicate> struct apply { typedef typename Tuple::head_type result_type; static typename Tuple::head_type extract(Tuple const& x) { return x.get_head(); } }; }; // Implementation specialization for when the tuple's head type // satisfies the predicate template <> struct tuple_extract_impl<false> { template <class Tuple, class Predicate> struct apply { // recursive application of tuple_extract on the tail of the tuple typedef tuple_extract<typename Tuple::tail_type, Predicate> next; typedef typename next::result_type result_type; static result_type extract(Tuple const& x) { return next::extract(x.get_tail()); } }; }; // A metafunction which selects a version of tuple_extract_impl to // use for the implementation of tuple_extract template <class Tuple, class Predicate> struct tuple_extract_base_select { typedef typename Tuple::head_type head_type; typedef typename mpl::apply1<Predicate, typename add_reference<head_type>::type>::type match_t; BOOST_STATIC_CONSTANT(bool, match = match_t::value); typedef typename tuple_extract_impl<match>::template apply<Tuple,Predicate> type; }; template <class Tuple, class Predicate> struct tuple_extract : tuple_extract_base_select< Tuple , typename mpl::lambda<Predicate>::type >::type { }; // // Specialized extractors for the docstring, keywords, CallPolicies, // and default implementation of virtual functions // template <class Tuple> struct doc_extract : tuple_extract< Tuple , mpl::not_< mpl::or_< indirect_traits::is_reference_to_class<mpl::_1> , indirect_traits::is_reference_to_member_function_pointer<mpl::_1 > > > > { }; template <class Tuple> struct keyword_extract : tuple_extract<Tuple, is_reference_to_keywords<mpl::_1 > > { }; template <class Tuple> struct policy_extract : tuple_extract< Tuple , mpl::and_< mpl::not_<is_same<not_specified const&,mpl::_1> > , indirect_traits::is_reference_to_class<mpl::_1 > , mpl::not_<is_reference_to_keywords<mpl::_1 > > > > { }; template <class Tuple> struct default_implementation_extract : tuple_extract< Tuple , indirect_traits::is_reference_to_member_function_pointer<mpl::_1 > > { }; // // A helper class for decoding the optional arguments to def() // invocations, which can be supplied in any order and are // discriminated by their type properties. The template parameters // are expected to be the types of the actual (optional) arguments // passed to def(). // template <class T1, class T2, class T3, class T4> struct def_helper { // A tuple type which begins with references to the supplied // arguments and ends with actual representatives of the default // types. typedef boost::tuples::tuple< T1 const& , T2 const& , T3 const& , T4 const& , default_call_policies , detail::keywords<0> , char const* , void(not_specified::*)() // A function pointer type which is never an // appropriate default implementation > all_t; // Constructors; these initialize an member of the tuple type // shown above. def_helper(T1 const& a1) : m_all(a1,m_nil,m_nil,m_nil) {} def_helper(T1 const& a1, T2 const& a2) : m_all(a1,a2,m_nil,m_nil) {} def_helper(T1 const& a1, T2 const& a2, T3 const& a3) : m_all(a1,a2,a3,m_nil) {} def_helper(T1 const& a1, T2 const& a2, T3 const& a3, T4 const& a4) : m_all(a1,a2,a3,a4) {} private: // types typedef typename default_implementation_extract<all_t>::result_type default_implementation_t; public: // Constants which can be used for static assertions. // Users must not supply a default implementation for non-class // methods. BOOST_STATIC_CONSTANT( bool, has_default_implementation = ( !is_same<default_implementation_t, void(not_specified::*)()>::value)); public: // Extractor functions which pull the appropriate value out // of the tuple char const* doc() const { return doc_extract<all_t>::extract(m_all); } typename keyword_extract<all_t>::result_type keywords() const { return keyword_extract<all_t>::extract(m_all); } typename policy_extract<all_t>::result_type policies() const { return policy_extract<all_t>::extract(m_all); } default_implementation_t default_implementation() const { return default_implementation_extract<all_t>::extract(m_all); } private: // data members all_t m_all; not_specified m_nil; // for filling in not_specified slots }; } }} // namespace boost::python::detail #endif // DEF_HELPER_DWA200287_HPP