diff options
Diffstat (limited to 'boost/spirit/home/x3/operator/detail/sequence.hpp')
-rw-r--r-- | boost/spirit/home/x3/operator/detail/sequence.hpp | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/boost/spirit/home/x3/operator/detail/sequence.hpp b/boost/spirit/home/x3/operator/detail/sequence.hpp index 1163707128..e54a8f6a9e 100644 --- a/boost/spirit/home/x3/operator/detail/sequence.hpp +++ b/boost/spirit/home/x3/operator/detail/sequence.hpp @@ -7,10 +7,6 @@ #if !defined(SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM) #define SPIRIT_SEQUENCE_DETAIL_JAN_06_2013_1015AM -#if defined(_MSC_VER) -#pragma once -#endif - #include <boost/spirit/home/x3/support/traits/attribute_of.hpp> #include <boost/spirit/home/x3/support/traits/attribute_category.hpp> #include <boost/spirit/home/x3/support/traits/make_attribute.hpp> @@ -31,9 +27,9 @@ #include <boost/mpl/copy_if.hpp> #include <boost/mpl/not.hpp> #include <boost/mpl/if.hpp> +#include <boost/mpl/insert_range.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/mpl/vector.hpp> -#include <boost/mpl/eval_if.hpp> #include <boost/mpl/identity.hpp> #include <boost/type_traits/add_reference.hpp> @@ -247,34 +243,21 @@ namespace boost { namespace spirit { namespace x3 { namespace detail template <typename LL, typename LR, typename R, typename C> struct get_sequence_types<sequence<LL, LR>, R, C> - { - typedef typename - mpl::push_back< - typename get_sequence_types<LL, LR, C>::type - , typename traits::attribute_of<R, C>::type - >::type - type; - }; + : mpl::push_back< typename get_sequence_types<LL, LR, C>::type + , typename traits::attribute_of<R, C>::type> {}; template <typename L, typename RL, typename RR, typename C> struct get_sequence_types<L, sequence<RL, RR>, C> - { - typedef typename - mpl::push_front< - typename get_sequence_types<RL, RR, C>::type - , typename traits::attribute_of<L, C>::type - >::type - type; - }; + : mpl::push_front< typename get_sequence_types<RL, RR, C>::type + , typename traits::attribute_of<L, C>::type> {}; template <typename LL, typename LR, typename RL, typename RR, typename C> struct get_sequence_types<sequence<LL, LR>, sequence<RL, RR>, C> { - typedef - mpl::joint_view< - typename get_sequence_types<LL, LR, C>::type - , typename get_sequence_types<RL, RR, C>::type - > + typedef typename get_sequence_types<LL, LR, C>::type left; + typedef typename get_sequence_types<RL, RR, C>::type right; + typedef typename + mpl::insert_range<left, typename mpl::end<left>::type, right>::type type; }; @@ -334,10 +317,9 @@ namespace boost { namespace spirit { namespace x3 { namespace detail template <typename Parser, typename Iterator, typename Context , typename RContext, typename Attribute> - bool parse_sequence( - Parser const& parser , Iterator& first, Iterator const& last - , Context const& context, RContext& rcontext, Attribute& attr - , traits::plain_attribute) + bool parse_sequence_plain( + Parser const& parser, Iterator& first, Iterator const& last + , Context const& context, RContext& rcontext, Attribute& attr) { typedef typename Parser::left_type Left; typedef typename Parser::right_type Right; @@ -357,6 +339,26 @@ namespace boost { namespace spirit { namespace x3 { namespace detail return false; } + template <typename Parser, typename Iterator, typename Context + , typename RContext, typename Attribute> + bool parse_sequence( + Parser const& parser, Iterator& first, Iterator const& last + , Context const& context, RContext& rcontext, Attribute& attr + , traits::plain_attribute) + { + return parse_sequence_plain(parser, first, last, context, rcontext, attr); + } + + template <typename Parser, typename Iterator, typename Context + , typename RContext, typename Attribute> + bool parse_sequence( + Parser const& parser, Iterator& first, Iterator const& last + , Context const& context, RContext& rcontext, Attribute& attr + , traits::variant_attribute) + { + return parse_sequence_plain(parser, first, last, context, rcontext, attr); + } + template <typename Left, typename Right, typename Iterator , typename Context, typename RContext, typename Attribute> bool parse_sequence( |