1
0
mirror of https://github.com/tearshark/librf.git synced 2024-10-02 00:00:11 +08:00
librf/doxygen/html/when__v2_8h_source.html
tearshark cd74eea532 完善文档。
上传Doxygen生成的文档。
2020-03-31 15:30:45 +08:00

517 lines
69 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>librf: librf/src/when_v2.h 源文件</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="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>
<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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">librf
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_3c80010775d22af2067790ecc9cdcf9d.html">librf</a></li><li class="navelem"><a class="el" href="dir_54ae0e78d997f6903cdf0996223d047f.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">when_v2.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160; </div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="keyword">namespace </span>resumef</div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;{</div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; <span class="keyword">using</span> any_t = std::any;</div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; <span class="keyword">using</span> std::any_cast;</div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;}</div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//纠结过when_any的返回值是选用index + std::any还是选用std::variant&lt;&gt;。最终选择了std::any。</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">//std::variant&lt;&gt;存在第一个元素不能默认构造的问题需要使用std::monostate来占位导致下标不是从0开始。</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">//而且std::variant&lt;&gt;里面存在类型重复的问题,好几个操作都是病态的</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">//最最重要的要统一ranged when_any的返回值还得做一个运行时通过下标设置std::variant&lt;&gt;的东西</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">//std::any除了内存布局不太理想其他方面几乎没缺点在此应用下</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>resumef</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">using</span> when_any_pair = std::pair&lt;intptr_t, any_t&gt;;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">using</span> when_any_pair_ptr = std::shared_ptr&lt;when_any_pair&gt;;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">namespace </span>detail</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">struct </span>state_when_t : <span class="keyword">public</span> state_base_t</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; state_when_t(intptr_t counter_);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> resume() <span class="keyword">override</span>;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> has_handler() const noexcept override;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">void</span> on_cancel() noexcept;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordtype">bool</span> on_notify_one();</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">bool</span> on_timeout();</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">//将自己加入到通知链表里</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; template&lt;class _PromiseT, typename = std::enable_if_t&lt;traits::is_promise_v&lt;_PromiseT&gt;&gt;&gt;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; scheduler_t* on_await_suspend(coroutine_handle&lt;_PromiseT&gt; handler) noexcept</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; _PromiseT&amp; promise = handler.promise();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span>* parent_state = promise.get_state();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; scheduler_t* sch = parent_state-&gt;get_scheduler();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; this-&gt;_scheduler = sch;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; this-&gt;_coro = handler;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> sch;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">typedef</span> spinlock lock_type;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; lock_type _lock;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::atomic&lt;intptr_t&gt; _counter;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; };</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">struct </span>[[nodiscard]] when_future_t</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">using</span> value_type = _Ty;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">using</span> state_type = detail::state_when_t;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">using</span> promise_type = promise_t&lt;value_type&gt;;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">using</span> future_type = when_future_t&lt;value_type&gt;;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">using</span> lock_type = <span class="keyword">typename</span> state_type::lock_type;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; counted_ptr&lt;state_type&gt; _state;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::shared_ptr&lt;value_type&gt; _values;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; when_future_t(intptr_t count_) noexcept</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; : _state(<span class="keyword">new</span> state_type(count_))</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; , _values(std::make_shared&lt;value_type&gt;())</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">bool</span> await_ready() noexcept</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> _state-&gt;_counter.load(std::memory_order_relaxed) == 0;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _PromiseT, <span class="keyword">typename</span> = std::enable_if_t&lt;traits::is_promise_v&lt;_PromiseT&gt;&gt;&gt;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">void</span> await_suspend(coroutine_handle&lt;_PromiseT&gt; handler)</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; _state-&gt;on_await_suspend(handler);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; value_type await_resume() noexcept(std::is_nothrow_move_constructible_v&lt;value_type&gt;)</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> std::move(*_values);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; };</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">using</span> ignore_type = std::remove_const_t&lt;decltype(std::ignore)&gt;;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">struct </span>convert_void_2_ignore</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">using</span> type = std::remove_reference_t&lt;_Ty&gt;;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">using</span> value_type = type;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; };</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">template</span>&lt;&gt;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">struct </span>convert_void_2_ignore&lt;void&gt;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">using</span> type = void;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">using</span> value_type = ignore_type;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; };</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty, <span class="keywordtype">bool</span> = traits::is_callable_v&lt;_Ty&gt;&gt;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">struct </span>awaitor_result_impl2</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">using</span> value_type = <span class="keyword">typename</span> convert_void_2_ignore&lt;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">typename</span> traits::awaitor_traits&lt;_Ty&gt;::value_type</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; &gt;::value_type;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; };</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">struct </span>awaitor_result_impl2&lt;_Ty, true&gt; : awaitor_result_impl2&lt;decltype(std::declval&lt;_Ty&gt;()()), false&gt; {};</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span>... _Ty&gt;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">struct </span>awaitor_result_impl{};</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">struct </span>awaitor_result_impl&lt;_Ty&gt; : <span class="keyword">public</span> awaitor_result_impl2&lt;_Ty&gt; {};</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT _Ty&gt;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">using</span> awaitor_result_t = <span class="keyword">typename</span> awaitor_result_impl&lt;std::remove_reference_t&lt;_Ty&gt;&gt;::value_type;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">struct </span>is_when_task : std::bool_constant&lt;traits::is_awaitable_v&lt;_Ty&gt; || traits::is_callable_v&lt;_Ty&gt;&gt; {};</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; constexpr <span class="keywordtype">bool</span> is_when_task_v = is_when_task&lt;_Ty&gt;::value;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; template&lt;class _Ty, class _Task = decltype(*std::declval&lt;_Ty&gt;())&gt;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; constexpr <span class="keywordtype">bool</span> is_when_task_iter_v = traits::is_iterator_v&lt;_Ty&gt; &amp;&amp; is_when_task_v&lt;_Task&gt;;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT _Awaitable&gt;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; decltype(<span class="keyword">auto</span>) when_real_awaitor(_Awaitable&amp;&amp; awaitor)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> constexpr (traits::is_callable_v&lt;_Awaitable&gt;)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> awaitor();</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span> std::forward&lt;_Awaitable&gt;(awaitor);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT _Awaitable, <span class="keyword">class</span> _Ty&gt;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; future_t&lt;&gt; when_all_connector_1(state_when_t* state, _Awaitable task, _Ty&amp; value)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; decltype(<span class="keyword">auto</span>) awaitor = when_real_awaitor(task);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; if constexpr (std::is_same_v&lt;_Ty, ignore_type&gt;)</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; co_await awaitor;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; else</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; value = co_await awaitor;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; state-&gt;on_notify_one();</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; };</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; template&lt;class _FuckBoolean&gt;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; using _FuckBoolVectorReference = typename std::vector&lt;_FuckBoolean&gt;::reference;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; template&lt;_WhenTaskT _Awaitable, class _Ty&gt;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; future_t&lt;&gt; when_all_connector_2(state_when_t* state,_Awaitable task, _FuckBoolVectorReference&lt;_Ty&gt; value)</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">auto</span>&amp;&amp; awaitor = when_real_awaitor(task);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> constexpr(std::is_same_v&lt;_Ty, ignore_type&gt;)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; co_await awaitor;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; value = co_await awaitor;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; state-&gt;on_notify_one();</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; };</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Tup, <span class="keywordtype">size_t</span> _Idx&gt;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_all_one__(scheduler_t&amp; , state_when_t*, _Tup&amp; )</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>_Tup, <span class="keywordtype">size_t</span> _Idx, _WhenTaskT _Awaitable, _WhenTaskT... _Rest&gt;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_all_one__(scheduler_t&amp; sch, state_when_t* state, _Tup&amp; values, _Awaitable&amp;&amp; awaitable, _Rest&amp;&amp;... rest)</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; sch + when_all_connector_1(state, std::forward&lt;_Awaitable&gt;(awaitable), std::get&lt;_Idx&gt;(values));</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; when_all_one__&lt;_Tup, _Idx + 1, _Rest...&gt;(sch, state, values, std::forward&lt;_Rest&gt;(rest)...);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> _Val, _WhenIterT _Iter&gt;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_all_range__(scheduler_t&amp; sch, state_when_t* state, std::vector&lt;_Val&gt; &amp; values, _Iter begin, _Iter end)</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">using</span> _Awaitable = std::remove_reference_t&lt;decltype(*begin)&gt;;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; intptr_t _Idx = 0;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">for</span> (; begin != end; ++begin, ++_Idx)</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; sch + when_all_connector_2&lt;_Awaitable, _Val&gt;(state, *begin, values[_Idx]);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">//-----------------------------------------------------------------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT _Awaitable&gt;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; future_t&lt;&gt; when_any_connector(counted_ptr&lt;state_when_t&gt; state, _Awaitable task, when_any_pair_ptr value, intptr_t idx)</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; assert(idx &gt;= 0);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">auto</span> awaitor = when_real_awaitor(task);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">using</span> value_type = awaitor_result_t&lt;decltype(awaitor)&gt;;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> constexpr (std::is_same_v&lt;value_type, ignore_type&gt;)</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; co_await awaitor;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; intptr_t oldValue = -1;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">reinterpret_cast&lt;</span>std::atomic&lt;intptr_t&gt;&amp;<span class="keyword">&gt;</span>(value-&gt;first).compare_exchange_strong(oldValue, idx))</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; state-&gt;on_notify_one();</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; decltype(<span class="keyword">auto</span>) result = co_await awaitor;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; intptr_t oldValue = -1;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; if (reinterpret_cast&lt;std::atomic&lt;intptr_t&gt;&amp;&gt;(value-&gt;first).compare_exchange_strong(oldValue, idx))</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; value-&gt;second = std::move(result);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; state-&gt;on_notify_one();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; };</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_any_one__(scheduler_t&amp;, state_when_t*, when_any_pair_ptr, intptr_t)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT _Awaitable, _WhenTaskT... _Rest&gt;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_any_one__(scheduler_t&amp; sch, state_when_t* state, when_any_pair_ptr value, intptr_t _Idx, _Awaitable&amp;&amp; awaitable, _Rest&amp;&amp;... rest)</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; sch + when_any_connector(state, std::forward&lt;_Awaitable&gt;(awaitable), value, _Idx);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; when_any_one__(sch, state, value, _Idx + 1, std::forward&lt;_Rest&gt;(rest)...);</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">template</span>&lt;_WhenIterT _Iter&gt;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> when_any_range__(scheduler_t&amp; sch, state_when_t* state, when_any_pair_ptr value, _Iter begin, _Iter end)</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">using</span> _Awaitable = std::remove_reference_t&lt;decltype(*begin)&gt;;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; intptr_t _Idx = 0;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">for</span> (; begin != end; ++begin, ++_Idx)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; sch + when_any_connector&lt;_Awaitable&gt;(state, *begin, value, <span class="keyword">static_cast&lt;</span>intptr_t<span class="keyword">&gt;</span>(_Idx));</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="keyword">inline</span> <span class="keyword">namespace </span>when_v2</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; </div>
<div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html"> 262</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structresumef_1_1when__.html">when_</a>{</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT... _Awaitable</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; COMMA_RESUMEF_ENABLE_IF(std::conjunction_v&lt;detail::is_when_task&lt;_Awaitable&gt;...&gt;)</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; &gt;</div>
<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a6ba9218688af965ccf6d4bd9e98b152a"> 276</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a6ba9218688af965ccf6d4bd9e98b152a">when_all</a>(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Awaitable&amp;&amp;... args)</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; -&gt; detail::when_future_t&lt;std::tuple&lt;detail::awaitor_result_t&lt;_Awaitable&gt;...&gt; &gt;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">using</span> tuple_type = std::tuple&lt;detail::awaitor_result_t&lt;_Awaitable&gt;...&gt;;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; detail::when_future_t&lt;tuple_type&gt; awaitor{ <span class="keyword">sizeof</span>...(_Awaitable) };</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; detail::when_all_one__&lt;tuple_type, 0u, _Awaitable...&gt;(sch, awaitor._state.get(), *awaitor._values, std::forward&lt;_Awaitable&gt;(args)...);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> awaitor;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">template</span>&lt;_WhenIterT _Iter</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; COMMA_RESUMEF_ENABLE_IF(detail::is_when_task_iter_v&lt;_Iter&gt;)</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; &gt;</div>
<div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a29810e8fe2efbfb395669971758182fe"> 299</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a29810e8fe2efbfb395669971758182fe">when_all</a>(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Iter begin, _Iter end)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; -&gt; detail::when_future_t&lt;std::vector&lt;detail::awaitor_result_t&lt;decltype(*std::declval&lt;_Iter&gt;())&gt; &gt; &gt;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">using</span> value_type = detail::awaitor_result_t&lt;decltype(*std::declval&lt;_Iter&gt;())&gt;;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">using</span> vector_type = std::vector&lt;value_type&gt;;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; detail::when_future_t&lt;vector_type&gt; awaitor{ std::distance(begin, end) };</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; awaitor._values-&gt;resize(end - begin);</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; when_all_range__(sch, awaitor._state.get(), *awaitor._values, begin, end);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> awaitor;</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">template</span>&lt;_ContainerT _Cont</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; COMMA_RESUMEF_ENABLE_IF(traits::is_container_v&lt;_Cont&gt;)</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; &gt;</div>
<div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a66d4fc83bbdbe36232615ff7d0459049"> 323</a></span>&#160; decltype(<span class="keyword">auto</span>) when_all(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Cont&amp; cont)</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> when_all(sch, std::begin(cont), std::end(cont));</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; </div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT... _Awaitable</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; COMMA_RESUMEF_ENABLE_IF(std::conjunction_v&lt;detail::is_when_task&lt;_Awaitable&gt;...&gt;)</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; &gt;</div>
<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a1d453b444cfaa704cf7a1da01eed49b9"> 339</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a1d453b444cfaa704cf7a1da01eed49b9">when_all</a>(_Awaitable&amp;&amp;... args)</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t&lt;std::tuple&lt;detail::awaitor_result_t&lt;_Awaitable&gt;</a>...&gt;&gt;</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>* sch = current_scheduler();</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; co_return co_await when_all(*sch, std::forward&lt;_Awaitable&gt;(args)...);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">template</span>&lt;_WhenIterT _Iter</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; COMMA_RESUMEF_ENABLE_IF(detail::is_when_task_iter_v&lt;_Iter&gt;)</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; &gt;</div>
<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a9b8ec7229b5c7dd7c2ae58d3365799dc"> 358</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a9b8ec7229b5c7dd7c2ae58d3365799dc">when_all</a>(_Iter begin, _Iter end)</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t</a>&lt;std::vector&lt;detail::awaitor_result_t&lt;decltype(*begin)&gt;&gt;&gt;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>* sch = current_scheduler();</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; co_return co_await when_all(*sch, begin, end);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keyword">template</span>&lt;_ContainerT _Cont</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; COMMA_RESUMEF_ENABLE_IF(traits::is_container_v&lt;_Cont&gt;)</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; &gt;</div>
<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#aa2a8218ff1eb6cb48fb981310a284b84"> 376</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#aa2a8218ff1eb6cb48fb981310a284b84">when_all</a>(_Cont&amp;&amp; cont)</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t</a>&lt;std::vector&lt;detail::awaitor_result_t&lt;decltype(*std::begin(cont))&gt;&gt;&gt;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> when_all(std::begin(cont), std::end(cont));</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; }</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; </div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; </div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT... _Awaitable</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; COMMA_RESUMEF_ENABLE_IF(std::conjunction_v&lt;detail::is_when_task&lt;_Awaitable&gt;...&gt;)</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; &gt;</div>
<div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#af4fe05b26abdab4ff00505ce56674ef9"> 395</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#af4fe05b26abdab4ff00505ce56674ef9">when_any</a>(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Awaitable&amp;&amp;... args)</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; -&gt; detail::when_future_t&lt;when_any_pair&gt;</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="preprocessor">#pragma warning(disable : 6326) //warning C6326: Potential comparison of a constant with another constant.</span></div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; detail::when_future_t&lt;when_any_pair&gt; awaitor{ <span class="keyword">sizeof</span>...(_Awaitable) &gt; 0 ? 1 : 0 };</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="preprocessor">#pragma warning(default : 6326)</span></div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; awaitor._values-&gt;first = -1;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; detail::when_any_one__(sch, awaitor._state.get(), awaitor._values, 0, std::forward&lt;_Awaitable&gt;(args)...);</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; </div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span> awaitor;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">template</span>&lt;_WhenIterT _Iter</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; COMMA_RESUMEF_ENABLE_IF(detail::is_when_task_iter_v&lt;_Iter&gt;)</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; &gt;</div>
<div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a5eb64c53feea7f37b643f9b9c3faf685"> 419</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a5eb64c53feea7f37b643f9b9c3faf685">when_any</a>(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Iter begin, _Iter end)</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; -&gt; detail::when_future_t&lt;when_any_pair&gt;</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; {</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; detail::when_future_t&lt;when_any_pair&gt; awaitor{ begin == end ? 0 : 1 };</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; awaitor._values-&gt;first = -1;</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; detail::when_any_range__&lt;_Iter&gt;(sch, awaitor._state.get(), awaitor._values, begin, end);</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; </div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">return</span> awaitor;</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; </div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">template</span>&lt;_ContainerT _Cont</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; COMMA_RESUMEF_ENABLE_IF(traits::is_container_v&lt;_Cont&gt;)</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; &gt;</div>
<div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a753478e5b7b3df202efc98c0274484e8"> 440</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a753478e5b7b3df202efc98c0274484e8">when_any</a>(<a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>&amp; sch, _Cont&amp; cont)</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; -&gt; detail::when_future_t&lt;when_any_pair&gt;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">return</span> when_any(sch, std::begin(cont), std::end(cont));</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">template</span>&lt;_WhenTaskT... _Awaitable</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; COMMA_RESUMEF_ENABLE_IF(std::conjunction_v&lt;detail::is_when_task&lt;_Awaitable&gt;...&gt;)</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; &gt;</div>
<div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a4ec23495051e2b682f27ce0b3d527305"> 457</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a4ec23495051e2b682f27ce0b3d527305">when_any</a>(_Awaitable&amp;&amp;... args)</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t&lt;when_any_pair&gt;</a></div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>* sch = current_scheduler();</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; co_return co_await when_any(*sch, std::forward&lt;_Awaitable&gt;(args)...);</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; </div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keyword">template</span>&lt;_WhenIterT _Iter</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; COMMA_RESUMEF_ENABLE_IF(detail::is_when_task_iter_v&lt;_Iter&gt;)</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; &gt;</div>
<div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a8595c1bc0659b67724654b6661537058"> 476</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a8595c1bc0659b67724654b6661537058">when_any</a>(_Iter begin, _Iter end) </div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t&lt;when_any_pair&gt;</a></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; {</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <a class="code" href="structresumef_1_1scheduler__t.html">scheduler_t</a>* sch = current_scheduler();</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; co_return co_await when_any(*sch, begin, end);</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; </div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">template</span>&lt;_ContainerT _Cont</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="preprocessor">#ifndef DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; COMMA_RESUMEF_ENABLE_IF(traits::is_container_v&lt;_Cont&gt;)</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="preprocessor">#endif //DOXYGEN_SKIP_PROPERTY</span></div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; &gt;</div>
<div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="structresumef_1_1when__.html#a0b9b2f88f5c8cd76dd8d1c70926cc029"> 494</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="structresumef_1_1when__.html#a0b9b2f88f5c8cd76dd8d1c70926cc029">when_any</a>(_Cont&amp;&amp; cont)</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; -&gt; <a class="code" href="structresumef_1_1future__t.html">future_t&lt;when_any_pair&gt;</a></div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> when_any(std::begin(cont), std::end(cont));</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;}</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructresumef_1_1scheduler__t_html"><div class="ttname"><a href="structresumef_1_1scheduler__t.html">resumef::scheduler_t</a></div><div class="ttdoc">协程调度器。</div><div class="ttdef"><b>Definition:</b> scheduler.h:10</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a8595c1bc0659b67724654b6661537058"><div class="ttname"><a href="structresumef_1_1when__.html#a8595c1bc0659b67724654b6661537058">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(_Iter begin, _Iter end) -&gt; future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,迭代器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:476</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a1d453b444cfaa704cf7a1da01eed49b9"><div class="ttname"><a href="structresumef_1_1when__.html#a1d453b444cfaa704cf7a1da01eed49b9">resumef::when_::when_all</a></div><div class="ttdeci">auto when_all(_Awaitable &amp;&amp;... args) -&gt; future_t&lt; std::tuple&lt; detail::awaitor_result_t&lt; _Awaitable &gt;... &gt;&gt;</div><div class="ttdoc">等待所有的可等待对象完成,不定参数版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:339</div></div>
<div class="ttc" id="astructresumef_1_1when___html"><div class="ttname"><a href="structresumef_1_1when__.html">resumef::when_</a></div><div class="ttdoc">目前不知道怎么在doxygen里面能搜集到全局函数的文档。故用一个结构体来欺骗doxygen。</div><div class="ttdef"><b>Definition:</b> when_v2.h:262</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a4ec23495051e2b682f27ce0b3d527305"><div class="ttname"><a href="structresumef_1_1when__.html#a4ec23495051e2b682f27ce0b3d527305">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(_Awaitable &amp;&amp;... args) -&gt; future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,不定参数版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:457</div></div>
<div class="ttc" id="astructresumef_1_1when___html_af4fe05b26abdab4ff00505ce56674ef9"><div class="ttname"><a href="structresumef_1_1when__.html#af4fe05b26abdab4ff00505ce56674ef9">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(scheduler_t &amp;sch, _Awaitable &amp;&amp;... args) -&gt; detail::when_future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,不定参数版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:395</div></div>
<div class="ttc" id="astructresumef_1_1future__t_html"><div class="ttname"><a href="structresumef_1_1future__t.html">resumef::future_t</a></div><div class="ttdoc">用于resumef协程的返回值。</div><div class="ttdef"><b>Definition:</b> future.h:14</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a29810e8fe2efbfb395669971758182fe"><div class="ttname"><a href="structresumef_1_1when__.html#a29810e8fe2efbfb395669971758182fe">resumef::when_::when_all</a></div><div class="ttdeci">auto when_all(scheduler_t &amp;sch, _Iter begin, _Iter end) -&gt; detail::when_future_t&lt; std::vector&lt; detail::awaitor_result_t&lt; decltype(*std::declval&lt; _Iter &gt;())&gt; &gt; &gt;</div><div class="ttdoc">等待所有的可等待对象完成,迭代器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:299</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a5eb64c53feea7f37b643f9b9c3faf685"><div class="ttname"><a href="structresumef_1_1when__.html#a5eb64c53feea7f37b643f9b9c3faf685">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(scheduler_t &amp;sch, _Iter begin, _Iter end) -&gt; detail::when_future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,迭代器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:419</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a753478e5b7b3df202efc98c0274484e8"><div class="ttname"><a href="structresumef_1_1when__.html#a753478e5b7b3df202efc98c0274484e8">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(scheduler_t &amp;sch, _Cont &amp;cont) -&gt; detail::when_future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,容器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:440</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a0b9b2f88f5c8cd76dd8d1c70926cc029"><div class="ttname"><a href="structresumef_1_1when__.html#a0b9b2f88f5c8cd76dd8d1c70926cc029">resumef::when_::when_any</a></div><div class="ttdeci">auto when_any(_Cont &amp;&amp;cont) -&gt; future_t&lt; when_any_pair &gt;</div><div class="ttdoc">等待任一的可等待对象完成,容器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:494</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a9b8ec7229b5c7dd7c2ae58d3365799dc"><div class="ttname"><a href="structresumef_1_1when__.html#a9b8ec7229b5c7dd7c2ae58d3365799dc">resumef::when_::when_all</a></div><div class="ttdeci">auto when_all(_Iter begin, _Iter end) -&gt; future_t&lt; std::vector&lt; detail::awaitor_result_t&lt; decltype(*begin)&gt;&gt;&gt;</div><div class="ttdoc">等待所有的可等待对象完成,迭代器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:358</div></div>
<div class="ttc" id="astructresumef_1_1when___html_a6ba9218688af965ccf6d4bd9e98b152a"><div class="ttname"><a href="structresumef_1_1when__.html#a6ba9218688af965ccf6d4bd9e98b152a">resumef::when_::when_all</a></div><div class="ttdeci">auto when_all(scheduler_t &amp;sch, _Awaitable &amp;&amp;... args) -&gt; detail::when_future_t&lt; std::tuple&lt; detail::awaitor_result_t&lt; _Awaitable &gt;... &gt; &gt;</div><div class="ttdoc">等待所有的可等待对象完成,不定参数版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:276</div></div>
<div class="ttc" id="astructresumef_1_1when___html_aa2a8218ff1eb6cb48fb981310a284b84"><div class="ttname"><a href="structresumef_1_1when__.html#aa2a8218ff1eb6cb48fb981310a284b84">resumef::when_::when_all</a></div><div class="ttdeci">auto when_all(_Cont &amp;&amp;cont) -&gt; future_t&lt; std::vector&lt; detail::awaitor_result_t&lt; decltype(*std::begin(cont))&gt;&gt;&gt;</div><div class="ttdoc">等待所有的可等待对象完成,容器版。</div><div class="ttdef"><b>Definition:</b> when_v2.h:376</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>