Skip to content

Commit 7c66cf7

Browse files
committed
docs: Add C++20 ranges documentation
This doesn't require any implementation changes, as the existing support for C++11 ranged for loops automatically makes nodes and node/attribute range objects work as C++20 ranges. Fixes #613.
1 parent f1d8c51 commit 7c66cf7

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

docs/manual.adoc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,19 @@ While using `children()` makes the intent of the code clear, note that each node
10391039

10401040
[source]
10411041
----
1042-
for (pugi::xml_node child: tool)
1042+
for (pugi::xml_node child: tool) ...
1043+
----
1044+
1045+
When using C{plus}{plus}20, you can also use nodes as well as objects returned by `children()` and `attributes()` functions as ranges:
1046+
1047+
[source]
1048+
----
1049+
auto tf =
1050+
tools.children("Tool")
1051+
| std::views::filter([](auto node) { return node.attribute("AllowRemote").as_bool(); })
1052+
| std::views::reverse;
1053+
1054+
for (pugi::xml_node tool: tf) ...
10431055
----
10441056

10451057
[[access.iterators]]

docs/manual.html

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@
448448
pre.pygments .tok-cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
449449
pre.pygments .tok-gd { color: #A00000 } /* Generic.Deleted */
450450
pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */
451+
pre.pygments .tok-ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
451452
pre.pygments .tok-gr { color: #E40000 } /* Generic.Error */
452453
pre.pygments .tok-gh { color: #000080; font-weight: bold } /* Generic.Heading */
453454
pre.pygments .tok-gi { color: #008400 } /* Generic.Inserted */
@@ -2300,7 +2301,20 @@ <h3 id="access.rangefor"><a class="anchor" href="#access.rangefor"></a><a class=
23002301
</div>
23012302
<div class="listingblock">
23022303
<div class="content">
2303-
<pre class="pygments highlight"><code data-lang="c++"><span></span><span class="tok-k">for</span><span class="tok-w"> </span><span class="tok-p">(</span><span class="tok-n">pugi</span><span class="tok-o">::</span><span class="tok-n">xml_node</span><span class="tok-w"> </span><span class="tok-n">child</span><span class="tok-o">:</span><span class="tok-w"> </span><span class="tok-n">tool</span><span class="tok-p">)</span></code></pre>
2304+
<pre class="pygments highlight"><code data-lang="c++"><span></span><span class="tok-k">for</span><span class="tok-w"> </span><span class="tok-p">(</span><span class="tok-n">pugi</span><span class="tok-o">::</span><span class="tok-n">xml_node</span><span class="tok-w"> </span><span class="tok-n">child</span><span class="tok-o">:</span><span class="tok-w"> </span><span class="tok-n">tool</span><span class="tok-p">)</span><span class="tok-w"> </span><span class="tok-p">...</span></code></pre>
2305+
</div>
2306+
</div>
2307+
<div class="paragraph">
2308+
<p>When using C&#43;&#43;20, you can also use nodes as well as objects returned by <code>children()</code> and <code>attributes()</code> functions as ranges:</p>
2309+
</div>
2310+
<div class="listingblock">
2311+
<div class="content">
2312+
<pre class="pygments highlight"><code data-lang="c++"><span></span><span class="tok-k">auto</span><span class="tok-w"> </span><span class="tok-n">tf</span><span class="tok-w"> </span><span class="tok-o">=</span>
2313+
<span class="tok-w"> </span><span class="tok-n">tools</span><span class="tok-p">.</span><span class="tok-n">children</span><span class="tok-p">(</span><span class="tok-s">&quot;Tool&quot;</span><span class="tok-p">)</span>
2314+
<span class="tok-w"> </span><span class="tok-o">|</span><span class="tok-w"> </span><span class="tok-n">std</span><span class="tok-o">::</span><span class="tok-n">views</span><span class="tok-o">::</span><span class="tok-n">filter</span><span class="tok-p">([](</span><span class="tok-k">auto</span><span class="tok-w"> </span><span class="tok-n">node</span><span class="tok-p">)</span><span class="tok-w"> </span><span class="tok-p">{</span><span class="tok-w"> </span><span class="tok-k">return</span><span class="tok-w"> </span><span class="tok-n">node</span><span class="tok-p">.</span><span class="tok-n">attribute</span><span class="tok-p">(</span><span class="tok-s">&quot;AllowRemote&quot;</span><span class="tok-p">).</span><span class="tok-n">as_bool</span><span class="tok-p">();</span><span class="tok-w"> </span><span class="tok-p">})</span>
2315+
<span class="tok-w"> </span><span class="tok-o">|</span><span class="tok-w"> </span><span class="tok-n">std</span><span class="tok-o">::</span><span class="tok-n">views</span><span class="tok-o">::</span><span class="tok-n">reverse</span><span class="tok-p">;</span>
2316+
2317+
<span class="tok-k">for</span><span class="tok-w"> </span><span class="tok-p">(</span><span class="tok-n">pugi</span><span class="tok-o">::</span><span class="tok-n">xml_node</span><span class="tok-w"> </span><span class="tok-n">tool</span><span class="tok-o">:</span><span class="tok-w"> </span><span class="tok-n">tf</span><span class="tok-p">)</span><span class="tok-w"> </span><span class="tok-p">...</span></code></pre>
23042318
</div>
23052319
</div>
23062320
</div>
@@ -6153,7 +6167,7 @@ <h3 id="apiref.functions"><a class="anchor" href="#apiref.functions"></a><a clas
61536167
</div>
61546168
<div id="footer">
61556169
<div id="footer-text">
6156-
Last updated 2024-01-26 09:23:09 -0800
6170+
Last updated 2024-05-19 13:23:06 -0700
61576171
</div>
61586172
</div>
61596173
</body>

0 commit comments

Comments
 (0)