| /*============================================================================= |
| Copyright (c) 2009 Francois Barel |
| Copyright (c) 2001-2010 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) |
| ==============================================================================*/ |
| #if !defined(BOOST_SPIRIT_REPOSITORY_SUPPORT_SUBRULE_CONTEXT_AUGUST_12_2009_0539PM) |
| #define BOOST_SPIRIT_REPOSITORY_SUPPORT_SUBRULE_CONTEXT_AUGUST_12_2009_0539PM |
| |
| #if defined(_MSC_VER) |
| #pragma once |
| #endif |
| |
| #include <boost/spirit/home/support/context.hpp> |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| namespace boost { namespace spirit { namespace repository |
| { |
| /////////////////////////////////////////////////////////////////////////// |
| // subrule_context: special context used with subrules, to pass around |
| // the current set of subrule definitions (subrule_group) |
| /////////////////////////////////////////////////////////////////////////// |
| template <typename Group, typename Attributes, typename Locals> |
| struct subrule_context |
| : context<Attributes, Locals> |
| { |
| typedef context<Attributes, Locals> base_type; |
| typedef Group group_type; |
| |
| subrule_context( |
| Group const& group |
| , typename Attributes::car_type attribute |
| ) : base_type(attribute), group(group) |
| { |
| } |
| |
| template <typename Args, typename Context> |
| subrule_context( |
| Group const& group |
| , typename Attributes::car_type attribute |
| , Args const& args |
| , Context& caller_context |
| ) : base_type(attribute, args, caller_context), group(group) |
| { |
| } |
| |
| subrule_context(Group const& group, Attributes const& attributes) |
| : base_type(attributes), group(group) |
| { |
| } |
| |
| Group const& group; |
| }; |
| }}} |
| |
| #endif |