• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
9    <title>reverse_fold &#8212; Boost.HigherOrderFunctions 0.6 documentation</title>
10
11    <link rel="stylesheet" href="../../../_static/boostbook.css" type="text/css" />
12    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../',
17        VERSION:     '0.6',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true,
21        SOURCELINK_SUFFIX: '.txt'
22      };
23    </script>
24    <script type="text/javascript" src="../../../_static/jquery.js"></script>
25    <script type="text/javascript" src="../../../_static/underscore.js"></script>
26    <script type="text/javascript" src="../../../_static/doctools.js"></script>
27    <link rel="index" title="Index" href="../../../genindex.html" />
28    <link rel="search" title="Search" href="../../../search.html" />
29    <link rel="next" title="rotate" href="rotate.html" />
30    <link rel="prev" title="reveal" href="reveal.html" />
31  </head>
32  <body role="document">
33<table cellpadding="2" width="100%"><tr>
34<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86"src="../../../_static/boost.png"></td>
35</tr></table>
36
37<div class="spirit-nav">
38<a accesskey="p"  href="reveal.html"><img src="../../../_static/prev.png" alt="Prev"></a>
39<a accesskey="u" href="../../../doc/src/reference.html"><img src="../../../_static/up.png" alt="Up"></a>
40<a accesskey="h" href="../../../doc/index.html"><img src="../../../_static/home.png" alt="Home"></a>
41<a accesskey="n"  href="rotate.html"><img src="../../../_static/next.png" alt="Next"></a>
42</div>
43
44
45    <div class="document">
46  <div class="chapter">
47      <div class="body" role="main">
48
49  <div class="section" id="reverse-fold">
50<h1>reverse_fold<a class="headerlink" href="#reverse-fold" title="Permalink to this headline">¶</a></h1>
51<div class="section" id="header">
52<h2>Header<a class="headerlink" href="#header" title="Permalink to this headline">¶</a></h2>
53<div class="highlight-cpp"><div class="highlight"><pre><span class="cp">#include</span> <span class="cpf">&lt;boost/hof/reverse_fold.hpp&gt;</span><span class="cp"></span>
54</pre></div>
55</div>
56</div>
57<div class="section" id="description">
58<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h2>
59<p>The <code class="docutils literal"><span class="pre">reverse_fold</span></code> function adaptor uses a binary function to apply a
60reverse [fold]
61(https://en.wikipedia.org/wiki/Fold_%28higher-order_function%29)(ie right
62fold in functional programming terms) operation to the arguments passed to
63the function. Additionally, an optional initial state can be provided,
64otherwise the first argument is used as the initial state.</p>
65<p>The arguments to the binary function, take first the state and then the
66argument.</p>
67</div>
68<div class="section" id="synopsis">
69<h2>Synopsis<a class="headerlink" href="#synopsis" title="Permalink to this headline">¶</a></h2>
70<div class="highlight-cpp"><div class="highlight"><pre><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">F</span><span class="p">,</span> <span class="k">class</span> <span class="nc">State</span><span class="o">&gt;</span>
71<span class="k">constexpr</span> <span class="n">reverse_fold_adaptor</span><span class="o">&lt;</span><span class="n">F</span><span class="p">,</span> <span class="n">State</span><span class="o">&gt;</span> <span class="n">reverse_fold</span><span class="p">(</span><span class="n">F</span> <span class="n">f</span><span class="p">,</span> <span class="n">State</span> <span class="n">s</span><span class="p">);</span>
72
73<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">F</span><span class="o">&gt;</span>
74<span class="k">constexpr</span> <span class="n">reverse_fold_adaptor</span><span class="o">&lt;</span><span class="n">F</span><span class="o">&gt;</span> <span class="n">reverse_fold</span><span class="p">(</span><span class="n">F</span> <span class="n">f</span><span class="p">);</span>
75</pre></div>
76</div>
77</div>
78<div class="section" id="semantics">
79<h2>Semantics<a class="headerlink" href="#semantics" title="Permalink to this headline">¶</a></h2>
80<div class="highlight-cpp"><div class="highlight"><pre><span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)()</span> <span class="o">==</span> <span class="n">z</span><span class="p">);</span>
81<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)(</span><span class="n">x</span><span class="p">,</span> <span class="n">xs</span><span class="p">...)</span> <span class="o">==</span> <span class="n">f</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">z</span><span class="p">)(</span><span class="n">xs</span><span class="p">...),</span> <span class="n">x</span><span class="p">));</span>
82<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="n">x</span><span class="p">);</span>
83<span class="n">assert</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">x</span><span class="p">,</span> <span class="n">xs</span><span class="p">...)</span> <span class="o">==</span> <span class="n">f</span><span class="p">(</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">f</span><span class="p">)(</span><span class="n">xs</span><span class="p">...),</span> <span class="n">x</span><span class="p">));</span>
84</pre></div>
85</div>
86</div>
87<div class="section" id="requirements">
88<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h2>
89<p>State must be:</p>
90<ul class="simple">
91<li>CopyConstructible</li>
92</ul>
93<p>F must be:</p>
94<ul class="simple">
95<li><a class="reference internal" href="../../../doc/src/concepts.html#binaryinvocable"><span class="std std-ref">BinaryInvocable</span></a></li>
96<li>MoveConstructible</li>
97</ul>
98</div>
99<div class="section" id="example">
100<h2>Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2>
101<div class="highlight-cpp"><div class="highlight"><pre><span class="cp">#include</span> <span class="cpf">&lt;boost/hof.hpp&gt;</span><span class="cp"></span>
102<span class="cp">#include</span> <span class="cpf">&lt;cassert&gt;</span><span class="cp"></span>
103
104<span class="k">struct</span> <span class="n">max_f</span>
105<span class="p">{</span>
106    <span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">T</span><span class="p">,</span> <span class="k">class</span> <span class="nc">U</span><span class="o">&gt;</span>
107    <span class="k">constexpr</span> <span class="n">T</span> <span class="k">operator</span><span class="p">()(</span><span class="n">T</span> <span class="n">x</span><span class="p">,</span> <span class="n">U</span> <span class="n">y</span><span class="p">)</span> <span class="k">const</span>
108    <span class="p">{</span>
109        <span class="k">return</span> <span class="n">x</span> <span class="o">&gt;</span> <span class="n">y</span> <span class="o">?</span> <span class="nl">x</span> <span class="p">:</span> <span class="n">y</span><span class="p">;</span>
110    <span class="p">}</span>
111<span class="p">};</span>
112
113<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
114    <span class="n">assert</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">hof</span><span class="o">::</span><span class="n">reverse_fold</span><span class="p">(</span><span class="n">max_f</span><span class="p">())(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="o">==</span> <span class="mi">5</span><span class="p">);</span>
115<span class="p">}</span>
116</pre></div>
117</div>
118</div>
119<div class="section" id="references">
120<h2>References<a class="headerlink" href="#references" title="Permalink to this headline">¶</a></h2>
121<ul class="simple">
122<li><a class="reference internal" href="../../../doc/src/more_examples.html#projections"><span class="std std-ref">Projections</span></a></li>
123<li><a class="reference internal" href="../../../doc/src/point_free.html#variadic-print"><span class="std std-ref">Variadic print</span></a></li>
124</ul>
125</div>
126</div>
127
128
129      </div>
130  </div>
131      <div class="clearer"></div>
132    </div>
133    <div class="footer" role="contentinfo">
134    <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
135    <td align="left"></td>
136    <td align="right"><div class="copyright-footer">
137            &#169; Copyright 2016, Paul Fultz II.
138
139          Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.6.
140          <p>Distributed under the Boost Software License, Version 1.0.
141          (See accompanying file <code class="filename">LICENSE_1_0.txt</code> or copy at
142          <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
143          </p>
144    </div></td>
145    </tr></table>
146    </div>
147  </body>
148</html>