]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/mpl/doc/src/refmanual/iter_fold.rst
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / mpl / doc / src / refmanual / iter_fold.rst
CommitLineData
7c673cae
FG
1.. Algorithms/Iteration Algorithms//iter_fold
2
3iter_fold
4=========
5
6Synopsis
7--------
8
9.. parsed-literal::
10
11 template<
12 typename Sequence
13 , typename State
14 , typename ForwardOp
15 >
16 struct iter_fold
17 {
18 typedef |unspecified| type;
19 };
20
21
22
23Description
24-----------
25
26Returns the result of the successive application of binary ``ForwardOp`` to the result
27of the previous ``ForwardOp`` invocation (``State`` if it's the first call) and each
28iterator in the range [``begin<Sequence>::type``, ``end<Sequence>::type``) in order.
29
30
31Header
32------
33
34.. parsed-literal::
35
36 #include <boost/mpl/iter_fold.hpp>
37
38
39
40Parameters
41----------
42
43+---------------+-------------------------------+---------------------------------------------------+
44| Parameter | Requirement | Description |
45+===============+===============================+===================================================+
46| ``Sequence`` | |Forward Sequence| | A sequence to iterate. |
47+---------------+-------------------------------+---------------------------------------------------+
48| ``State`` | Any type | The initial state for the first ``ForwardOp`` |
49| | | application. |
50+---------------+-------------------------------+---------------------------------------------------+
51| ``ForwardOp`` | Binary |Lambda Expression| | The operation to be executed on forward |
52| | | traversal. |
53+---------------+-------------------------------+---------------------------------------------------+
54
55
56Expression semantics
57--------------------
58
59For any |Forward Sequence| ``s``, binary |Lambda Expression| ``op``, and an
60arbitrary type ``state``:
61
62
63.. parsed-literal::
64
65 typedef iter_fold<s,state,op>::type t;
66
67:Return type:
68 A type.
69
70:Semantics:
71 Equivalent to
72
73 .. parsed-literal::
74
75 typedef begin<s>::type i\ :sub:`1`;
76 typedef apply<op,state,i\ :sub:`1`>::type state\ :sub:`1`;
77 typedef next<i\ :sub:`1`>::type i\ :sub:`2`;
78 typedef apply<op,state\ :sub:`1`,i\ :sub:`2`>::type state\ :sub:`2`;
79 |...|
80 typedef apply<op,state\ :sub:`n-1`,i\ :sub:`n`>::type state\ :sub:`n`;
81 typedef next<i\ :sub:`n`>::type last;
82 typedef state\ :sub:`n` t;
83
84 where ``n == size<s>::value`` and ``last`` is identical to ``end<s>::type``; equivalent
85 to ``typedef state t;`` if ``empty<s>::value == true``.
86
87
88
89Complexity
90----------
91
92Linear. Exactly ``size<s>::value`` applications of ``op``.
93
94
95Example
96-------
97
98.. parsed-literal::
99
100 typedef vector_c<int,5,-1,0,7,2,0,-5,4> numbers;
101 typedef iter_fold<
102 numbers
103 , begin<numbers>::type
104 , if_< less< deref<_1>, deref<_2> >,_2,_1 >
105 >::type max_element_iter;
106
107 BOOST_MPL_ASSERT_RELATION( deref<max_element_iter>::type::value, ==, 7 );
108
109
110
111See also
112--------
113
114|Algorithms|, |reverse_iter_fold|, |fold|, |reverse_fold|, |copy|
115
116
117