]> git.donarmstrong.com Git - rsem.git/blob - boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp
Updated boost to v1.55.0
[rsem.git] / boost / fusion / view / iterator_range / detail / is_segmented_impl.hpp
1 /*=============================================================================
2     Copyright (c) 2011 Eric Niebler
3
4     Distributed under the Boost Software License, Version 1.0. (See accompanying 
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED)
8 #define BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED
9
10 #include <boost/mpl/assert.hpp>
11 #include <boost/mpl/bool.hpp>
12
13 namespace boost { namespace fusion
14 {
15     struct iterator_range_tag;
16
17     template <typename Context>
18     struct segmented_iterator;
19
20     namespace extension
21     {
22         template <typename Tag>
23         struct is_segmented_impl;
24
25         // An iterator_range of segmented_iterators is segmented
26         template <>
27         struct is_segmented_impl<iterator_range_tag>
28         {
29         private:
30             template <typename Iterator>
31             struct is_segmented_iterator
32               : mpl::false_
33             {};
34
35             template <typename Iterator>
36             struct is_segmented_iterator<Iterator &>
37               : is_segmented_iterator<Iterator>
38             {};
39
40             template <typename Iterator>
41             struct is_segmented_iterator<Iterator const>
42               : is_segmented_iterator<Iterator>
43             {};
44
45             template <typename Context>
46             struct is_segmented_iterator<segmented_iterator<Context> >
47               : mpl::true_
48             {};
49
50         public:
51             template <typename Sequence>
52             struct apply
53               : is_segmented_iterator<typename Sequence::begin_type>
54             {
55                 BOOST_MPL_ASSERT_RELATION(
56                     is_segmented_iterator<typename Sequence::begin_type>::value
57                   , ==
58                   , is_segmented_iterator<typename Sequence::end_type>::value);
59             };
60         };
61     }
62 }}
63
64 #endif
65
66