PrevUpHomeNext

Class template permutation_iterator

boost::compute::permutation_iterator — The permutation_iterator class provides a permuation iterator.

Synopsis

// In header: <boost/compute/iterator/permutation_iterator.hpp>

template<typename ElementIterator, typename IndexIterator> 
class permutation_iterator {
public:
  // types
  typedef unspecified                 super_type;     
  typedef super_type::value_type      value_type;     
  typedef super_type::reference       reference;      
  typedef super_type::base_type       base_type;      
  typedef super_type::difference_type difference_type;
  typedef IndexIterator               index_iterator; 

  // construct/copy/destruct
  permutation_iterator(ElementIterator, IndexIterator);
  permutation_iterator(const permutation_iterator< ElementIterator, IndexIterator > &);
  permutation_iterator< ElementIterator, IndexIterator > & 
  operator=(const permutation_iterator< ElementIterator, IndexIterator > &);
  ~permutation_iterator();

  // public member functions
  size_t get_index() const;
  const buffer & get_buffer() const;
  template<typename IndexExpr> unspecified operator[](const IndexExpr &) const;

  // private member functions
  reference dereference() const;
};

Description

A permutation iterator iterates over a value range and an index range. When dereferenced, it returns the value from the value range using the current index from the index range.

For example, to reverse a range using the copy() algorithm and a permutation sequence:

// values =  { 10, 20, 30, 40 }
// indices = { 3, 2, 1, 0 }

boost::compute::copy(
    boost::compute::make_permutation_iterator(values.begin(), indices.begin()),
    boost::compute::make_permutation_iterator(values.end(), indices.end()),
    result.begin(),
    queue
);

// result == { 40, 30, 20, 10 }

See Also:

make_permutation_iterator()

permutation_iterator public construct/copy/destruct

  1. permutation_iterator(ElementIterator e, IndexIterator i);
  2. permutation_iterator(const permutation_iterator< ElementIterator, IndexIterator > & other);
  3. permutation_iterator< ElementIterator, IndexIterator > & 
    operator=(const permutation_iterator< ElementIterator, IndexIterator > & other);
  4. ~permutation_iterator();

permutation_iterator public member functions

  1. size_t get_index() const;
  2. const buffer & get_buffer() const;
  3. template<typename IndexExpr> 
      unspecified operator[](const IndexExpr & expr) const;

permutation_iterator private member functions

  1. reference dereference() const;

PrevUpHomeNext