#pragma once #ifndef PERMUTED_RANGE_H #define PERMUTED_RANGE_H // boost includes #include #include /*! \file permuted_range.h \brief Contains a range creator for boost::permutation_iterator objects. */ namespace tcg { template struct _perm_rng_traits { typedef boost::permutation_iterator< typename boost::range_iterator::type, typename boost::range_iterator::type> iterator; typedef std::pair range; }; //********************************************************************************** // Permuted Range creator //********************************************************************************** template typename _perm_rng_traits::range permuted_range( ElementsRng &erng, const IndexesRng &irng) { typedef typename _perm_rng_traits::range range; typedef typename _perm_rng_traits::iterator iterator; return range(iterator(boost::begin(erng), boost::begin(irng)), iterator(boost::begin(erng), boost::end(irng))); } } // namespace tcg #endif // PERMUTED_RANGE_H