diff DEPENDENCIES/generic/include/boost/python/detail/signature.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/python/detail/signature.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,106 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// 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 SIGNATURE_DWA20021121_HPP
+#  define SIGNATURE_DWA20021121_HPP
+
+#  include <boost/python/type_id.hpp>
+
+#  include <boost/python/detail/preprocessor.hpp>
+#  include <boost/python/detail/indirect_traits.hpp>
+#  include <boost/python/converter/pytype_function.hpp>
+
+#  include <boost/preprocessor/iterate.hpp>
+#  include <boost/preprocessor/iteration/local.hpp>
+
+#  include <boost/mpl/at.hpp>
+#  include <boost/mpl/size.hpp>
+
+namespace boost { namespace python { namespace detail { 
+
+struct signature_element
+{
+    char const* basename;
+    converter::pytype_function pytype_f;
+    bool lvalue;
+};
+
+struct py_func_sig_info
+{
+    signature_element const *signature;
+    signature_element const *ret;
+};
+
+template <unsigned> struct signature_arity;
+
+#  define BOOST_PP_ITERATION_PARAMS_1                                            \
+        (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/signature.hpp>))
+#  include BOOST_PP_ITERATE()
+
+// A metafunction returning the base class used for
+//
+//   signature<class F, class CallPolicies, class Sig>.
+//
+template <class Sig>
+struct signature_base_select
+{
+    enum { arity = mpl::size<Sig>::value - 1 };
+    typedef typename signature_arity<arity>::template impl<Sig> type;
+};
+
+template <class Sig>
+struct signature
+    : signature_base_select<Sig>::type
+{
+};
+
+}}} // namespace boost::python::detail
+
+# endif // SIGNATURE_DWA20021121_HPP
+
+#else
+
+# define N BOOST_PP_ITERATION()
+
+template <>
+struct signature_arity<N>
+{
+    template <class Sig>
+    struct impl
+    {
+        static signature_element const* elements()
+        {
+            static signature_element const result[N+2] = {
+                
+#ifndef BOOST_PYTHON_NO_PY_SIGNATURES
+# define BOOST_PP_LOCAL_MACRO(i)                                                            \
+                {                                                                           \
+                  type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name()           \
+                  , &converter::expected_pytype_for_arg<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::get_pytype   \
+                  , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \
+                },
+#else
+# define BOOST_PP_LOCAL_MACRO(i)                                                            \
+                {                                                                           \
+                  type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name()           \
+                  , 0 \
+                  , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \
+                },
+#endif
+                
+# define BOOST_PP_LOCAL_LIMITS (0, N)
+# include BOOST_PP_LOCAL_ITERATE()
+                {0,0,0}
+            };
+            return result;
+        }
+    };
+};
+
+#endif // BOOST_PP_IS_ITERATING 
+
+