]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/distance.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
a9435491f754dcb802436161aeb06cef15972c34
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / distance.hpp
1 \r
2 #ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED\r
3 #define BOOST_MPL_DISTANCE_HPP_INCLUDED\r
4 \r
5 // Copyright Aleksey Gurtovoy 2000-2004\r
6 //\r
7 // Distributed under the Boost Software License, Version 1.0. \r
8 // (See accompanying file LICENSE_1_0.txt or copy at \r
9 // http://www.boost.org/LICENSE_1_0.txt)\r
10 //\r
11 // See http://www.boost.org/libs/mpl for documentation.\r
12 \r
13 // $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
14 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
15 // $Revision: 49267 $\r
16 \r
17 #include <boost/mpl/distance_fwd.hpp>\r
18 #include <boost/mpl/iter_fold.hpp>\r
19 #include <boost/mpl/iterator_range.hpp>\r
20 #include <boost/mpl/long.hpp>\r
21 #include <boost/mpl/next.hpp>\r
22 #include <boost/mpl/tag.hpp>\r
23 #include <boost/mpl/apply_wrap.hpp>\r
24 #include <boost/mpl/aux_/msvc_eti_base.hpp>\r
25 #include <boost/mpl/aux_/value_wknd.hpp>\r
26 #include <boost/mpl/aux_/na_spec.hpp>\r
27 #include <boost/mpl/aux_/config/forwarding.hpp>\r
28 #include <boost/mpl/aux_/config/static_constant.hpp>\r
29 \r
30 \r
31 namespace boost { namespace mpl {\r
32 \r
33 // default implementation for forward/bidirectional iterators\r
34 template< typename Tag > struct distance_impl\r
35 {\r
36     template< typename First, typename Last > struct apply\r
37 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\r
38         : aux::msvc_eti_base< typename iter_fold<\r
39               iterator_range<First,Last>\r
40             , mpl::long_<0>\r
41             , next<>\r
42             >::type >\r
43     {\r
44 #else\r
45     {\r
46         typedef typename iter_fold<\r
47               iterator_range<First,Last>\r
48             , mpl::long_<0>\r
49             , next<>\r
50             >::type type;\r
51         \r
52         BOOST_STATIC_CONSTANT(long, value =\r
53               (iter_fold<\r
54                   iterator_range<First,Last>\r
55                 , mpl::long_<0>\r
56                 , next<>\r
57                 >::type::value)\r
58             );\r
59 #endif\r
60     };\r
61 };\r
62 \r
63 template<\r
64       typename BOOST_MPL_AUX_NA_PARAM(First)\r
65     , typename BOOST_MPL_AUX_NA_PARAM(Last)\r
66     >\r
67 struct distance\r
68     : distance_impl< typename tag<First>::type >\r
69         ::template apply<First, Last>\r
70 {\r
71     BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))\r
72 };\r
73 \r
74 BOOST_MPL_AUX_NA_SPEC(2, distance)\r
75 \r
76 }}\r
77 \r
78 #endif // BOOST_MPL_DISTANCE_HPP_INCLUDED\r