]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/mpl/doc/src/refmanual/fold.rst
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / mpl / doc / src / refmanual / fold.rst
CommitLineData
7c673cae
FG
1.. Algorithms/Iteration Algorithms//fold
2
3fold
4====
5
6Synopsis
7--------
8
9.. parsed-literal::
10
11 template<
12 typename Sequence
13 , typename State
14 , typename ForwardOp
15 >
16 struct 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
27result of the previous ``ForwardOp`` invocation (``State`` if it's the first call)
28and every element of the sequence in the range |begin/end<Sequence>| in order.
29
30
31Header
32------
33
34.. parsed-literal::
35
36 #include <boost/mpl/fold.hpp>
37
38
39Parameters
40----------
41
42+---------------+-------------------------------+---------------------------------------------------+
43| Parameter | Requirement | Description |
44+===============+===============================+===================================================+
45| ``Sequence`` | |Forward Sequence| | A sequence to iterate. |
46+---------------+-------------------------------+---------------------------------------------------+
47| ``State`` | Any type | The initial state for the first ``ForwardOp`` |
48| | | application. |
49+---------------+-------------------------------+---------------------------------------------------+
50| ``ForwardOp`` | Binary |Lambda Expression| | The operation to be executed on forward |
51| | | traversal. |
52+---------------+-------------------------------+---------------------------------------------------+
53
54
55Expression semantics
56--------------------
57
58For any |Forward Sequence| ``s``, binary |Lambda Expression| ``op``, and arbitrary type ``state``:
59
60
61.. parsed-literal::
62
63 typedef fold<s,state,op>::type t;
64
65:Return type:
66 A type.
67
68:Semantics:
69 Equivalent to
70
71 .. parsed-literal::
72
73 typedef iter_fold<
74 s
75 , state
76 , apply_wrap2< lambda<op>::type, _1, deref<_2> >
77 >::type t;
78
79
80Complexity
81----------
82
83Linear. Exactly ``size<s>::value`` applications of ``op``.
84
85
86Example
87-------
88
89.. parsed-literal::
90
91 typedef vector<long,float,short,double,float,long,long double> types;
92 typedef fold<
93 types
94 , int_<0>
95 , if_< is_float<_2>,next<_1>,_1 >
96 >::type number_of_floats;
97
98 BOOST_MPL_ASSERT_RELATION( number_of_floats::value, ==, 4 );
99
100
101See also
102--------
103
104|Algorithms|, |accumulate|, |reverse_fold|, |iter_fold|, |reverse_iter_fold|, |copy|, |copy_if|
105
106
107