#ifndef BOOST_MPL_ZIP_VIEW_HPP_INCLUDED | |
#define BOOST_MPL_ZIP_VIEW_HPP_INCLUDED | |
// Copyright Aleksey Gurtovoy 2000-2010 | |
// Copyright David Abrahams 2000-2002 | |
// | |
// 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: zip_view.hpp 61591 2010-04-26 21:31:09Z agurtovoy $ | |
// $Date: 2010-04-26 17:31:09 -0400 (Mon, 26 Apr 2010) $ | |
// $Revision: 61591 $ | |
#include <boost/mpl/transform.hpp> | |
#include <boost/mpl/begin_end.hpp> | |
#include <boost/mpl/iterator_tags.hpp> | |
#include <boost/mpl/next.hpp> | |
#include <boost/mpl/lambda.hpp> | |
#include <boost/mpl/deref.hpp> | |
#include <boost/mpl/aux_/na_spec.hpp> | |
namespace boost { namespace mpl { | |
template< typename IteratorSeq > | |
struct zip_iterator | |
{ | |
typedef forward_iterator_tag category; | |
typedef typename transform1< | |
IteratorSeq | |
, deref<_1> | |
>::type type; | |
typedef zip_iterator< | |
typename transform1< | |
IteratorSeq | |
, mpl::next<_1> | |
>::type | |
> next; | |
}; | |
template< | |
typename BOOST_MPL_AUX_NA_PARAM(Sequences) | |
> | |
struct zip_view | |
{ | |
private: | |
typedef typename transform1< Sequences, mpl::begin<_1> >::type first_ones_; | |
typedef typename transform1< Sequences, mpl::end<_1> >::type last_ones_; | |
public: | |
typedef nested_begin_end_tag tag; | |
typedef zip_view type; | |
typedef zip_iterator<first_ones_> begin; | |
typedef zip_iterator<last_ones_> end; | |
}; | |
BOOST_MPL_AUX_NA_SPEC(1, zip_view) | |
}} | |
#endif // BOOST_MPL_ZIP_VIEW_HPP_INCLUDED |