Chris@102: /*============================================================================= Chris@102: Copyright (c) 2001-2014 Joel de Guzman Chris@102: Copyright (c) 2013 Agustín Bergé Chris@102: http://spirit.sourceforge.net/ Chris@102: Chris@102: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@102: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@102: =============================================================================*/ Chris@102: #if !defined(BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM) Chris@102: #define BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM Chris@102: Chris@102: #if defined(_MSC_VER) Chris@102: #pragma once Chris@102: #endif Chris@102: Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: namespace boost { namespace spirit { namespace x3 Chris@102: { Chris@102: template Chris@102: struct subcontext; Chris@102: Chris@102: template <> Chris@102: struct subcontext<> Chris@102: { Chris@102: template Chris@102: subcontext(Context const& /*context*/) Chris@102: {} Chris@102: Chris@102: template Chris@102: struct get_result Chris@102: { Chris@102: typedef unused_type type; Chris@102: }; Chris@102: Chris@102: template Chris@102: unused_type Chris@102: get(ID_) const Chris@102: { Chris@102: return unused; Chris@102: } Chris@102: }; Chris@102: Chris@102: template Chris@102: struct subcontext Chris@102: : context Chris@102: { Chris@102: typedef context< Chris@102: typename T::first_type, typename T::second_type Chris@102: > context_type; Chris@102: Chris@102: template Chris@102: subcontext(Context const& context) Chris@102: : context_type(x3::get(context)) Chris@102: {} Chris@102: Chris@102: using context_type::get; Chris@102: }; Chris@102: Chris@102: template Chris@102: struct subcontext Chris@102: : subcontext Chris@102: , context< Chris@102: typename T::first_type, typename T::second_type Chris@102: , subcontext Chris@102: > Chris@102: { Chris@102: typedef subcontext base_type; Chris@102: typedef context< Chris@102: typename T::first_type, typename T::second_type Chris@102: , base_type Chris@102: > context_type; Chris@102: Chris@102: template Chris@102: subcontext(Context const& context) Chris@102: : base_type(context) Chris@102: , context_type( Chris@102: x3::get(context) Chris@102: , *static_cast(this)) Chris@102: {} Chris@102: Chris@102: using context_type::get; Chris@102: }; Chris@102: Chris@102: }}} Chris@102: Chris@102: #endif