]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mpl/doc/src/refmanual/fold.rst
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / mpl / doc / src / refmanual / fold.rst
1 .. Algorithms/Iteration Algorithms//fold
2
3 fold
4 ====
5
6 Synopsis
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
23 Description
24 -----------
25
26 Returns the result of the successive application of binary ``ForwardOp`` to the
27 result of the previous ``ForwardOp`` invocation (``State`` if it's the first call)
28 and every element of the sequence in the range |begin/end<Sequence>| in order.
29
30
31 Header
32 ------
33
34 .. parsed-literal::
35
36 #include <boost/mpl/fold.hpp>
37
38
39 Parameters
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
55 Expression semantics
56 --------------------
57
58 For 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
80 Complexity
81 ----------
82
83 Linear. Exactly ``size<s>::value`` applications of ``op``.
84
85
86 Example
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
101 See also
102 --------
103
104 |Algorithms|, |accumulate|, |reverse_fold|, |iter_fold|, |reverse_iter_fold|, |copy|, |copy_if|
105
106
107 .. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
108 Distributed under the Boost Software License, Version 1.0. (See accompanying
109 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)