summaryrefslogtreecommitdiff
path: root/boost/spirit/home/x3/operator/detail/sequence.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/spirit/home/x3/operator/detail/sequence.hpp')
-rw-r--r--boost/spirit/home/x3/operator/detail/sequence.hpp62
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(