1<?xml version="1.0" encoding="utf-8"?>
2<!--
3  Copyright 2012 Eric Niebler
4
5  Distributed under the Boost
6  Software License, Version 1.0. (See accompanying
7  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8  -->
9<header name="boost/proto/functional/std/iterator.hpp">
10  <para>Includes Proto callables for the functions found in the standard <code>&lt;iterator&gt; header</code>.</para>
11
12  <namespace name="boost">
13    <namespace name="proto">
14      <namespace name="functional">
15
16        <!-- proto::functional::advance -->
17        <struct name="advance">
18          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
19            <code>std::advance()</code> function on its arguments.</purpose>
20          <description>
21            <para>
22              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
23              <code>std::advance()</code> function on its arguments.</para>
24          </description>
25          <inherit>
26            <type><classname>proto::callable</classname></type>
27          </inherit>
28          <typedef name="result_type">
29            <type>void</type>
30          </typedef>
31          <method-group name="public member functions">
32            <method name="operator()" cv="const">
33              <type>void</type>
34              <template>
35                <template-type-parameter name="InputIterator"/>
36              </template>
37              <template>
38                <template-type-parameter name="Distance"/>
39              </template>
40              <parameter name="x">
41                <paramtype>InputIterator &amp;</paramtype>
42              </parameter>
43              <parameter name="n">
44                <paramtype>Distance</paramtype>
45              </parameter>
46              <description>
47                <para>Calls <code>std::advance(x, n)</code></para>
48              </description>
49            </method>
50          </method-group>
51        </struct>
52
53        <!-- proto::functional::distance -->
54        <struct name="distance">
55          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
56            <code>std::distance()</code> function on its arguments.</purpose>
57          <description>
58            <para>
59              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
60              <code>std::distance()</code> function on its arguments.</para>
61          </description>
62          <inherit>
63            <type><classname>proto::callable</classname></type>
64          </inherit>
65          <struct-specialization name="result">
66            <template>
67              <template-type-parameter name="This"/>
68              <template-type-parameter name="InputIterator"/>
69            </template>
70            <specialization>
71              <template-arg>This(InputIterator, InputIterator)</template-arg>
72            </specialization>
73            <typedef name="type">
74              <type>typename std::iterator_traits&lt;
75      typename boost::remove_const&lt;
76        typename boost::remove_reference&lt;InputIterator&gt;::type
77      &gt;::type
78    &gt;::difference_type</type>
79            </typedef>
80          </struct-specialization>
81          <method-group name="public member functions">
82            <method name="operator()" cv="const">
83              <type>void</type>
84              <template>
85                <template-type-parameter name="InputIterator"/>
86              </template>
87              <parameter name="first">
88                <paramtype>InputIterator</paramtype>
89              </parameter>
90              <parameter name="last">
91                <paramtype>InputIterator</paramtype>
92              </parameter>
93              <returns>
94                <para><code>std::distance(first, last)</code></para>
95              </returns>
96            </method>
97          </method-group>
98        </struct>
99
100        <!-- proto::functional::next -->
101        <struct name="next">
102          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
103            <code>std::next()</code> function on its arguments.</purpose>
104          <description>
105            <para>
106              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
107              <code>std::next()</code> function on its arguments.</para>
108          </description>
109          <inherit>
110            <type><classname>proto::callable</classname></type>
111          </inherit>
112          <struct-specialization name="result">
113            <template>
114              <template-type-parameter name="This"/>
115              <template-type-parameter name="ForwardIterator"/>
116            </template>
117            <specialization>
118              <template-arg>This(ForwardIterator)</template-arg>
119            </specialization>
120            <typedef name="type">
121              <type>typename boost::remove_const&lt;
122      typename boost::remove_reference&lt;ForwardIterator&gt;::type
123    &gt;::type</type>
124            </typedef>
125          </struct-specialization>
126          <struct-specialization name="result">
127            <template>
128              <template-type-parameter name="This"/>
129              <template-type-parameter name="ForwardIterator"/>
130              <template-type-parameter name="Distance"/>
131            </template>
132            <specialization>
133              <template-arg>This(ForwardIterator, Distance)</template-arg>
134            </specialization>
135            <typedef name="type">
136              <type>typename boost::remove_const&lt;
137      typename boost::remove_reference&lt;ForwardIterator&gt;::type
138    &gt;::type</type>
139            </typedef>
140          </struct-specialization>
141          <method-group name="public member functions">
142            <method name="operator()" cv="const">
143              <type>void</type>
144              <template>
145                <template-type-parameter name="ForwardIterator"/>
146              </template>
147              <parameter name="x">
148                <paramtype>ForwardIterator</paramtype>
149              </parameter>
150              <returns>
151                <para><code>std::next(x)</code></para>
152              </returns>
153            </method>
154            <method name="operator()" cv="const">
155              <type>void</type>
156              <template>
157                <template-type-parameter name="ForwardIterator"/>
158              </template>
159              <parameter name="x">
160                <paramtype>ForwardIterator</paramtype>
161              </parameter>
162              <parameter name="n">
163                <paramtype>typename std::iterator_traits&lt;ForwardIterator&gt;::difference_type</paramtype>
164              </parameter>
165              <returns>
166                <para><code>std::next(x, n)</code></para>
167              </returns>
168            </method>
169          </method-group>
170        </struct>
171
172        <!-- proto::functional::prior -->
173        <struct name="prior">
174          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
175            <code>std::prior()</code> function on its arguments.</purpose>
176          <description>
177            <para>
178              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
179              <code>std::prior()</code> function on its arguments.</para>
180          </description>
181          <inherit>
182            <type><classname>proto::callable</classname></type>
183          </inherit>
184          <struct-specialization name="result">
185            <template>
186              <template-type-parameter name="This"/>
187              <template-type-parameter name="BidirectionalIterator"/>
188            </template>
189            <specialization>
190              <template-arg>This(BidirectionalIterator)</template-arg>
191            </specialization>
192            <typedef name="type">
193              <type>typename boost::remove_const&lt;
194      typename boost::remove_reference&lt;BidirectionalIterator&gt;::type
195    &gt;::type</type>
196            </typedef>
197          </struct-specialization>
198          <struct-specialization name="result">
199            <template>
200              <template-type-parameter name="This"/>
201              <template-type-parameter name="BidirectionalIterator"/>
202              <template-type-parameter name="Distance"/>
203            </template>
204            <specialization>
205              <template-arg>This(BidirectionalIterator, Distance)</template-arg>
206            </specialization>
207            <typedef name="type">
208              <type>typename boost::remove_const&lt;
209      typename boost::remove_reference&lt;BidirectionalIterator&gt;::type
210    &gt;::type</type>
211            </typedef>
212          </struct-specialization>
213          <method-group name="public member functions">
214            <method name="operator()" cv="const">
215              <type>void</type>
216              <template>
217                <template-type-parameter name="BidirectionalIterator"/>
218              </template>
219              <parameter name="x">
220                <paramtype>BidirectionalIterator</paramtype>
221              </parameter>
222              <returns>
223                <para><code>std::prior(x)</code></para>
224              </returns>
225            </method>
226            <method name="operator()" cv="const">
227              <type>void</type>
228              <template>
229                <template-type-parameter name="BidirectionalIterator"/>
230              </template>
231              <parameter name="x">
232                <paramtype>BidirectionalIterator</paramtype>
233              </parameter>
234              <parameter name="n">
235                <paramtype>typename std::iterator_traits&lt;BidirectionalIterator&gt;::difference_type</paramtype>
236              </parameter>
237              <returns>
238                <para><code>std::prior(x, n)</code></para>
239              </returns>
240            </method>
241          </method-group>
242        </struct>
243
244      </namespace>
245    </namespace>
246  </namespace>
247</header>
248