79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| #ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED
 | |
| #define BOOST_MPL_DISTANCE_HPP_INCLUDED
 | |
| 
 | |
| // Copyright Aleksey Gurtovoy 2000-2004
 | |
| //
 | |
| // Distributed under the Boost Software License, Version 1.0. 
 | |
| // (See accompanying file LICENSE_1_0.txt or copy at 
 | |
| // http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| // See http://www.boost.org/libs/mpl for documentation.
 | |
| 
 | |
| // $Id$
 | |
| // $Date$
 | |
| // $Revision$
 | |
| 
 | |
| #include <boost/mpl/distance_fwd.hpp>
 | |
| #include <boost/mpl/iter_fold.hpp>
 | |
| #include <boost/mpl/iterator_range.hpp>
 | |
| #include <boost/mpl/long.hpp>
 | |
| #include <boost/mpl/next.hpp>
 | |
| #include <boost/mpl/tag.hpp>
 | |
| #include <boost/mpl/apply_wrap.hpp>
 | |
| #include <boost/mpl/aux_/msvc_eti_base.hpp>
 | |
| #include <boost/mpl/aux_/value_wknd.hpp>
 | |
| #include <boost/mpl/aux_/na_spec.hpp>
 | |
| #include <boost/mpl/aux_/config/forwarding.hpp>
 | |
| #include <boost/mpl/aux_/config/static_constant.hpp>
 | |
| 
 | |
| 
 | |
| namespace boost { namespace mpl {
 | |
| 
 | |
| // default implementation for forward/bidirectional iterators
 | |
| template< typename Tag > struct distance_impl
 | |
| {
 | |
|     template< typename First, typename Last > struct apply
 | |
| #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
 | |
|         : aux::msvc_eti_base< typename iter_fold<
 | |
|               iterator_range<First,Last>
 | |
|             , mpl::long_<0>
 | |
|             , next<>
 | |
|             >::type >
 | |
|     {
 | |
| #else
 | |
|     {
 | |
|         typedef typename iter_fold<
 | |
|               iterator_range<First,Last>
 | |
|             , mpl::long_<0>
 | |
|             , next<>
 | |
|             >::type type;
 | |
|         
 | |
|         BOOST_STATIC_CONSTANT(long, value =
 | |
|               (iter_fold<
 | |
|                   iterator_range<First,Last>
 | |
|                 , mpl::long_<0>
 | |
|                 , next<>
 | |
|                 >::type::value)
 | |
|             );
 | |
| #endif
 | |
|     };
 | |
| };
 | |
| 
 | |
| template<
 | |
|       typename BOOST_MPL_AUX_NA_PARAM(First)
 | |
|     , typename BOOST_MPL_AUX_NA_PARAM(Last)
 | |
|     >
 | |
| struct distance
 | |
|     : distance_impl< typename tag<First>::type >
 | |
|         ::template apply<First, Last>
 | |
| {
 | |
|     BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))
 | |
| };
 | |
| 
 | |
| BOOST_MPL_AUX_NA_SPEC(2, distance)
 | |
| 
 | |
| }}
 | |
| 
 | |
| #endif // BOOST_MPL_DISTANCE_HPP_INCLUDED
 | 
