/*============================================================================= | |
Copyright (c) 2001-2006 Joel de Guzman | |
Copyright (c) 2005-2006 Dan Marsden | |
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) | |
==============================================================================*/ | |
#if !defined(FUSION_DISTANCE_IMPL_13122005_2139) | |
#define FUSION_DISTANCE_IMPL_13122005_2139 | |
#include <boost/fusion/iterator/distance.hpp> | |
namespace boost { namespace fusion { | |
struct transform_view_iterator_tag; | |
struct transform_view_iterator2_tag; | |
namespace extension | |
{ | |
template<typename Tag> | |
struct distance_impl; | |
// Unary Version | |
template<> | |
struct distance_impl<transform_view_iterator_tag> | |
{ | |
template<typename First, typename Last> | |
struct apply | |
: result_of::distance<typename First::first_type, typename Last::first_type> | |
{ | |
static | |
typename result_of::distance<typename First::first_type, typename Last::first_type>::type | |
call(First const& first, Last const& last) | |
{ | |
return boost::fusion::distance(first.first, last.first); | |
} | |
}; | |
}; | |
// Binary Version | |
template<> | |
struct distance_impl<transform_view_iterator2_tag> | |
{ | |
template<typename First, typename Last> | |
struct apply | |
: result_of::distance<typename First::first1_type, typename Last::first1_type> | |
{ | |
static | |
typename result_of::distance<typename First::first1_type, typename Last::first1_type>::type | |
call(First const& first, Last const& last) | |
{ | |
return boost::fusion::distance(first.first1, last.first1); | |
} | |
}; | |
}; | |
} | |
}} | |
#endif |