/src/contrib/boost/spirit/home/phoenix/statement/for.hpp
http://pythonocc.googlecode.com/ · C++ Header · 64 lines · 50 code · 8 blank · 6 comment · 1 complexity · 3f8dcbaf31f917277ad963b7d01e75ed MD5 · raw file
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- 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 PHOENIX_STATEMENT_FOR_HPP
- #define PHOENIX_STATEMENT_FOR_HPP
- #include <boost/spirit/home/phoenix/core/composite.hpp>
- #include <boost/spirit/home/phoenix/core/compose.hpp>
- namespace boost { namespace phoenix
- {
- struct for_eval
- {
- template <
- typename Env
- , typename Init, typename Cond, typename Step, typename Do>
- struct result
- {
- typedef void type;
- };
- template <
- typename RT, typename Env
- , typename Init, typename Cond, typename Step, typename Do>
- static void
- eval(
- Env const& env
- , Init& init, Cond& cond, Step& step, Do& do_)
- {
- for (init.eval(env); cond.eval(env); step.eval(env))
- do_.eval(env);
- }
- };
- template <typename Init, typename Cond, typename Step>
- struct for_gen
- {
- for_gen(Init const& init, Cond const& cond, Step const& step)
- : init(init), cond(cond), step(step) {}
- template <typename Do>
- actor<typename as_composite<for_eval, Init, Cond, Step, Do>::type>
- operator[](Do const& do_) const
- {
- return compose<for_eval>(init, cond, step, do_);
- }
- Init init;
- Cond cond;
- Step step;
- };
- template <typename Init, typename Cond, typename Step>
- inline for_gen<Init, Cond, Step>
- for_(Init const& init, Cond const& cond, Step const& step)
- {
- return for_gen<Init, Cond, Step>(init, cond, step);
- }
- }}
- #endif