From fa398734bed9e17b9a797e1fa434d8c082e3fd01 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Tue, 22 Jul 2003 23:53:06 +0000 Subject: [PATCH] initial commit [SVN r19267] --- include/boost/python/detail/signature.hpp | 98 +++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 include/boost/python/detail/signature.hpp diff --git a/include/boost/python/detail/signature.hpp b/include/boost/python/detail/signature.hpp new file mode 100644 index 00000000..354e54dc --- /dev/null +++ b/include/boost/python/detail/signature.hpp @@ -0,0 +1,98 @@ +#if !defined(BOOST_PP_IS_ITERATING) + +// Copyright David Abrahams 2002. Permission to copy, use, +// modify, sell and distribute this software is granted provided this +// copyright notice appears in all copies. This software is provided +// "as is" without express or implied warranty, and with no claim as +// to its suitability for any purpose. + +# ifndef SIGNATURE_DWA20021121_HPP +# define SIGNATURE_DWA20021121_HPP + +# include +# include + +# include +# include +# include +# include +# include +# include +# include +# include + +# include + +# include +# include +# include + +# include +# include +# include + +namespace boost { namespace python { namespace detail { + +struct signature_element +{ + char const* basename; + bool lvalue; +}; + +template struct signature_arity; + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, BOOST_PYTHON_MAX_ARITY + 1, )) +# include BOOST_PP_ITERATE() + +// A metafunction returning the base class used for signature. +template +struct signature_base_select +{ + enum { arity = mpl::size::value - 1 }; + typedef typename signature_arity::template impl type; +}; + +template +struct signature + : signature_base_select::type +{ +}; + +}}} // namespace boost::python::detail + +# endif // SIGNATURE_DWA20021121_HPP + +#else + +# define N BOOST_PP_ITERATION() + +template <> +struct signature_arity +{ + template + struct impl + { + static signature_element const* elements() + { + static signature_element const result[N+2] = { + +# define BOOST_PP_LOCAL_MACRO(i) \ + { \ + type_id::type>().name() \ + , is_reference_to_non_const::type>::value \ + }, + +# define BOOST_PP_LOCAL_LIMITS (0, N) +# include BOOST_PP_LOCAL_ITERATE() + {0,0} + }; + return result; + } + }; +}; + +#endif // BOOST_PP_IS_ITERATING + +