tahoma2d/toonz/sources/include/tcg/boost/zipped_range.h

46 lines
1.3 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef ZIPPED_RANGE_H
#define ZIPPED_RANGE_H
// boost includes
#include <boost/range.hpp>
#include <boost/iterator/zip_iterator.hpp>
/*!
\file zipped_range.h
\brief Contains a range creator for boost::zip_iterator objects.
\remark Zipped ranges are currently constrained to a 2-tuple.
*/
2016-06-15 18:43:10 +12:00
namespace tcg {
2016-03-19 06:57:51 +13:00
template <typename Rng1, typename Rng2>
struct _zip_rng_traits {
2016-06-15 18:43:10 +12:00
typedef boost::zip_iterator<
boost::tuple<typename boost::range_iterator<Rng1>::type,
typename boost::range_iterator<Rng2>::type>>
iterator;
typedef std::pair<iterator, iterator> range;
2016-03-19 06:57:51 +13:00
};
//**********************************************************************************
// Permuted Range creator
//**********************************************************************************
template <typename Rng1, typename Rng2>
2016-06-15 18:43:10 +12:00
typename _zip_rng_traits<Rng1, Rng2>::range zipped_range(Rng1 &rng1,
Rng2 &rng2) {
typedef typename _zip_rng_traits<Rng1, Rng2>::range range;
typedef typename _zip_rng_traits<Rng1, Rng2>::iterator iterator;
return range(
iterator(boost::make_tuple(boost::begin(rng1), boost::begin(rng2))),
iterator(boost::make_tuple(boost::end(rng1), boost::end(rng2))));
2016-03-19 06:57:51 +13:00
}
2016-06-15 18:43:10 +12:00
} // namespace tcg
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
#endif // ZIPPED_RANGE_H