/*=============================================================================
|
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
|