Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/spirit/home/classic/dynamic/lazy.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/spirit/home/classic/dynamic/lazy.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,66 @@ +/*============================================================================= + Copyright (c) 2003 Joel de Guzman + Copyright (c) 2003 Vaclav Vesely + http://spirit.sourceforge.net/ + + 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_SPIRIT_LAZY_HPP +#define BOOST_SPIRIT_LAZY_HPP + +//////////////////////////////////////////////////////////////////////////////// +#include <boost/spirit/home/classic/namespace.hpp> +#include <boost/spirit/home/classic/core/parser.hpp> +#include <boost/spirit/home/classic/phoenix/actor.hpp> + +//////////////////////////////////////////////////////////////////////////////// + +namespace boost { namespace spirit { + +BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN + + //////////////////////////////////////////////////////////////////////////// + // + // lazy_parser, holds phoenix actor which returns a spirit parser. + // + //////////////////////////////////////////////////////////////////////////// + + template<class ActorT> + struct lazy_parser : parser<lazy_parser<ActorT> > + { + typedef lazy_parser<ActorT> self_t; + typedef typename ::phoenix::actor_result< + ActorT, ::phoenix::tuple<> >::plain_type actor_result_t; + + template<typename ScannerT> + struct result + { + typedef typename + parser_result<actor_result_t, ScannerT>::type + type; + }; + + lazy_parser(ActorT const& actor_) + : actor(actor_) {} + + template<typename ScannerT> + typename parser_result<self_t, ScannerT>::type + parse(ScannerT const& scan) const + { return actor().parse(scan); } + + ActorT actor; + }; + + ////////////////////////////// + // lazy_p, returns lazy_parser + // Usage: lazy_p(actor) + template<class ActorT> + lazy_parser<ActorT> lazy_p(ActorT const& actor) + { return lazy_parser<ActorT>(actor); } + +BOOST_SPIRIT_CLASSIC_NAMESPACE_END + +}} // namespace BOOST_SPIRIT_CLASSIC_NS + +#endif // BOOST_SPIRIT_LAZY_HPP