123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*==============================================================================
- Copyright (c) 2001-2010 Joel de Guzman
- Copyright (c) 2010 Thomas Heller
- 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 BOOST_PHOENIX_STATEMENT_DO_WHILE_HPP
- #define BOOST_PHOENIX_STATEMENT_DO_WHILE_HPP
- #include <boost/phoenix/core/limits.hpp>
- #include <boost/phoenix/core/call.hpp>
- #include <boost/phoenix/core/expression.hpp>
- #include <boost/phoenix/core/meta_grammar.hpp>
- BOOST_PHOENIX_DEFINE_EXPRESSION(
- (boost)(phoenix)(do_while)
- , (meta_grammar) // Cond
- (meta_grammar) // Do
- )
- namespace boost { namespace phoenix
- {
- struct do_while_eval
- {
- typedef void result_type;
- template <typename Cond, typename Do, typename Context>
- result_type
- operator()(Cond const& cond, Do const& do_it, Context const & ctx) const
- {
- do
- boost::phoenix::eval(do_it, ctx);
- while (boost::phoenix::eval(cond, ctx));
- }
- };
-
- template <typename Dummy>
- struct default_actions::when<rule::do_while, Dummy>
- : call<do_while_eval, Dummy>
- {};
- template <typename Do>
- struct do_while_gen
- {
- do_while_gen(Do const& do_it)
- : do_(do_it) {}
- template <typename Cond>
- typename expression::do_while<Cond, Do>::type const
- while_(Cond const& cond) const
- {
- return expression::do_while<Cond, Do>::make(cond, do_);
- }
- Do const& do_;
- };
- struct do_gen
- {
- template <typename Do>
- do_while_gen<Do> const
- operator[](Do const& do_) const
- {
- return do_while_gen<Do>(do_);
- }
- };
- #ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
- do_gen const do_ = {};
- #endif
- }}
- #endif
|