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

45 lines
1.2 KiB
C
Raw Normal View History

2016-03-19 06:57:51 +13:00
#ifndef PERMUTED_RANGE_H
#define PERMUTED_RANGE_H
// boost includes
#include <boost/range.hpp>
#include <boost/iterator/permutation_iterator.hpp>
/*!
\file permuted_range.h
\brief Contains a range creator for boost::permutation_iterator objects.
*/
namespace tcg
{
template <typename ElemRng, typename IndxRng>
struct _perm_rng_traits {
typedef boost::permutation_iterator<
typename boost::range_iterator<ElemRng>::type,
typename boost::range_iterator<IndxRng>::type> iterator;
typedef std::pair<iterator, iterator> range;
};
//**********************************************************************************
// Permuted Range creator
//**********************************************************************************
template <typename ElementsRng, typename IndexesRng>
typename _perm_rng_traits<ElementsRng, const IndexesRng>::range
permuted_range(ElementsRng &erng, const IndexesRng &irng)
{
typedef typename _perm_rng_traits<ElementsRng, const IndexesRng>::range range;
typedef typename _perm_rng_traits<ElementsRng, const IndexesRng>::iterator iterator;
return range(iterator(boost::begin(erng), boost::begin(irng)),
iterator(boost::begin(erng), boost::end(irng)));
}
} // namespace tcg
#endif // PERMUTED_RANGE_H