#pragma once #ifndef ZIPPED_RANGE_H #define ZIPPED_RANGE_H // boost includes #include #include /*! \file zipped_range.h \brief Contains a range creator for boost::zip_iterator objects. \remark Zipped ranges are currently constrained to a 2-tuple. */ namespace tcg { template struct _zip_rng_traits { typedef boost::zip_iterator< boost::tuple::type, typename boost::range_iterator::type>> iterator; typedef std::pair range; }; //********************************************************************************** // Permuted Range creator //********************************************************************************** template typename _zip_rng_traits::range zipped_range(Rng1 &rng1, Rng2 &rng2) { typedef typename _zip_rng_traits::range range; typedef typename _zip_rng_traits::iterator iterator; return range( iterator(boost::make_tuple(boost::begin(rng1), boost::begin(rng2))), iterator(boost::make_tuple(boost::end(rng1), boost::end(rng2)))); } } // namespace tcg #endif // ZIPPED_RANGE_H