Skip to content

Commit

Permalink
forward return from fn in apply
Browse files Browse the repository at this point in the history
  • Loading branch information
vitamin committed Jan 13, 2022
1 parent 9482d46 commit 0d53735
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 14 deletions.
11 changes: 7 additions & 4 deletions docs/autoptr/common/apply.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ <h1>Function apply</h1><p>Sefly dereference all <code class="lang-d"><a href="..
<div class="prototype">
<code class="lang-d">
<div class="single-prototype">
<span class="typ">void</span> <span class="pln">apply</span>(alias fn, Args...)
<span class="kwd">auto</span> <span class="pln">apply</span>(alias fn, Args...)
<span class="pun">(</span>
<br/>
&nbsp;&nbsp;<span class="kwd">auto scope ref </span><span class="typ">Args</span> <span class="pln">args</span>
Expand Down Expand Up @@ -99,13 +99,13 @@ <h1>Function apply</h1><p>Sefly dereference all <code class="lang-d"><a href="..
()</span><span class="kwd">@safe</span><span class="pun">{
</span><span class="kwd">auto </span><span class="pln">a </span><span class="pun">= </span><span class="typ">SharedPtr</span><span class="pun">!</span><span class="typ">long<wbr/></span><span class="pun">.</span><span class="pln">make</span><span class="pun">(</span><span class="lit">42</span><span class="pun">);
</span><span class="kwd">auto </span><span class="pln">b </span><span class="pun">= </span><span class="typ">RcPtr</span><span class="pun">!</span><span class="typ">float<wbr/></span><span class="pun">.</span><span class="pln">make</span><span class="pun">(</span><span class="lit">3.14</span><span class="pun">);
</span><span class="kwd">auto </span><span class="pln">c </span><span class="pun">= </span><span class="typ">IntrusivePtr</span><span class="pun">!</span><span class="typ">Foo<wbr/></span><span class="pun">.</span><span class="pln">make</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);
</span><span class="kwd">auto </span><span class="pln">c </span><span class="pun">= </span><span class="typ">IntrusivePtr</span><span class="pun">!</span><span class="typ">Foo<wbr/></span><span class="pun">.</span><span class="pln">make</span><span class="pun">(</span><span class="lit">123</span><span class="pun">);

</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">a<wbr/></span><span class="pun">.</span><span class="pln">useCount </span><span class="pun">== </span><span class="lit">1</span><span class="pun">);
</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">b<wbr/></span><span class="pun">.</span><span class="pln">useCount </span><span class="pun">== </span><span class="lit">1</span><span class="pun">);
</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">c<wbr/></span><span class="pun">.</span><span class="pln">useCount </span><span class="pun">== </span><span class="lit">1</span><span class="pun">);

</span><span class="pln">apply</span><span class="pun">!((</span><span class="kwd">scope ref </span><span class="typ">long </span><span class="pln">x</span><span class="pun">, </span><span class="kwd">scope ref </span><span class="typ">float </span><span class="pln">y</span><span class="pun">, </span><span class="kwd">scope </span><span class="typ">Foo </span><span class="pln">z</span><span class="pun">){
</span><span class="typ">int </span><span class="pln">i </span><span class="pun">= </span><span class="pln">apply</span><span class="pun">!((</span><span class="kwd">scope ref </span><span class="typ">long </span><span class="pln">x</span><span class="pun">, </span><span class="kwd">scope ref </span><span class="typ">float </span><span class="pln">y</span><span class="pun">, </span><span class="kwd">scope </span><span class="typ">Foo </span><span class="pln">z</span><span class="pun">){
</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">a<wbr/></span><span class="pun">.</span><span class="pln">useCount </span><span class="pun">== </span><span class="lit">2</span><span class="pun">);
</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">b<wbr/></span><span class="pun">.</span><span class="pln">useCount </span><span class="pun">== </span><span class="lit">2</span><span class="pun">);

Expand All @@ -116,7 +116,10 @@ <h1>Function apply</h1><p>Sefly dereference all <code class="lang-d"><a href="..
</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">z<wbr/></span><span class="pun">.</span><span class="pln">i </span><span class="pun">!= -</span><span class="lit">1</span><span class="pun">);
</span><span class="com">//x, y, z are still valid until end of the scope.

</span><span class="pun">})(</span><span class="pln">a</span><span class="pun">, </span><span class="pln">b</span><span class="pun">, </span><span class="pln">move</span><span class="pun">(</span><span class="pln">c</span><span class="pun">));
</span><span class="kwd">return </span><span class="pln">z<wbr/></span><span class="pun">.</span><span class="pln">i</span><span class="pun">;
})(</span><span class="pln">a</span><span class="pun">, </span><span class="pln">b</span><span class="pun">, </span><span class="pln">move</span><span class="pun">(</span><span class="pln">c</span><span class="pun">));

</span><span class="kwd">assert</span><span class="pun">(</span><span class="pln">i </span><span class="pun">== </span><span class="lit">123</span><span class="pun">);
}();

</span></code></pre>
Expand Down
Loading

0 comments on commit 0d53735

Please sign in to comment.