Ticket #5097: next_impl_vs.hpp

File next_impl_vs.hpp, 2.1 KB (added by vivek@…, 12 years ago)

An old version of next_impl.hpp that seems to have been installed with boost 1.45.0

Line 
1/*=============================================================================
2 Copyright (c) 2001-2006 Joel de Guzman
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(FUSION_NEXT_IMPL_07162005_0136)
8#define FUSION_NEXT_IMPL_07162005_0136
9
10#include <boost/fusion/iterator/next.hpp>
11#include <boost/fusion/iterator/equal_to.hpp>
12#include <boost/mpl/if.hpp>
13
14namespace boost { namespace fusion
15{
16 struct joint_view_iterator_tag;
17
18 template <typename First, typename Last, typename Concat>
19 struct joint_view_iterator;
20
21 namespace extension
22 {
23 template <typename Tag>
24 struct next_impl;
25
26 template <>
27 struct next_impl<joint_view_iterator_tag>
28 {
29 template <typename Iterator>
30 struct apply
31 {
32 typedef typename Iterator::first_type first_type;
33 typedef typename Iterator::last_type last_type;
34 typedef typename Iterator::concat_type concat_type;
35 typedef typename result_of::next<first_type>::type next_type;
36 typedef result_of::equal_to<next_type, last_type> equal_to;
37
38 typedef typename
39 mpl::if_<
40 equal_to
41 , concat_type
42 , joint_view_iterator<next_type, last_type, concat_type>
43 >::type
44 type;
45
46 static type
47 call(Iterator const& i, mpl::true_)
48 {
49 return i.concat;
50 }
51
52 static type
53 call(Iterator const& i, mpl::false_)
54 {
55 return type(fusion::next(i.first), i.concat);
56 }
57
58 static type
59 call(Iterator const& i)
60 {
61 return call(i, equal_to());
62 }
63 };
64 };
65 }
66}}
67
68#endif
69
70