You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
57 lines
1.8 KiB
57 lines
1.8 KiB
/*============================================================================= |
|
Copyright (c) 2001-2011 Joel de Guzman |
|
|
|
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_ITERATOR_FACADE_09252006_1011) |
|
#define FUSION_ITERATOR_FACADE_09252006_1011 |
|
|
|
#include <boost/fusion/support/iterator_base.hpp> |
|
#include <boost/fusion/iterator/detail/advance.hpp> |
|
#include <boost/fusion/iterator/detail/distance.hpp> |
|
#include <boost/fusion/support/category_of.hpp> |
|
#include <boost/type_traits/is_same.hpp> |
|
#include <boost/mpl/assert.hpp> |
|
|
|
namespace boost { namespace fusion |
|
{ |
|
struct iterator_facade_tag; |
|
|
|
template <typename Derived, typename Category> |
|
struct iterator_facade : iterator_base<Derived> |
|
{ |
|
typedef iterator_facade_tag fusion_tag; |
|
typedef Derived derived_type; |
|
typedef Category category; |
|
|
|
// default implementation |
|
template <typename I1, typename I2> |
|
struct equal_to // default implementation |
|
: is_same< |
|
typename I1::derived_type |
|
, typename I2::derived_type |
|
> |
|
{}; |
|
|
|
// default implementation |
|
template <typename Iterator, typename N> |
|
struct advance : |
|
mpl::if_c< |
|
(N::value > 0) |
|
, advance_detail::forward<Iterator, N::value> |
|
, advance_detail::backward<Iterator, N::value> |
|
>::type |
|
{ |
|
BOOST_MPL_ASSERT_NOT((traits::is_random_access<Iterator>)); |
|
}; |
|
|
|
// default implementation |
|
template <typename First, typename Last> |
|
struct distance : |
|
distance_detail::linear_distance<First, Last> |
|
{}; |
|
}; |
|
}} |
|
|
|
#endif
|
|
|