]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fusion/include/boost/fusion/iterator/detail/distance.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / fusion / include / boost / fusion / iterator / detail / distance.hpp
1 /*=============================================================================
2 Copyright (c) 2001-2011 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_DISTANCE_09172005_0730)
8 #define FUSION_DISTANCE_09172005_0730
9
10 #include <boost/fusion/support/config.hpp>
11 #include <boost/mpl/int.hpp>
12 #include <boost/mpl/if.hpp>
13 #include <boost/mpl/eval_if.hpp>
14 #include <boost/mpl/next.hpp>
15 #include <boost/mpl/identity.hpp>
16 #include <boost/fusion/iterator/next.hpp>
17 #include <boost/fusion/iterator/equal_to.hpp>
18
19 namespace boost { namespace fusion { namespace distance_detail
20 {
21 // Default distance implementation, linear
22 // search for the Last iterator.
23
24 template <typename First, typename Last>
25 struct linear_distance;
26
27 template <typename First, typename Last>
28 struct next_distance
29 {
30 typedef typename
31 mpl::next<
32 typename linear_distance<
33 typename result_of::next<First>::type
34 , Last
35 >::type
36 >::type
37 type;
38 };
39
40 template <typename First, typename Last>
41 struct linear_distance
42 : mpl::eval_if<
43 result_of::equal_to<First, Last>
44 , mpl::identity<mpl::int_<0> >
45 , next_distance<First, Last>
46 >::type
47 {
48 typedef typename
49 mpl::eval_if<
50 result_of::equal_to<First, Last>
51 , mpl::identity<mpl::int_<0> >
52 , next_distance<First, Last>
53 >::type
54 type;
55
56 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
57 static type
58 call(First const&, Last const&)
59 {
60 return type();
61 }
62 };
63
64 }}}
65
66 #endif