PageRenderTime 32ms CodeModel.GetById 22ms app.highlight 6ms RepoModel.GetById 2ms app.codeStats 0ms

/Src/Dependencies/Boost/libs/iterator/doc/permutation_iterator_ref.rst

http://hadesmem.googlecode.com/
ReStructuredText | 130 lines | 88 code | 42 blank | 0 comment | 0 complexity | ee02a3c5288b3a20b8dd24f6da9a7048 MD5 | raw file
  1.. Copyright David Abrahams 2006. Distributed under the Boost
  2.. Software License, Version 1.0. (See accompanying
  3.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4
  5.. parsed-literal::
  6
  7  template< class ElementIterator
  8	  , class IndexIterator
  9	  , class ValueT        = use_default
 10	  , class CategoryT     = use_default
 11	  , class ReferenceT    = use_default
 12	  , class DifferenceT   = use_default >
 13  class permutation_iterator
 14  {
 15  public:
 16    permutation_iterator();
 17    explicit permutation_iterator(ElementIterator x, IndexIterator y);
 18
 19    template< class OEIter, class OIIter, class V, class C, class R, class D >
 20    permutation_iterator(
 21	permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
 22	, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
 23	, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
 24	);
 25    reference operator*() const;
 26    permutation_iterator& operator++();
 27    ElementIterator const& base() const;
 28  private:
 29    ElementIterator m_elt;      // exposition only
 30    IndexIterator m_order;      // exposition only
 31  };
 32
 33  template <class ElementIterator, class IndexIterator>
 34  permutation_iterator<ElementIterator, IndexIterator> 
 35  make_permutation_iterator( ElementIterator e, IndexIterator i);
 36
 37
 38
 39``permutation_iterator`` requirements
 40-------------------------------------
 41
 42``ElementIterator`` shall model Random Access Traversal Iterator.
 43``IndexIterator`` shall model Readable Iterator.  The value type of
 44the ``IndexIterator`` must be convertible to the difference type of
 45``ElementIterator``.
 46
 47
 48``permutation_iterator`` models
 49-------------------------------
 50
 51``permutation_iterator`` models the same iterator traversal concepts
 52as ``IndexIterator`` and the same iterator access concepts as
 53``ElementIterator``.
 54
 55If ``IndexIterator`` models Single Pass Iterator and 
 56``ElementIterator`` models Readable Iterator then
 57``permutation_iterator`` models Input Iterator.
 58
 59If ``IndexIterator`` models Forward Traversal Iterator and 
 60``ElementIterator`` models Readable Lvalue Iterator then
 61``permutation_iterator`` models Forward Iterator.
 62
 63If ``IndexIterator`` models Bidirectional Traversal Iterator and 
 64``ElementIterator`` models Readable Lvalue Iterator then
 65``permutation_iterator`` models Bidirectional Iterator.
 66
 67If ``IndexIterator`` models Random Access Traversal Iterator and
 68``ElementIterator`` models Readable Lvalue Iterator then
 69``permutation_iterator`` models Random Access Iterator.
 70
 71``permutation_iterator<E1, X, V1, C2, R1, D1>`` is interoperable
 72with ``permutation_iterator<E2, Y, V2, C2, R2, D2>`` if and only if
 73``X`` is interoperable with ``Y`` and ``E1`` is convertible
 74to ``E2``.
 75
 76
 77``permutation_iterator`` operations
 78-----------------------------------
 79
 80In addition to those operations required by the concepts that
 81``permutation_iterator`` models, ``permutation_iterator`` provides the
 82following operations.
 83
 84``permutation_iterator();``
 85
 86:Effects: Default constructs ``m_elt`` and ``m_order``.
 87
 88
 89``explicit permutation_iterator(ElementIterator x, IndexIterator y);``
 90
 91:Effects: Constructs ``m_elt`` from ``x`` and ``m_order`` from ``y``.
 92
 93
 94::
 95
 96    template< class OEIter, class OIIter, class V, class C, class R, class D >
 97    permutation_iterator(
 98	permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
 99	, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
100	, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
101	);
102
103:Effects: Constructs ``m_elt`` from ``r.m_elt`` and
104  ``m_order`` from ``y.m_order``.
105
106
107``reference operator*() const;``
108
109:Returns: ``*(m_elt + *m_order)``
110
111
112``permutation_iterator& operator++();``
113
114:Effects: ``++m_order``
115:Returns: ``*this``
116
117
118``ElementIterator const& base() const;``
119
120:Returns: ``m_order``
121
122
123::
124
125  template <class ElementIterator, class IndexIterator>
126  permutation_iterator<ElementIterator, IndexIterator> 
127  make_permutation_iterator(ElementIterator e, IndexIterator i);
128
129:Returns: ``permutation_iterator<ElementIterator, IndexIterator>(e, i)``
130