Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
944 lines
88 KiB
HTML
944 lines
88 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.9.4"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Range-v3: Examples</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function() { init_search(); });
|
|
/* @license-end */
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">Range-v3
|
|
</div>
|
|
<div id="projectbrief">Range algorithms, views, and actions for the Standard Library</div>
|
|
</td>
|
|
<td> <div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<img id="MSearchSelect" src="search/mag_sel.svg"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
alt=""/>
|
|
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.4 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
|
|
/* @license-end */
|
|
</script>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function(){initNavTree('md_examples.html',''); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div><div class="header">
|
|
<div class="headertitle"><div class="title">Examples </div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><h1><a class="anchor" id="example-algorithms"></a>
|
|
Examples: Algorithms</h1>
|
|
<h2><a class="anchor" id="example-hello"></a>
|
|
Hello, Ranges!</h2>
|
|
<div class="fragment"><div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="all_8hpp.html">range/v3/all.hpp</a>></span> <span class="comment">// get everything</span></div>
|
|
<div class="line"><span class="preprocessor">#include <string></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::string s{<span class="stringliteral">"hello"</span>};</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="comment">// output: h e l l o</span></div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(s, [](<span class="keywordtype">char</span> c) { cout << c << <span class="charliteral">' '</span>; });</div>
|
|
<div class="line"> cout << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aall_8hpp_html"><div class="ttname"><a href="all_8hpp.html">all.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__runtime_html_ga8beaba5ae537715c97e180b05160cc03"><div class="ttname"><a href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">meta::for_each</a></div><div class="ttdeci">constexpr auto && for_each</div><div class="ttdoc">for_each(List, UnaryFunction) calls the UnaryFunction for each argument in the List.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2876</div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-any-all-none"></a>
|
|
any_of, all_of, none_of</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Demonstrates any_of, all_of, none_of</span></div>
|
|
<div class="line"><span class="comment">// output</span></div>
|
|
<div class="line"><span class="comment">// vector: [6,2,3,4,5,6]</span></div>
|
|
<div class="line"><span class="comment">// vector any_of is_six: true</span></div>
|
|
<div class="line"><span class="comment">// vector all_of is_six: false</span></div>
|
|
<div class="line"><span class="comment">// vector none_of is_six: false</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="all__of_8hpp.html">range/v3/algorithm/all_of.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="any__of_8hpp.html">range/v3/algorithm/any_of.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="none__of_8hpp.html">range/v3/algorithm/none_of.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i == 6; };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::vector<int> v{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> cout << std::boolalpha;</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span> << ranges::views::all(v) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector any_of is_six: "</span> << <a class="code hl_typedef" href="group__query.html#ga458c0596c85f41edc60b5230e76087e1">ranges::any_of</a>(v, is_six) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector all_of is_six: "</span> << <a class="code hl_typedef" href="group__query.html#gae65ae2955249d7b8322e1135f680103b">ranges::all_of</a>(v, is_six) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector none_of is_six: "</span> << <a class="code hl_typedef" href="group__query.html#ga0722ed3a3840cbeffd4d49876abbd7d8">ranges::none_of</a>(v, is_six) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aalgorithm_2for__each_8hpp_html"><div class="ttname"><a href="algorithm_2for__each_8hpp.html">for_each.hpp</a></div></div>
|
|
<div class="ttc" id="aall__of_8hpp_html"><div class="ttname"><a href="all__of_8hpp.html">all_of.hpp</a></div></div>
|
|
<div class="ttc" id="aany__of_8hpp_html"><div class="ttname"><a href="any__of_8hpp.html">any_of.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__query_html_ga0722ed3a3840cbeffd4d49876abbd7d8"><div class="ttname"><a href="group__query.html#ga0722ed3a3840cbeffd4d49876abbd7d8">meta::none_of</a></div><div class="ttdeci">empty< find_if< L, Fn > > none_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke<Fn, A>::value is false for all elements A i...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3063</div></div>
|
|
<div class="ttc" id="agroup__query_html_ga458c0596c85f41edc60b5230e76087e1"><div class="ttname"><a href="group__query.html#ga458c0596c85f41edc60b5230e76087e1">meta::any_of</a></div><div class="ttdeci">not_< empty< find_if< L, Fn > > > any_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke<Fn, A>::value is true for any element A in ...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3045</div></div>
|
|
<div class="ttc" id="agroup__query_html_gae65ae2955249d7b8322e1135f680103b"><div class="ttname"><a href="group__query.html#gae65ae2955249d7b8322e1135f680103b">meta::all_of</a></div><div class="ttdeci">empty< find_if< L, not_fn< Fn > > > all_of</div><div class="ttdoc">A Boolean integral constant wrapper around true if invoke<Fn, A>::value is true for all elements A in...</div><div class="ttdef"><b>Definition:</b> meta.hpp:3027</div></div>
|
|
<div class="ttc" id="anone__of_8hpp_html"><div class="ttname"><a href="none__of_8hpp.html">none_of.hpp</a></div></div>
|
|
<div class="ttc" id="aview_2all_8hpp_html"><div class="ttname"><a href="view_2all_8hpp.html">all.hpp</a></div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-count"></a>
|
|
count</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// This example demonstrates counting the number of</span></div>
|
|
<div class="line"><span class="comment">// elements that match a given value.</span></div>
|
|
<div class="line"><span class="comment">// output...</span></div>
|
|
<div class="line"><span class="comment">// vector: 2</span></div>
|
|
<div class="line"><span class="comment">// array: 2</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="count_8hpp.html">range/v3/algorithm/count.hpp</a>></span> <span class="comment">// specific includes</span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::vector<int> v{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <span class="comment">// note the count return is a numeric type</span></div>
|
|
<div class="line"> <span class="comment">// like int or long -- auto below make sure</span></div>
|
|
<div class="line"> <span class="comment">// it matches the implementation</span></div>
|
|
<div class="line"> <span class="keyword">auto</span> c = <a class="code hl_typedef" href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">ranges::count</a>(v, 6);</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span> << c << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::array<int, 6> a{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> c = <a class="code hl_typedef" href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">ranges::count</a>(a, 6);</div>
|
|
<div class="line"> cout << <span class="stringliteral">"array: "</span> << c << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="ttc" id="acount_8hpp_html"><div class="ttname"><a href="count_8hpp.html">count.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__query_html_ga8a395b36c7a028e67cf7cbaa28ab3ccc"><div class="ttname"><a href="group__query.html#ga8a395b36c7a028e67cf7cbaa28ab3ccc">meta::count</a></div><div class="ttdeci">_t< detail::count_< L, T > > count</div><div class="ttdoc">Count the number of times a type T appears in the list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2725</div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-count_if"></a>
|
|
count_if</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// This example counts element of a range that match a supplied predicate.</span></div>
|
|
<div class="line"><span class="comment">// output</span></div>
|
|
<div class="line"><span class="comment">// vector: 2</span></div>
|
|
<div class="line"><span class="comment">// array: 2</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <array></span></div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="count__if_8hpp.html">range/v3/algorithm/count_if.hpp</a>></span> <span class="comment">// specific includes</span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) -> <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> i == 6; };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::vector<int> v{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <span class="keyword">auto</span> c = <a class="code hl_typedef" href="group__query.html#ga665bd44f6d231438a3200df8030f593a">ranges::count_if</a>(v, is_six);</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span> << c << <span class="charliteral">'\n'</span>; <span class="comment">// 2</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::array<int, 6> a{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> c = <a class="code hl_typedef" href="group__query.html#ga665bd44f6d231438a3200df8030f593a">ranges::count_if</a>(a, is_six);</div>
|
|
<div class="line"> cout << <span class="stringliteral">"array: "</span> << c << <span class="charliteral">'\n'</span>; <span class="comment">// 2</span></div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="acount__if_8hpp_html"><div class="ttname"><a href="count__if_8hpp.html">count_if.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__query_html_ga665bd44f6d231438a3200df8030f593a"><div class="ttname"><a href="group__query.html#ga665bd44f6d231438a3200df8030f593a">meta::count_if</a></div><div class="ttdeci">_t< detail::count_if_< L, Fn > > count_if</div><div class="ttdoc">Count the number of times the predicate Fn evaluates to true for all the elements in the list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2787</div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-find"></a>
|
|
find, find_if, find_if_not on sequence containers</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// vector: *i: 6</span></div>
|
|
<div class="line"><span class="comment">// didn't find 10</span></div>
|
|
<div class="line"><span class="comment">// *i: 6</span></div>
|
|
<div class="line"><span class="comment">// *i: 2</span></div>
|
|
<div class="line"><span class="comment">// *i after ++ (2 expected): 2</span></div>
|
|
<div class="line"><span class="comment">// array: *i: 6</span></div>
|
|
<div class="line"><span class="comment">// list: *i: 6</span></div>
|
|
<div class="line"><span class="comment">// fwd_list: *i: 4</span></div>
|
|
<div class="line"><span class="comment">// deque: *i: 6</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <array></span></div>
|
|
<div class="line"><span class="preprocessor">#include <deque></span></div>
|
|
<div class="line"><span class="preprocessor">#include <forward_list></span></div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <list></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="all_8hpp.html">range/v3/all.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span> is_six = [](<span class="keywordtype">int</span> i) -> <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> i == 6; };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::vector<int> v{6, 2, 6, 4, 6, 1};</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 6); <span class="comment">// 1 2 3 4 5 6</span></div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 10); <span class="comment">// 1 2 3 4 5 6</span></div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i == <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"didn't find 10\n"</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#gaf33139f1b442de0272477e126d6d66a7">ranges::find_if</a>(v, is_six);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_function" href="group__group-algorithms.html#ga1fdf9bbeab3ee7279c1656c1b40e4f81">ranges::find_if_not</a>(v, is_six);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(v, 6);</div>
|
|
<div class="line"> i++;</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(v))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i after ++ (2 expected): "</span> << *i;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\narray: "</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::array<int, 6> a{6, 2, 3, 4, 5, 1};</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(a, 6);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(a))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nlist: "</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::list<int> li{6, 2, 3, 4, 5, 1};</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(li, 6);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(li))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nfwd_list: "</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::forward_list<int> fl{6, 2, 3, 4, 5, 1};</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(fl, 4);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(fl))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> cout << <span class="stringliteral">"\ndeque: "</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::deque<int> d{6, 2, 3, 4, 5, 1};</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">auto</span> i = <a class="code hl_typedef" href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">ranges::find</a>(d, 6);</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(i != <a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>(d))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> cout << <span class="stringliteral">"*i: "</span> << *i;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> cout << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="agroup__group-algorithms_html_ga1fdf9bbeab3ee7279c1656c1b40e4f81"><div class="ttname"><a href="group__group-algorithms.html#ga1fdf9bbeab3ee7279c1656c1b40e4f81">ranges::find_if_not</a></div><div class="ttdeci">constexpr I find_if_not(I first, S last, F pred, P proj=P{})</div><div class="ttdoc">template function find_if_not</div><div class="ttdef"><b>Definition:</b> find_if_not.hpp:49</div></div>
|
|
<div class="ttc" id="agroup__group-range_html_ga80d92c391f5b5c0a50156af5f9c9d8c7"><div class="ttname"><a href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a></div><div class="ttdeci">constexpr _end_::fn end</div><div class="ttdef"><b>Definition:</b> access.hpp:313</div></div>
|
|
<div class="ttc" id="agroup__query_html_ga4e7b439f707e529f3df7745ff7e2eb19"><div class="ttname"><a href="group__query.html#ga4e7b439f707e529f3df7745ff7e2eb19">meta::find</a></div><div class="ttdeci">drop< L, min< find_index< L, T >, size< L > > > find</div><div class="ttdoc">Return the tail of the list L starting at the first occurrence of T, if any such element exists; the ...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2388</div></div>
|
|
<div class="ttc" id="agroup__query_html_gaf33139f1b442de0272477e126d6d66a7"><div class="ttname"><a href="group__query.html#gaf33139f1b442de0272477e126d6d66a7">meta::find_if</a></div><div class="ttdeci">_t< detail::find_if_< L, Fn > > find_if</div><div class="ttdoc">Return the tail of the list L starting at the first element A such that invoke<Fn,...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2506</div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-for_each-seq"></a>
|
|
for_each on sequence containers</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Use the for_each to print from various containers</span></div>
|
|
<div class="line"><span class="comment">// output</span></div>
|
|
<div class="line"><span class="comment">// vector: 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment">// array: 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment">// list: 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment">// fwd_list: 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment">// deque: 1 2 3 4 5 6</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <array></span></div>
|
|
<div class="line"><span class="preprocessor">#include <deque></span></div>
|
|
<div class="line"><span class="preprocessor">#include <forward_list></span></div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <list></span></div>
|
|
<div class="line"><span class="preprocessor">#include <queue></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>></span> <span class="comment">// specific includes</span></div>
|
|
<div class="line"><span class="preprocessor">#include <stack></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span> print = [](<span class="keywordtype">int</span> i) { cout << i << <span class="charliteral">' '</span>; };</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span>;</div>
|
|
<div class="line"> std::vector<int> v{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(v, print); <span class="comment">// 1 2 3 4 5 6</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\narray: "</span>;</div>
|
|
<div class="line"> std::array<int, 6> a{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(a, print);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nlist: "</span>;</div>
|
|
<div class="line"> std::list<int> ll{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(ll, print);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nfwd_list: "</span>;</div>
|
|
<div class="line"> std::forward_list<int> fl{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(fl, print);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\ndeque: "</span>;</div>
|
|
<div class="line"> std::deque<int> d{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(d, print);</div>
|
|
<div class="line"> cout << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-for_each-assoc"></a>
|
|
for_each on associative containers</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// for_each with associative containers</span></div>
|
|
<div class="line"><span class="comment">// output</span></div>
|
|
<div class="line"><span class="comment">// set: 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment">// map: one:1 three:3 two:2</span></div>
|
|
<div class="line"><span class="comment">// unordered_map: three:3 one:1 two:2</span></div>
|
|
<div class="line"><span class="comment">// unordered_set: 6 5 4 3 2 1</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <map></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <set></span></div>
|
|
<div class="line"><span class="preprocessor">#include <string></span></div>
|
|
<div class="line"><span class="preprocessor">#include <unordered_map></span></div>
|
|
<div class="line"><span class="preprocessor">#include <unordered_set></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"><span class="keyword">using </span>std::string;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span> print = [](<span class="keywordtype">int</span> i) { cout << i << <span class="charliteral">' '</span>; };</div>
|
|
<div class="line"><span class="comment">// must take a pair for map types</span></div>
|
|
<div class="line"><span class="keyword">auto</span> printm = [](std::pair<string, int> p) {</div>
|
|
<div class="line"> cout << p.first << <span class="stringliteral">":"</span> << p.second << <span class="charliteral">' '</span>;</div>
|
|
<div class="line">};</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> cout << <span class="stringliteral">"set: "</span>;</div>
|
|
<div class="line"> std::set<int> si{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(si, print);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nmap: "</span>;</div>
|
|
<div class="line"> std::map<string, int> msi{{<span class="stringliteral">"one"</span>, 1}, {<span class="stringliteral">"two"</span>, 2}, {<span class="stringliteral">"three"</span>, 3}};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(msi, printm);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nunordered map: "</span>;</div>
|
|
<div class="line"> std::unordered_map<string, int> umsi{{<span class="stringliteral">"one"</span>, 1}, {<span class="stringliteral">"two"</span>, 2}, {<span class="stringliteral">"three"</span>, 3}};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(umsi, printm);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> cout << <span class="stringliteral">"\nunordered set: "</span>;</div>
|
|
<div class="line"> std::unordered_set<int> usi{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">ranges::for_each</a>(usi, print);</div>
|
|
<div class="line"> cout << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-is_sorted"></a>
|
|
is_sorted</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Check if a container is sorted</span></div>
|
|
<div class="line"><span class="comment">// output</span></div>
|
|
<div class="line"><span class="comment">// vector: true</span></div>
|
|
<div class="line"><span class="comment">// array: false</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <array></span></div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="is__sorted_8hpp.html">range/v3/algorithm/is_sorted.hpp</a>></span> <span class="comment">// specific includes</span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> cout << std::boolalpha;</div>
|
|
<div class="line"> std::vector<int> v{1, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> cout << <span class="stringliteral">"vector: "</span> << <a class="code hl_function" href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a>(v) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> std::array<int, 6> a{6, 2, 3, 4, 5, 6};</div>
|
|
<div class="line"> cout << <span class="stringliteral">"array: "</span> << <a class="code hl_function" href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a>(a) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="agroup__group-algorithms_html_gae6ece7fef102a0c4f612716b574fa0e3"><div class="ttname"><a href="group__group-algorithms.html#gae6ece7fef102a0c4f612716b574fa0e3">ranges::is_sorted</a></div><div class="ttdeci">constexpr bool is_sorted(I first, S last, R rel=R{}, P proj=P{})</div><div class="ttdoc">template function is_sorted</div><div class="ttdef"><b>Definition:</b> is_sorted.hpp:49</div></div>
|
|
<div class="ttc" id="ais__sorted_8hpp_html"><div class="ttname"><a href="is__sorted_8hpp.html">is_sorted.hpp</a></div></div>
|
|
</div><!-- fragment --><h1><a class="anchor" id="example-views"></a>
|
|
Examples: Views</h1>
|
|
<h2><a class="anchor" id="example-filter-transform"></a>
|
|
Filter and transform</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// This example demonstrates filtering and transforming a range on the</span></div>
|
|
<div class="line"><span class="comment">// fly with view adaptors.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <string></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="filter_8hpp.html">range/v3/view/filter.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span> main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::vector<int> <span class="keyword">const</span> vi{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};</div>
|
|
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
|
|
<div class="line"> <span class="keyword">auto</span> rng = vi | <a class="code hl_typedef" href="group__transformation.html#gac34d21074558f4ddc07a6206d5065619">views::filter</a>([](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i % 2 == 0; }) |</div>
|
|
<div class="line"> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> std::to_string(i); });</div>
|
|
<div class="line"> <span class="comment">// prints: [2,4,6,8,10]</span></div>
|
|
<div class="line"> cout << rng << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="afilter_8hpp_html"><div class="ttname"><a href="filter_8hpp.html">filter.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__transformation_html_ga32b72eeac93fde990739bfe3d1729207"><div class="ttname"><a href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">meta::transform</a></div><div class="ttdeci">_t< detail::transform_< Args... > > transform</div><div class="ttdoc">Return a new meta::list constructed by transforming all the elements in L with the unary invocable Fn...</div><div class="ttdef"><b>Definition:</b> meta.hpp:1852</div></div>
|
|
<div class="ttc" id="agroup__transformation_html_gac34d21074558f4ddc07a6206d5065619"><div class="ttname"><a href="group__transformation.html#gac34d21074558f4ddc07a6206d5065619">meta::filter</a></div><div class="ttdeci">join< transform< L, detail::filter_< Pred > > > filter</div><div class="ttdoc">Returns a new meta::list where only those elements of L that satisfy the Callable Pred such that invo...</div><div class="ttdef"><b>Definition:</b> meta.hpp:2818</div></div>
|
|
<div class="ttc" id="aview_2transform_8hpp_html"><div class="ttname"><a href="view_2transform_8hpp.html">transform.hpp</a></div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-accumulate-ints"></a>
|
|
Generate ints and accumulate</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Sums the first ten squares and prints them, using views::ints to generate</span></div>
|
|
<div class="line"><span class="comment">// and infinite range of integers, views::transform to square them, views::take</span></div>
|
|
<div class="line"><span class="comment">// to drop all but the first 10, and accumulate to sum them.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="accumulate_8hpp.html">range/v3/numeric/accumulate.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2take_8hpp.html">range/v3/view/take.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span> main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
|
|
<div class="line"> <span class="keywordtype">int</span> sum = <a class="code hl_typedef" href="group__transformation.html#gadec7869718bf0ddf69579775156b351d">accumulate</a>(views::ints(1, unreachable) | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="keywordtype">int</span> i) {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> i * i;</div>
|
|
<div class="line"> }) | views::take(10),</div>
|
|
<div class="line"> 0);</div>
|
|
<div class="line"> <span class="comment">// prints: 385</span></div>
|
|
<div class="line"> cout << sum << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aaccumulate_8hpp_html"><div class="ttname"><a href="accumulate_8hpp.html">accumulate.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__transformation_html_gadec7869718bf0ddf69579775156b351d"><div class="ttname"><a href="group__transformation.html#gadec7869718bf0ddf69579775156b351d">meta::accumulate</a></div><div class="ttdeci">fold< L, State, Fn > accumulate</div><div class="ttdoc">An alias for meta::fold.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1597</div></div>
|
|
<div class="ttc" id="aview_2iota_8hpp_html"><div class="ttname"><a href="view_2iota_8hpp.html">iota.hpp</a></div></div>
|
|
<div class="ttc" id="aview_2take_8hpp_html"><div class="ttname"><a href="view_2take_8hpp.html">take.hpp</a></div></div>
|
|
</div><!-- fragment --><h2><a class="anchor" id="example-comprehension-conversion"></a>
|
|
Convert a range comprehension to a vector</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Use a range comprehension (views::for_each) to construct a custom range, and</span></div>
|
|
<div class="line"><span class="comment">// then convert it to a std::vector.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="conversion_8hpp.html">range/v3/range/conversion.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2for__each_8hpp.html">range/v3/view/for_each.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="repeat__n_8hpp.html">range/v3/view/repeat_n.hpp</a>></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span> main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
|
|
<div class="line"> <span class="keyword">auto</span> vi = <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">views::for_each</a>(views::ints(1, 6),</div>
|
|
<div class="line"> [](<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> yield_from(<a class="code hl_typedef" href="group__list.html#gab4b5da3947303335fc4139f163ed4748">views::repeat_n</a>(i, i)); }) |</div>
|
|
<div class="line"> to<std::vector>();</div>
|
|
<div class="line"> <span class="comment">// prints: [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]</span></div>
|
|
<div class="line"> cout << views::all(vi) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aconversion_8hpp_html"><div class="ttname"><a href="conversion_8hpp.html">conversion.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__list_html_gab4b5da3947303335fc4139f163ed4748"><div class="ttname"><a href="group__list.html#gab4b5da3947303335fc4139f163ed4748">meta::repeat_n</a></div><div class="ttdeci">repeat_n_c< N::type::value, T > repeat_n</div><div class="ttdoc">Generate list<T,T,T...T> of size N arguments.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1899</div></div>
|
|
<div class="ttc" id="arepeat__n_8hpp_html"><div class="ttname"><a href="repeat__n_8hpp.html">repeat_n.hpp</a></div></div>
|
|
<div class="ttc" id="aview_2for__each_8hpp_html"><div class="ttname"><a href="view_2for__each_8hpp.html">for_each.hpp</a></div></div>
|
|
</div><!-- fragment --><h1><a class="anchor" id="example-actions"></a>
|
|
Examples: Actions</h1>
|
|
<h2><a class="anchor" id="example-sort-unique"></a>
|
|
Remove non-unique elements from a container</h2>
|
|
<div class="fragment"><div class="line"><span class="comment">// Remove all non-unique elements from a container.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="action_2sort_8hpp.html">range/v3/action/sort.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="action_2unique_8hpp.html">range/v3/action/unique.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>></span></div>
|
|
<div class="line"><span class="keyword">using </span>std::cout;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span> main()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::vector<int> vi{9, 4, 5, 2, 9, 1, 0, 2, 6, 7, 4, 5, 6, 5, 9, 2, 7,</div>
|
|
<div class="line"> 1, 4, 5, 3, 8, 5, 0, 2, 9, 3, 7, 5, 7, 5, 5, 6, 1,</div>
|
|
<div class="line"> 4, 3, 1, 8, 4, 0, 7, 8, 8, 2, 6, 5, 3, 4, 5};</div>
|
|
<div class="line"> <span class="keyword">using namespace </span>ranges;</div>
|
|
<div class="line"> vi |= <a class="code hl_typedef" href="group__transformation.html#ga24714e0a1e7b99a57052a63d815955a7">actions::sort</a> | <a class="code hl_variable" href="action_2unique_8hpp.html#a2df52ed5e91e92ea7d2d7b1ed5408fcf">actions::unique</a>;</div>
|
|
<div class="line"> <span class="comment">// prints: [0,1,2,3,4,5,6,7,8,9]</span></div>
|
|
<div class="line"> cout << views::all(vi) << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aaction_2sort_8hpp_html"><div class="ttname"><a href="action_2sort_8hpp.html">sort.hpp</a></div></div>
|
|
<div class="ttc" id="aaction_2unique_8hpp_html"><div class="ttname"><a href="action_2unique_8hpp.html">unique.hpp</a></div></div>
|
|
<div class="ttc" id="aaction_2unique_8hpp_html_a2df52ed5e91e92ea7d2d7b1ed5408fcf"><div class="ttname"><a href="action_2unique_8hpp.html#a2df52ed5e91e92ea7d2d7b1ed5408fcf">unique</a></div><div class="ttdeci">constexpr action_closure< unique_fn > unique</div><div class="ttdef"><b>Definition:</b> unique.hpp:57</div></div>
|
|
<div class="ttc" id="agroup__transformation_html_ga24714e0a1e7b99a57052a63d815955a7"><div class="ttname"><a href="group__transformation.html#ga24714e0a1e7b99a57052a63d815955a7">meta::sort</a></div><div class="ttdeci">_t< detail::sort_< L, Fn > > sort</div><div class="ttdoc">Return a new meta::list that is sorted according to invocable predicate Fn.</div><div class="ttdef"><b>Definition:</b> meta.hpp:3277</div></div>
|
|
</div><!-- fragment --><h1><a class="anchor" id="example-gestalt"></a>
|
|
Examples: Putting it all together</h1>
|
|
<h2><a class="anchor" id="example-calendar"></a>
|
|
Calendar</h2>
|
|
<div class="fragment"><div class="line"> </div>
|
|
<div class="line"><span class="comment">// Usage:</span></div>
|
|
<div class="line"><span class="comment">// calendar 2015</span></div>
|
|
<div class="line"><span class="comment">//</span></div>
|
|
<div class="line"><span class="comment">// Output:</span></div>
|
|
<div class="line"><span class="comment">/*</span></div>
|
|
<div class="line"><span class="comment"> January February March</span></div>
|
|
<div class="line"><span class="comment"> 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7</span></div>
|
|
<div class="line"><span class="comment"> 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14</span></div>
|
|
<div class="line"><span class="comment"> 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21</span></div>
|
|
<div class="line"><span class="comment"> 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28</span></div>
|
|
<div class="line"><span class="comment"> 25 26 27 28 29 30 31 29 30 31</span></div>
|
|
<div class="line"><span class="comment"></span> </div>
|
|
<div class="line"><span class="comment"> April May June</span></div>
|
|
<div class="line"><span class="comment"> 1 2 3 4 1 2 1 2 3 4 5 6</span></div>
|
|
<div class="line"><span class="comment"> 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13</span></div>
|
|
<div class="line"><span class="comment"> 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20</span></div>
|
|
<div class="line"><span class="comment"> 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27</span></div>
|
|
<div class="line"><span class="comment"> 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30</span></div>
|
|
<div class="line"><span class="comment"> 31</span></div>
|
|
<div class="line"><span class="comment"> July August September</span></div>
|
|
<div class="line"><span class="comment"> 1 2 3 4 1 1 2 3 4 5</span></div>
|
|
<div class="line"><span class="comment"> 5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12</span></div>
|
|
<div class="line"><span class="comment"> 12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19</span></div>
|
|
<div class="line"><span class="comment"> 19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26</span></div>
|
|
<div class="line"><span class="comment"> 26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30</span></div>
|
|
<div class="line"><span class="comment"> 30 31</span></div>
|
|
<div class="line"><span class="comment"> October November December</span></div>
|
|
<div class="line"><span class="comment"> 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5</span></div>
|
|
<div class="line"><span class="comment"> 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12</span></div>
|
|
<div class="line"><span class="comment"> 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19</span></div>
|
|
<div class="line"><span class="comment"> 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26</span></div>
|
|
<div class="line"><span class="comment"> 25 26 27 28 29 30 31 29 30 27 28 29 30 31</span></div>
|
|
<div class="line"><span class="comment">// */</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// Credits:</span></div>
|
|
<div class="line"><span class="comment">// Thanks to H. S. Teoh for the article that served as the</span></div>
|
|
<div class="line"><span class="comment">// inspiration for this example:</span></div>
|
|
<div class="line"><span class="comment">// <http://wiki.dlang.org/Component_programming_with_ranges></span></div>
|
|
<div class="line"><span class="comment">// Thanks to github's Arzar for bringing date::week_number</span></div>
|
|
<div class="line"><span class="comment">// to my attention.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="preprocessor">#include <boost/date_time/gregorian/gregorian.hpp></span></div>
|
|
<div class="line"><span class="preprocessor">#include <boost/format.hpp></span></div>
|
|
<div class="line"><span class="preprocessor">#include <boost/lexical_cast.hpp></span></div>
|
|
<div class="line"><span class="preprocessor">#include <boost/program_options.hpp></span></div>
|
|
<div class="line"><span class="preprocessor">#include <algorithm></span></div>
|
|
<div class="line"><span class="preprocessor">#include <cstddef></span></div>
|
|
<div class="line"><span class="preprocessor">#include <functional></span></div>
|
|
<div class="line"><span class="preprocessor">#include <iostream></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="action_2join_8hpp.html">range/v3/action/join.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="algorithm_2copy_8hpp.html">range/v3/algorithm/copy.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="algorithm_2for__each_8hpp.html">range/v3/algorithm/for_each.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="mismatch_8hpp.html">range/v3/algorithm/mismatch.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="core_8hpp.html">range/v3/core.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="stream__iterators_8hpp.html">range/v3/iterator/stream_iterators.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2all_8hpp.html">range/v3/view/all.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="chunk_8hpp.html">range/v3/view/chunk.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="chunk__by_8hpp.html">range/v3/view/chunk_by.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="concat_8hpp.html">range/v3/view/concat.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2iota_8hpp.html">range/v3/view/iota.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2join_8hpp.html">range/v3/view/join.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="repeat__n_8hpp.html">range/v3/view/repeat_n.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="single_8hpp.html">range/v3/view/single.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2take_8hpp.html">range/v3/view/take.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <<a class="code" href="view_2transform_8hpp.html">range/v3/view/transform.hpp</a>></span></div>
|
|
<div class="line"><span class="preprocessor">#include <stdexcept></span></div>
|
|
<div class="line"><span class="preprocessor">#include <string></span></div>
|
|
<div class="line"><span class="preprocessor">#include <utility></span></div>
|
|
<div class="line"><span class="preprocessor">#include <vector></span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">namespace </span>po = boost::program_options;</div>
|
|
<div class="line"><span class="keyword">namespace </span>greg = boost::gregorian;</div>
|
|
<div class="line"><span class="keyword">using </span>date = greg::date;</div>
|
|
<div class="line"><span class="keyword">using </span>day = greg::date_duration;</div>
|
|
<div class="line"><span class="keyword">using namespace </span>ranges;</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">namespace </span>boost</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keyword">namespace </span>gregorian</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> date &operator++(date &d)</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> d = d + day(1);</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> date operator++(date &d, <span class="keywordtype">int</span>)</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> ++d - day(1);</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
<div class="line"><span class="keyword">namespace </span>ranges</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keyword">template</span><></div>
|
|
<div class="line"> <span class="keyword">struct </span><a class="code hl_struct" href="structranges_1_1incrementable__traits.html">incrementable_traits</a><date></div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keyword">using </span>difference_type = date::duration_type::duration_rep::int_type;</div>
|
|
<div class="line"> };</div>
|
|
<div class="line">}</div>
|
|
<div class="line">CPP_assert(incrementable<date>);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">dates(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> start, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> stop)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> views::iota(date{start, greg::Jan, 1}, date{stop, greg::Jan, 1});</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">dates_from(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> year)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> views::iota(date{year, greg::Jan, 1});</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">by_month()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> views::chunk_by(</div>
|
|
<div class="line"> [](date a, date b) { <span class="keywordflow">return</span> a.month() == b.month(); });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">by_week()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> views::chunk_by([](date a, date b) {</div>
|
|
<div class="line"> <span class="comment">// ++a because week_number is Mon-Sun and we want Sun-Sat</span></div>
|
|
<div class="line"> <span class="keywordflow">return</span> (++a).week_number() == (++b).week_number();</div>
|
|
<div class="line"> });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line">std::string</div>
|
|
<div class="line">format_day(date d)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">"%|3|"</span>) % d.day());</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<date>>: month grouped by weeks.</span></div>
|
|
<div class="line"><span class="comment">// Out: range<std::string>: month with formatted weeks.</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">format_weeks()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="comment">/*range<date>*/</span> <span class="keyword">auto</span> week) {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">"%1%%2%%|22t|"</span>) %</div>
|
|
<div class="line"> std::string(<a class="code hl_typedef" href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">front</a>(week).day_of_week() * 3u, <span class="charliteral">' '</span>) %</div>
|
|
<div class="line"> (week | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(format_day) | <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">actions::join</a>));</div>
|
|
<div class="line"> });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// Return a formatted string with the title of the month</span></div>
|
|
<div class="line"><span class="comment">// corresponding to a date.</span></div>
|
|
<div class="line">std::string</div>
|
|
<div class="line">month_title(date d)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> boost::str(boost::format(<span class="stringliteral">"%|=22|"</span>) % d.month().as_long_string());</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<date>>: year of months of days</span></div>
|
|
<div class="line"><span class="comment">// Out: range<range<std::string>>: year of months of formatted wks</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">layout_months()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>([](<span class="comment">/*range<date>*/</span> <span class="keyword">auto</span> month) {</div>
|
|
<div class="line"> <span class="keyword">auto</span> week_count =</div>
|
|
<div class="line"> <span class="keyword">static_cast<</span>std::ptrdiff_t<span class="keyword">></span>(<a class="code hl_variable" href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">distance</a>(month | by_week()));</div>
|
|
<div class="line"> <span class="keywordflow">return</span> views::concat(</div>
|
|
<div class="line"> views::single(month_title(<a class="code hl_typedef" href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">front</a>(month))),</div>
|
|
<div class="line"> month | by_week() | format_weeks(),</div>
|
|
<div class="line"> <a class="code hl_typedef" href="group__list.html#gab4b5da3947303335fc4139f163ed4748">views::repeat_n</a>(std::string(22, <span class="charliteral">' '</span>), 6 - week_count));</div>
|
|
<div class="line"> });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// Flattens a range of ranges by iterating the inner</span></div>
|
|
<div class="line"><span class="comment">// ranges in round-robin fashion.</span></div>
|
|
<div class="line"><span class="keyword">template</span><<span class="keyword">class</span> Rngs></div>
|
|
<div class="line"><span class="keyword">class </span>interleave_view : <span class="keyword">public</span> <a class="code hl_struct" href="structranges_1_1view__facade.html">view_facade</a><interleave_view<Rngs>></div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keyword">friend</span> range_access;</div>
|
|
<div class="line"> std::vector<range_value_t<Rngs>> rngs_;</div>
|
|
<div class="line"> <span class="keyword">struct </span>cursor;</div>
|
|
<div class="line"> cursor begin_cursor()</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> {0, &rngs_, <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(rngs_, <a class="code hl_variable" href="group__group-range.html#ga446b20253a26c93ef3004fcbfcbf3ec3">ranges::begin</a>) | to<std::vector>};</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">public</span>:</div>
|
|
<div class="line"> interleave_view() = <span class="keywordflow">default</span>;</div>
|
|
<div class="line"> <span class="keyword">explicit</span> interleave_view(Rngs rngs)</div>
|
|
<div class="line"> : rngs_(<a class="code hl_namespace" href="namespacestd.html">std</a>::<a class="code hl_variable" href="group__group-utility.html#ga20b5b25347e7f8173b2118fdb5ea5f58">move</a>(rngs) | <a class="code hl_function" href="group__group-range.html#ga698d78f9b587a09e6c4ac1ef683d2b18">to</a><<a class="code hl_namespace" href="namespacestd.html">std</a>::vector>)</div>
|
|
<div class="line"> {}</div>
|
|
<div class="line">};</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keyword">template</span><<span class="keyword">class</span> Rngs></div>
|
|
<div class="line"><span class="keyword">struct </span>interleave_view<Rngs>::cursor</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a> n_;</div>
|
|
<div class="line"> std::vector<range_value_t<Rngs>> *rngs_;</div>
|
|
<div class="line"> std::vector<iterator_t<range_value_t<Rngs>>> its_;</div>
|
|
<div class="line"> <span class="keyword">decltype</span>(<span class="keyword">auto</span>) read() <span class="keyword">const</span></div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> *its_[n_];</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> <span class="keywordtype">void</span> <a class="code hl_variable" href="group__group-iterator.html#gaf136ff254688f2c24f5c5f58df7ff56d">next</a>()</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(0 == ((++n_) %= its_.size()))</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__runtime.html#ga8beaba5ae537715c97e180b05160cc03">for_each</a>(its_, [](<span class="keyword">auto</span> &it) { ++it; });</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> <span class="keywordtype">bool</span> <a class="code hl_function" href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">equal</a>(<a class="code hl_struct" href="structranges_1_1default__sentinel__t.html">default_sentinel_t</a>)<span class="keyword"> const</span></div>
|
|
<div class="line"><span class="keyword"> </span>{</div>
|
|
<div class="line"> <span class="keywordflow">if</span>(n_ != 0)</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"> <span class="keyword">auto</span> ends = *rngs_ | <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(<a class="code hl_variable" href="group__group-range.html#ga80d92c391f5b5c0a50156af5f9c9d8c7">ranges::end</a>);</div>
|
|
<div class="line"> <span class="keywordflow">return</span> its_.end() != <a class="code hl_function" href="group__group-algorithms.html#gabf62a140e62356a8d885adc36d5fd2ed">std::mismatch</a>(</div>
|
|
<div class="line"> its_.begin(), its_.end(), ends.begin(), std::not_equal_to<>{}).first;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> CPP_member</div>
|
|
<div class="line"> <span class="keyword">auto</span> <a class="code hl_function" href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">equal</a>(cursor <span class="keyword">const</span>& that) <span class="keyword">const</span> -> CPP_ret(<span class="keywordtype">bool</span>)(</div>
|
|
<div class="line"> <span class="keyword">requires</span> forward_range<range_value_t<Rngs>>)</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <span class="keywordflow">return</span> n_ == that.n_ && its_ == that.its_;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line">};</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<T>></span></div>
|
|
<div class="line"><span class="comment">// Out: range<T>, flattened by walking the ranges</span></div>
|
|
<div class="line"><span class="comment">// round-robin fashion.</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">interleave()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_variable" href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">make_view_closure</a>([](<span class="keyword">auto</span> &&rngs) {</div>
|
|
<div class="line"> <span class="keyword">using </span>Rngs = <span class="keyword">decltype</span>(rngs);</div>
|
|
<div class="line"> <span class="keywordflow">return</span> interleave_view<views::all_t<Rngs>>(</div>
|
|
<div class="line"> views::all(std::forward<Rngs>(rngs)));</div>
|
|
<div class="line"> });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<T>></span></div>
|
|
<div class="line"><span class="comment">// Out: range<range<T>>, transposing the rows and columns.</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line"><a class="code hl_typedef" href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">transpose</a>()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_variable" href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">make_view_closure</a>([](<span class="keyword">auto</span> &&rngs) {</div>
|
|
<div class="line"> <span class="keyword">using </span>Rngs = <span class="keyword">decltype</span>(rngs);</div>
|
|
<div class="line"> CPP_assert(forward_range<Rngs>);</div>
|
|
<div class="line"> <span class="keywordflow">return</span> std::forward<Rngs>(rngs)</div>
|
|
<div class="line"> | interleave()</div>
|
|
<div class="line"> | views::chunk(<span class="keyword">static_cast<</span><a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a><span class="keyword">></span>(<a class="code hl_variable" href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">distance</a>(rngs)));</div>
|
|
<div class="line"> });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<range<string>>></span></div>
|
|
<div class="line"><span class="comment">// Out: range<range<range<string>>>, transposing months.</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">transpose_months()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(</div>
|
|
<div class="line"> [](<span class="comment">/*range<range<string>>*/</span> <span class="keyword">auto</span> rng) { <span class="keywordflow">return</span> rng | <a class="code hl_typedef" href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">transpose</a>(); });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<range<string>></span></div>
|
|
<div class="line"><span class="comment">// Out: range<string>, joining the strings of the inner ranges</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">join_months()</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#ga32b72eeac93fde990739bfe3d1729207">views::transform</a>(</div>
|
|
<div class="line"> [](<span class="comment">/*range<string>*/</span> <span class="keyword">auto</span> rng) { <span class="keywordflow">return</span> <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">actions::join</a>(rng); });</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// In: range<date></span></div>
|
|
<div class="line"><span class="comment">// Out: range<string>, lines of formatted output</span></div>
|
|
<div class="line"><span class="keyword">auto</span></div>
|
|
<div class="line">format_calendar(<a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a> months_per_line)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="keywordflow">return</span></div>
|
|
<div class="line"> <span class="comment">// Group the dates by month:</span></div>
|
|
<div class="line"> by_month()</div>
|
|
<div class="line"> <span class="comment">// Format the month into a range of strings:</span></div>
|
|
<div class="line"> | layout_months()</div>
|
|
<div class="line"> <span class="comment">// Group the months that belong side-by-side:</span></div>
|
|
<div class="line"> | views::chunk(months_per_line)</div>
|
|
<div class="line"> <span class="comment">// Transpose the rows and columns of the size-by-side months:</span></div>
|
|
<div class="line"> | transpose_months()</div>
|
|
<div class="line"> <span class="comment">// Ungroup the side-by-side months:</span></div>
|
|
<div class="line"> | <a class="code hl_typedef" href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">views::join</a></div>
|
|
<div class="line"> <span class="comment">// Join the strings of the transposed months:</span></div>
|
|
<div class="line"> | join_months();</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="keywordtype">int</span></div>
|
|
<div class="line">main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) <span class="keyword">try</span></div>
|
|
<div class="line">{</div>
|
|
<div class="line"> <span class="comment">// Declare the supported options.</span></div>
|
|
<div class="line"> po::options_description desc(<span class="stringliteral">"Allowed options"</span>);</div>
|
|
<div class="line"> desc.add_options()(<span class="stringliteral">"help"</span>, <span class="stringliteral">"produce help message"</span>)(</div>
|
|
<div class="line"> <span class="stringliteral">"start"</span>, po::value<unsigned short>(), <span class="stringliteral">"Year to start"</span>)(</div>
|
|
<div class="line"> <span class="stringliteral">"stop"</span>, po::value<std::string>(), <span class="stringliteral">"Year to stop"</span>)(</div>
|
|
<div class="line"> <span class="stringliteral">"per-line"</span>,</div>
|
|
<div class="line"> po::value<std::size_t>()->default_value(3u),</div>
|
|
<div class="line"> <span class="stringliteral">"Nbr of months per line"</span>);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> po::positional_options_description p;</div>
|
|
<div class="line"> p.add(<span class="stringliteral">"start"</span>, 1).add(<span class="stringliteral">"stop"</span>, 1);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> po::variables_map vm;</div>
|
|
<div class="line"> po::store(</div>
|
|
<div class="line"> po::command_line_parser(argc, argv).options(desc).positional(p).run(),</div>
|
|
<div class="line"> vm);</div>
|
|
<div class="line"> po::notify(vm);</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span>(vm.count(<span class="stringliteral">"help"</span>) || 1 != vm.count(<span class="stringliteral">"start"</span>))</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> std::cerr << desc << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> <span class="keywordflow">return</span> 1;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> start = vm[<span class="stringliteral">"start"</span>].as<<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>>();</div>
|
|
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> stop = 0 == vm.count(<span class="stringliteral">"stop"</span>)</div>
|
|
<div class="line"> ? (<span class="keywordtype">unsigned</span> short)(start + 1)</div>
|
|
<div class="line"> : vm[<span class="stringliteral">"stop"</span>].as<std::string>() == <span class="stringliteral">"never"</span></div>
|
|
<div class="line"> ? (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1</div>
|
|
<div class="line"> : boost::lexical_cast<unsigned short>(</div>
|
|
<div class="line"> vm[<span class="stringliteral">"stop"</span>].as<std::string>());</div>
|
|
<div class="line"> <span class="keyword">auto</span> <span class="keyword">const</span> months_per_line = vm[<span class="stringliteral">"per-line"</span>].as<<a class="code hl_typedef" href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">std::size_t</a>>();</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span>(stop != (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1 && stop <= start)</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> std::cerr << <span class="stringliteral">"ERROR: The stop year must be larger than the start"</span></div>
|
|
<div class="line"> << <span class="charliteral">'\n'</span>;</div>
|
|
<div class="line"> <span class="keywordflow">return</span> 1;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="keywordflow">if</span>((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)-1 != stop)</div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">copy</a>(dates(start, stop) | format_calendar(months_per_line),</div>
|
|
<div class="line"> <a class="code hl_struct" href="structranges_1_1ostream__iterator.html">ostream_iterator<></a>(std::cout, <span class="stringliteral">"\n"</span>));</div>
|
|
<div class="line"> }</div>
|
|
<div class="line"> <span class="keywordflow">else</span></div>
|
|
<div class="line"> {</div>
|
|
<div class="line"> <a class="code hl_variable" href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">copy</a>(dates_from(start) | format_calendar(months_per_line),</div>
|
|
<div class="line"> <a class="code hl_struct" href="structranges_1_1ostream__iterator.html">ostream_iterator<></a>(std::cout, <span class="stringliteral">"\n"</span>));</div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
<div class="line"><span class="keywordflow">catch</span>(std::exception &e)</div>
|
|
<div class="line">{</div>
|
|
<div class="line"> std::cerr << <span class="stringliteral">"ERROR: Unhandled exception\n"</span>;</div>
|
|
<div class="line"> std::cerr << <span class="stringliteral">" what(): "</span> << e.what();</div>
|
|
<div class="line"> <span class="keywordflow">return</span> 1;</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="aaction_2join_8hpp_html"><div class="ttname"><a href="action_2join_8hpp.html">join.hpp</a></div></div>
|
|
<div class="ttc" id="aalgorithm_2copy_8hpp_html"><div class="ttname"><a href="algorithm_2copy_8hpp.html">copy.hpp</a></div></div>
|
|
<div class="ttc" id="achunk_8hpp_html"><div class="ttname"><a href="chunk_8hpp.html">chunk.hpp</a></div></div>
|
|
<div class="ttc" id="achunk__by_8hpp_html"><div class="ttname"><a href="chunk__by_8hpp.html">chunk_by.hpp</a></div></div>
|
|
<div class="ttc" id="aconcat_8hpp_html"><div class="ttname"><a href="concat_8hpp.html">concat.hpp</a></div></div>
|
|
<div class="ttc" id="acore_8hpp_html"><div class="ttname"><a href="core_8hpp.html">core.hpp</a></div></div>
|
|
<div class="ttc" id="agroup__group-algorithms_html_gabf62a140e62356a8d885adc36d5fd2ed"><div class="ttname"><a href="group__group-algorithms.html#gabf62a140e62356a8d885adc36d5fd2ed">ranges::mismatch</a></div><div class="ttdeci">mismatch_result< I1, I2 > mismatch(I1 begin1, S1 end1, I2 begin2, C pred=C{}, P1 proj1=P1{}, P2 proj2=P2{})</div><div class="ttdoc">function template mismatch</div><div class="ttdef"><b>Definition:</b> mismatch.hpp:56</div></div>
|
|
<div class="ttc" id="agroup__group-algorithms_html_gad02116ac1a7f39cc324dd959e9c1d1de"><div class="ttname"><a href="group__group-algorithms.html#gad02116ac1a7f39cc324dd959e9c1d1de">ranges::equal</a></div><div class="ttdeci">constexpr bool equal(I0 begin0, S0 end0, I1 begin1, C pred=C{}, P0 proj0=P0{}, P1 proj1=P1{})</div><div class="ttdoc">function template equal</div><div class="ttdef"><b>Definition:</b> equal.hpp:66</div></div>
|
|
<div class="ttc" id="agroup__group-iterator_html_gaa5892e49da80688f61e93faf07c98746"><div class="ttname"><a href="group__group-iterator.html#gaa5892e49da80688f61e93faf07c98746">ranges::distance</a></div><div class="ttdeci">constexpr distance_fn distance</div><div class="ttdef"><b>Definition:</b> operations.hpp:561</div></div>
|
|
<div class="ttc" id="agroup__group-iterator_html_gaf136ff254688f2c24f5c5f58df7ff56d"><div class="ttname"><a href="group__group-iterator.html#gaf136ff254688f2c24f5c5f58df7ff56d">ranges::next</a></div><div class="ttdeci">constexpr next_fn next</div><div class="ttdef"><b>Definition:</b> operations.hpp:316</div></div>
|
|
<div class="ttc" id="agroup__group-range_html_ga446b20253a26c93ef3004fcbfcbf3ec3"><div class="ttname"><a href="group__group-range.html#ga446b20253a26c93ef3004fcbfcbf3ec3">ranges::begin</a></div><div class="ttdeci">constexpr _begin_::fn begin</div><div class="ttdef"><b>Definition:</b> access.hpp:182</div></div>
|
|
<div class="ttc" id="agroup__group-range_html_ga698d78f9b587a09e6c4ac1ef683d2b18"><div class="ttname"><a href="group__group-range.html#ga698d78f9b587a09e6c4ac1ef683d2b18">ranges::to</a></div><div class="ttdeci">auto to() -> detail::to_container_fn< detail::from_range< ContT > ></div><div class="ttdoc">For initializing a container of the specified type with the elements of an Range.</div><div class="ttdef"><b>Definition:</b> conversion.hpp:410</div></div>
|
|
<div class="ttc" id="agroup__group-utility_html_ga20b5b25347e7f8173b2118fdb5ea5f58"><div class="ttname"><a href="group__group-utility.html#ga20b5b25347e7f8173b2118fdb5ea5f58">ranges::aux::move</a></div><div class="ttdeci">constexpr move_fn move</div><div class="ttdef"><b>Definition:</b> move.hpp:52</div></div>
|
|
<div class="ttc" id="agroup__group-utility_html_gaa77a9f8d78fe2ed9c14bde30e7523746"><div class="ttname"><a href="group__group-utility.html#gaa77a9f8d78fe2ed9c14bde30e7523746">ranges::aux::copy</a></div><div class="ttdeci">constexpr copy_fn copy</div><div class="ttdef"><b>Definition:</b> copy.hpp:50</div></div>
|
|
<div class="ttc" id="agroup__group-views_html_ga214da59baf075118417256e2f9ce5d9b"><div class="ttname"><a href="group__group-views.html#ga214da59baf075118417256e2f9ce5d9b">ranges::make_view_closure</a></div><div class="ttdeci">constexpr make_view_closure_fn make_view_closure</div><div class="ttdef"><b>Definition:</b> view.hpp:101</div></div>
|
|
<div class="ttc" id="agroup__integral_html_ga92ba0e8ad97a32c34cec51aa6d4f8679"><div class="ttname"><a href="group__integral.html#ga92ba0e8ad97a32c34cec51aa6d4f8679">meta::size_t</a></div><div class="ttdeci">std::integral_constant< std::size_t, N > size_t</div><div class="ttdoc">An integral constant wrapper for std::size_t.</div><div class="ttdef"><b>Definition:</b> meta.hpp:163</div></div>
|
|
<div class="ttc" id="agroup__list_html_gadd1d8e54275858523926ab20aa88ed0a"><div class="ttname"><a href="group__list.html#gadd1d8e54275858523926ab20aa88ed0a">meta::front</a></div><div class="ttdeci">_t< detail::front_< L > > front</div><div class="ttdoc">Return the first element in meta::list L.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2070</div></div>
|
|
<div class="ttc" id="agroup__transformation_html_ga386fa55fefb4aa3f4df3227379916839"><div class="ttname"><a href="group__transformation.html#ga386fa55fefb4aa3f4df3227379916839">meta::transpose</a></div><div class="ttdeci">fold< ListOfLists, repeat_n< size< front< ListOfLists > >, list<> >, bind_back< quote< transform >, quote< push_back > > > transpose</div><div class="ttdoc">Given a list of lists of types ListOfLists, transpose the elements from the lists.</div><div class="ttdef"><b>Definition:</b> meta.hpp:2892</div></div>
|
|
<div class="ttc" id="agroup__transformation_html_gae8b919ad4c2cfe9b0fc7549cedae5e37"><div class="ttname"><a href="group__transformation.html#gae8b919ad4c2cfe9b0fc7549cedae5e37">meta::join</a></div><div class="ttdeci">apply< quote< concat >, ListOfLists > join</div><div class="ttdoc">Joins a list of lists into a single list.</div><div class="ttdef"><b>Definition:</b> meta.hpp:1786</div></div>
|
|
<div class="ttc" id="amismatch_8hpp_html"><div class="ttname"><a href="mismatch_8hpp.html">mismatch.hpp</a></div></div>
|
|
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
|
|
<div class="ttc" id="asingle_8hpp_html"><div class="ttname"><a href="single_8hpp.html">single.hpp</a></div></div>
|
|
<div class="ttc" id="astream__iterators_8hpp_html"><div class="ttname"><a href="stream__iterators_8hpp.html">stream_iterators.hpp</a></div></div>
|
|
<div class="ttc" id="astructranges_1_1default__sentinel__t_html"><div class="ttname"><a href="structranges_1_1default__sentinel__t.html">ranges::default_sentinel_t</a></div><div class="ttdef"><b>Definition:</b> default_sentinel.hpp:26</div></div>
|
|
<div class="ttc" id="astructranges_1_1incrementable__traits_html"><div class="ttname"><a href="structranges_1_1incrementable__traits.html">ranges::incrementable_traits</a></div><div class="ttdef"><b>Definition:</b> associated_types.hpp:166</div></div>
|
|
<div class="ttc" id="astructranges_1_1ostream__iterator_html"><div class="ttname"><a href="structranges_1_1ostream__iterator.html">ranges::ostream_iterator</a></div><div class="ttdef"><b>Definition:</b> stream_iterators.hpp:37</div></div>
|
|
<div class="ttc" id="astructranges_1_1view__facade_html"><div class="ttname"><a href="structranges_1_1view__facade.html">ranges::view_facade</a></div><div class="ttdoc">A utility for constructing a view from a (derived) type that implements begin and end cursors.</div><div class="ttdef"><b>Definition:</b> facade.hpp:66</div></div>
|
|
<div class="ttc" id="aview_2join_8hpp_html"><div class="ttname"><a href="view_2join_8hpp.html">join.hpp</a></div></div>
|
|
</div><!-- fragment --> </div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|