123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #if !defined(BOOST_PROTO_DONT_USE_PREPROCESSED_FILES)
- #include <boost/proto/transform/detail/preprocessed/when.hpp>
- #elif !defined(BOOST_PP_IS_ITERATING)
- #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 2, line: 0, output: "preprocessed/when.hpp")
- #endif
- ///////////////////////////////////////////////////////////////////////////////
- /// \file when.hpp
- /// Definition of when transform.
- //
- // Copyright 2008 Eric Niebler. 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)
- #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 1)
- #endif
- #define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (0, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/detail/when.hpp>))
- #include BOOST_PP_ITERATE()
- #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
- #pragma wave option(output: null)
- #endif
- #else
- #define N BOOST_PP_ITERATION()
- /// \brief A grammar element and a PrimitiveTransform that associates
- /// a transform with the grammar.
- ///
- /// Use <tt>when\<\></tt> to override a grammar's default transform
- /// with a custom transform. It is for used when composing larger
- /// transforms by associating smaller transforms with individual
- /// rules in your grammar, as in the following transform which
- /// counts the number of terminals in an expression.
- ///
- /// \code
- /// // Count the terminals in an expression tree.
- /// // Must be invoked with initial state == mpl::int_<0>().
- /// struct CountLeaves
- /// : or_<
- /// when<terminal<_>, mpl::next<_state>()>
- /// , otherwise<fold<_, _state, CountLeaves> >
- /// >
- /// {};
- /// \endcode
- ///
- /// The <tt>when\<G, R(A0,A1,...)\></tt> form accepts either a
- /// CallableTransform or an ObjectTransform as its second parameter.
- /// <tt>when\<\></tt> uses <tt>is_callable\<R\>::value</tt> to
- /// distinguish between the two, and uses <tt>call\<\></tt> to
- /// evaluate CallableTransforms and <tt>make\<\></tt> to evaluate
- /// ObjectTransforms.
- template<typename Grammar, typename R BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
- struct when<Grammar, R(BOOST_PP_ENUM_PARAMS(N, A))>
- : detail::when_impl<Grammar, R, R(BOOST_PP_ENUM_PARAMS(N, A))>
- {};
- #if N > 0
- /// \brief A grammar element and a PrimitiveTransform that associates
- /// a transform with the grammar.
- ///
- /// Use <tt>when\<\></tt> to override a grammar's default transform
- /// with a custom transform. It is for used when composing larger
- /// transforms by associating smaller transforms with individual
- /// rules in your grammar, as in the following transform which
- /// counts the number of terminals in an expression.
- ///
- /// \code
- /// // Count the terminals in an expression tree.
- /// // Must be invoked with initial state == mpl::int_<0>().
- /// struct CountLeaves
- /// : or_<
- /// when<terminal<_>, mpl::next<_state>()>
- /// , otherwise<fold<_, _state, CountLeaves> >
- /// >
- /// {};
- /// \endcode
- ///
- /// The <tt>when\<G, R(A0,A1,...)\></tt> form accepts either a
- /// CallableTransform or an ObjectTransform as its second parameter.
- /// <tt>when\<\></tt> uses <tt>is_callable\<R\>::value</tt> to
- /// distinguish between the two, and uses <tt>call\<\></tt> to
- /// evaluate CallableTransforms and <tt>make\<\></tt> to evaluate
- /// ObjectTransforms.
- template<typename Grammar, typename R BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)>
- struct when<Grammar, R(BOOST_PP_ENUM_PARAMS(N, A)...)>
- : detail::when_impl<Grammar, R, R(BOOST_PP_ENUM_PARAMS(N, A)...)>
- {};
- #endif
- #undef N
- #endif
|