uvw/loop_8h_source.html
2020-05-31 16:45:27 +02:00

268 lines
36 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>uvw: src/uvw/loop.h Source File</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">uvw
&#160;<span id="projectnumber">2.6.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by 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,'Search');
/* @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','Search');
$(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_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_98934c98f70735fe3a272005a9eb8736.html">uvw</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">loop.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">#ifndef UVW_LOOP_INCLUDE_H</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define UVW_LOOP_INCLUDE_H</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160; </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="preprocessor">#ifdef _WIN32</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;ciso646&gt;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#endif</span></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="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;uv.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;emitter.h&quot;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;util.h&quot;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceuvw.html">uvw</a> {</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; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">namespace </span>details {</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </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;<span class="keyword">enum class</span> UVLoopOption: std::underlying_type_t&lt;uv_loop_option&gt; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; BLOCK_SIGNAL = UV_LOOP_BLOCK_SIGNAL</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;};</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </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="keyword">enum class</span> UVRunMode: std::underlying_type_t&lt;uv_run_mode&gt; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; DEFAULT = UV_RUN_DEFAULT,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; ONCE = UV_RUN_ONCE,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; NOWAIT = UV_RUN_NOWAIT</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;};</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </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; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="structuvw_1_1BaseHandle.html"> 48</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structuvw_1_1BaseHandle.html">BaseHandle</a> {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceuvw.html#aa3ae4a038de60a69b2513a039add1e48">HandleCategory</a> <a class="code" href="structuvw_1_1BaseHandle.html#a0d00140c6b4d9f662f8f4590521eebc7">category</a>() <span class="keyword">const</span> noexcept = 0;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">virtual</span> HandleType <a class="code" href="structuvw_1_1BaseHandle.html#a9771dcd6699b033ee484837a6419b195">type</a>() <span class="keyword">const</span> noexcept = 0;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="structuvw_1_1BaseHandle.html#af8e2c8bd8bea0bfe3cd0bf22befbf9e6">active</a>() <span class="keyword">const</span> noexcept = 0;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="structuvw_1_1BaseHandle.html#af52ea3d010c19fa5fa3effe2e0d14e0b">closing</a>() <span class="keyword">const</span> noexcept = 0;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structuvw_1_1BaseHandle.html#a6269a35e7b9064f1b5a1721b4b024438">reference</a>() noexcept = 0;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structuvw_1_1BaseHandle.html#afe981579774731e02014b5c3d5ebb0bf">unreference</a>() noexcept = 0;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="structuvw_1_1BaseHandle.html#ac60a3ccabd066fc9da06aa458eb62f64">referenced</a>() <span class="keyword">const</span> noexcept = 0;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structuvw_1_1BaseHandle.html#a83b88fc17d491e48e4c519c9551ab0b4">close</a>() noexcept = 0;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;};</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; </div>
<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classuvw_1_1Loop.html"> 143</a></span>&#160;<span class="keyword">class </span><a class="code" href="classuvw_1_1Loop.html">Loop</a> final: <span class="keyword">public</span> <a class="code" href="classuvw_1_1Emitter.html">Emitter</a>&lt;Loop&gt;, <span class="keyword">public</span> std::enable_shared_from_this&lt;Loop&gt; {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">using</span> Deleter = void(*)(uv_loop_t *);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classuvw_1_1Resource.html">Resource</a>;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classuvw_1_1Loop.html">Loop</a>(std::unique_ptr&lt;uv_loop_t, Deleter&gt; ptr) noexcept;</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;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">using</span> Time = std::chrono::duration&lt;uint64_t, std::milli&gt;;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">using</span> Configure = details::UVLoopOption;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">using</span> Mode = details::UVRunMode;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">static</span> std::shared_ptr&lt;Loop&gt; <a class="code" href="classuvw_1_1Loop.html#ae2a1f36aafb919444d933e4a43e78d8f">create</a>();</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">static</span> std::shared_ptr&lt;Loop&gt; <a class="code" href="classuvw_1_1Loop.html#ae2a1f36aafb919444d933e4a43e78d8f">create</a>(uv_loop_t *loop);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">static</span> std::shared_ptr&lt;Loop&gt; <a class="code" href="classuvw_1_1Loop.html#a284450b3ef37c62bd7a984c73552d7b8">getDefault</a>();</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; <a class="code" href="classuvw_1_1Loop.html">Loop</a>(<span class="keyword">const</span> <a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classuvw_1_1Loop.html">Loop</a>(<a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp;&amp;other) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp; operator=(<span class="keyword">const</span> <a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp; operator=(<a class="code" href="classuvw_1_1Loop.html">Loop</a> &amp;&amp;other) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; ~<a class="code" href="classuvw_1_1Loop.html">Loop</a>() noexcept;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classuvw_1_1Loop.html#ad0fac96934f7ea2a19d16bc6502aeec9"> 212</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#ad0fac96934f7ea2a19d16bc6502aeec9">configure</a>(Configure flag, Args&amp;&amp;... args) {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">auto</span> option = <span class="keyword">static_cast&lt;</span>std::underlying_type_t&lt;Configure&gt;<span class="keyword">&gt;</span>(flag);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">auto</span> err = uv_loop_configure(loop.get(), <span class="keyword">static_cast&lt;</span>uv_loop_option<span class="keyword">&gt;</span>(option), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span>(err) { publish(<a class="code" href="structuvw_1_1ErrorEvent.html">ErrorEvent</a>{err}); }</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; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> R, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classuvw_1_1Loop.html#a7044486c90abcaa665b67e5d9f284dcd"> 229</a></span>&#160; std::shared_ptr&lt;R&gt; <a class="code" href="classuvw_1_1Loop.html#a7044486c90abcaa665b67e5d9f284dcd">resource</a>(Args&amp;&amp;... args) {</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> constexpr(std::is_base_of_v&lt;BaseHandle, R&gt;) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">auto</span> ptr = R::create(shared_from_this(), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; ptr = ptr-&gt;init() ? ptr : <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> ptr;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">return</span> R::create(shared_from_this(), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</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="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#ae0dbd76098075f5a187256834df568c3">close</a>();</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">template</span>&lt;Mode mode = Mode::DEFAULT&gt;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1Loop.html#aa86d06ae9f91d8b48d1d5358040f2547">run</a>() noexcept;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classuvw_1_1Loop.html#adf73136457c892dad414342c8648e6c1">alive</a>() const noexcept;</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#a8e9ff32011351d8cf99b0b3924a670df">stop</a>() noexcept;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classuvw_1_1Loop.html#ac78ffc161590ea88902c867ef716d0a2">descriptor</a>() const noexcept;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; std::pair&lt;<span class="keywordtype">bool</span>, Time&gt; <a class="code" href="classuvw_1_1Loop.html#aa815a8db94b2beb2d23448fe81cf648c">timeout</a>() const noexcept;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; Time <a class="code" href="classuvw_1_1Loop.html#abb1a1000e23e7d1e849a21fd79b86be9">now</a>() const noexcept;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#a080af72a50c18b92bb50e89afa116e57">update</a>() const noexcept;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#a699f41c1c1d31a65c5d12adacdbb94e1">walk</a>(std::function&lt;<span class="keywordtype">void</span>(<a class="code" href="structuvw_1_1BaseHandle.html">BaseHandle</a> &amp;)&gt; callback);</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#a23471c5025efc9db3cc42f6950f952b1">fork</a>() noexcept;</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; </div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; template&lt;typename R = <span class="keywordtype">void</span>&gt;</div>
<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="classuvw_1_1Loop.html#a07480967d95c0f9908fc75292b07c858"> 376</a></span>&#160; std::shared_ptr&lt;R&gt; <a class="code" href="classuvw_1_1Loop.html#a07480967d95c0f9908fc75292b07c858">data</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> std::static_pointer_cast&lt;R&gt;(userData);</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; </div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classuvw_1_1Loop.html#a07480967d95c0f9908fc75292b07c858">data</a>(std::shared_ptr&lt;void&gt; uData);</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; </div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> uv_loop_t * <a class="code" href="classuvw_1_1Loop.html#ac33b64667ba24e94456ed4ec172372c6">raw</a>() const noexcept;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; uv_loop_t * <a class="code" href="classuvw_1_1Loop.html#ac33b64667ba24e94456ed4ec172372c6">raw</a>() noexcept;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;private:</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; std::unique_ptr&lt;uv_loop_t, Deleter&gt; loop;</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; std::shared_ptr&lt;<span class="keywordtype">void</span>&gt; userData{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;};</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; </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="comment">// (extern) explicit instantiations</span></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;<span class="keyword">extern</span> <span class="keyword">template</span> <span class="keywordtype">bool</span> Loop::run&lt;Loop::Mode::DEFAULT&gt;() noexcept;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;extern template <span class="keywordtype">bool</span> Loop::run&lt;Loop::Mode::ONCE&gt;() noexcept;</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;extern template <span class="keywordtype">bool</span> Loop::run&lt;Loop::Mode::NOWAIT&gt;() noexcept;</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; </div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;}</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; </div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#ifndef UVW_AS_LIB</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="preprocessor">#include &quot;loop.cpp&quot;</span></div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; </div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="preprocessor">#endif // UVW_LOOP_INCLUDE_H</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassuvw_1_1Loop_html_a23471c5025efc9db3cc42f6950f952b1"><div class="ttname"><a href="classuvw_1_1Loop.html#a23471c5025efc9db3cc42f6950f952b1">uvw::Loop::fork</a></div><div class="ttdeci">void fork() noexcept</div><div class="ttdoc">Reinitialize any kernel state necessary in the child process after a fork(2) system call.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html"><div class="ttname"><a href="classuvw_1_1Loop.html">uvw::Loop</a></div><div class="ttdoc">The Loop class.</div><div class="ttdef"><b>Definition:</b> <a href="loop_8h_source.html#l00143">loop.h:143</a></div></div>
<div class="ttc" id="anamespaceuvw_html"><div class="ttname"><a href="namespaceuvw.html">uvw</a></div><div class="ttdoc">uvw default namespace.</div><div class="ttdef"><b>Definition:</b> <a href="async_8h_source.html#l00010">async.h:10</a></div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_ae0dbd76098075f5a187256834df568c3"><div class="ttname"><a href="classuvw_1_1Loop.html#ae0dbd76098075f5a187256834df568c3">uvw::Loop::close</a></div><div class="ttdeci">void close()</div><div class="ttdoc">Releases all internal loop resources.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_ac78ffc161590ea88902c867ef716d0a2"><div class="ttname"><a href="classuvw_1_1Loop.html#ac78ffc161590ea88902c867ef716d0a2">uvw::Loop::descriptor</a></div><div class="ttdeci">int descriptor() const noexcept</div><div class="ttdoc">Get backend file descriptor.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a080af72a50c18b92bb50e89afa116e57"><div class="ttname"><a href="classuvw_1_1Loop.html#a080af72a50c18b92bb50e89afa116e57">uvw::Loop::update</a></div><div class="ttdeci">void update() const noexcept</div><div class="ttdoc">Updates the event loops concept of now.</div></div>
<div class="ttc" id="astructuvw_1_1ErrorEvent_html"><div class="ttname"><a href="structuvw_1_1ErrorEvent.html">uvw::ErrorEvent</a></div><div class="ttdoc">The ErrorEvent event.</div><div class="ttdef"><b>Definition:</b> <a href="emitter_8h_source.html#l00024">emitter.h:24</a></div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_af8e2c8bd8bea0bfe3cd0bf22befbf9e6"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#af8e2c8bd8bea0bfe3cd0bf22befbf9e6">uvw::BaseHandle::active</a></div><div class="ttdeci">virtual bool active() const noexcept=0</div><div class="ttdoc">Checks if the handle is active.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_aa86d06ae9f91d8b48d1d5358040f2547"><div class="ttname"><a href="classuvw_1_1Loop.html#aa86d06ae9f91d8b48d1d5358040f2547">uvw::Loop::run</a></div><div class="ttdeci">bool run() noexcept</div><div class="ttdoc">Runs the event loop.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a07480967d95c0f9908fc75292b07c858"><div class="ttname"><a href="classuvw_1_1Loop.html#a07480967d95c0f9908fc75292b07c858">uvw::Loop::data</a></div><div class="ttdeci">std::shared_ptr&lt; R &gt; data() const</div><div class="ttdoc">Gets user-defined data. uvw won't use this field in any case.</div><div class="ttdef"><b>Definition:</b> <a href="loop_8h_source.html#l00376">loop.h:376</a></div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_aa815a8db94b2beb2d23448fe81cf648c"><div class="ttname"><a href="classuvw_1_1Loop.html#aa815a8db94b2beb2d23448fe81cf648c">uvw::Loop::timeout</a></div><div class="ttdeci">std::pair&lt; bool, Time &gt; timeout() const noexcept</div><div class="ttdoc">Gets the poll timeout.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_abb1a1000e23e7d1e849a21fd79b86be9"><div class="ttname"><a href="classuvw_1_1Loop.html#abb1a1000e23e7d1e849a21fd79b86be9">uvw::Loop::now</a></div><div class="ttdeci">Time now() const noexcept</div><div class="ttdoc">Returns the current timestamp in milliseconds.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_ad0fac96934f7ea2a19d16bc6502aeec9"><div class="ttname"><a href="classuvw_1_1Loop.html#ad0fac96934f7ea2a19d16bc6502aeec9">uvw::Loop::configure</a></div><div class="ttdeci">void configure(Configure flag, Args &amp;&amp;... args)</div><div class="ttdoc">Sets additional loop options.</div><div class="ttdef"><b>Definition:</b> <a href="loop_8h_source.html#l00212">loop.h:212</a></div></div>
<div class="ttc" id="aclassuvw_1_1Emitter_html"><div class="ttname"><a href="classuvw_1_1Emitter.html">uvw::Emitter</a></div><div class="ttdoc">Event emitter base class.</div><div class="ttdef"><b>Definition:</b> <a href="emitter_8h_source.html#l00086">emitter.h:86</a></div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_a0d00140c6b4d9f662f8f4590521eebc7"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#a0d00140c6b4d9f662f8f4590521eebc7">uvw::BaseHandle::category</a></div><div class="ttdeci">virtual HandleCategory category() const noexcept=0</div><div class="ttdoc">Gets the category of the handle.</div></div>
<div class="ttc" id="aclassuvw_1_1Resource_html"><div class="ttname"><a href="classuvw_1_1Resource.html">uvw::Resource</a></div><div class="ttdoc">Common class for almost all the resources available in uvw.</div><div class="ttdef"><b>Definition:</b> <a href="resource_8hpp_source.html#l00020">resource.hpp:20</a></div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a284450b3ef37c62bd7a984c73552d7b8"><div class="ttname"><a href="classuvw_1_1Loop.html#a284450b3ef37c62bd7a984c73552d7b8">uvw::Loop::getDefault</a></div><div class="ttdeci">static std::shared_ptr&lt; Loop &gt; getDefault()</div><div class="ttdoc">Gets the initialized default loop.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_ac60a3ccabd066fc9da06aa458eb62f64"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#ac60a3ccabd066fc9da06aa458eb62f64">uvw::BaseHandle::referenced</a></div><div class="ttdeci">virtual bool referenced() const noexcept=0</div><div class="ttdoc">Checks if the given handle referenced.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_a6269a35e7b9064f1b5a1721b4b024438"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#a6269a35e7b9064f1b5a1721b4b024438">uvw::BaseHandle::reference</a></div><div class="ttdeci">virtual void reference() noexcept=0</div><div class="ttdoc">Reference the given handle.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_a83b88fc17d491e48e4c519c9551ab0b4"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#a83b88fc17d491e48e4c519c9551ab0b4">uvw::BaseHandle::close</a></div><div class="ttdeci">virtual void close() noexcept=0</div><div class="ttdoc">Request handle to be closed.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_afe981579774731e02014b5c3d5ebb0bf"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#afe981579774731e02014b5c3d5ebb0bf">uvw::BaseHandle::unreference</a></div><div class="ttdeci">virtual void unreference() noexcept=0</div><div class="ttdoc">Unreference the given handle.</div></div>
<div class="ttc" id="anamespaceuvw_html_aa3ae4a038de60a69b2513a039add1e48"><div class="ttname"><a href="namespaceuvw.html#aa3ae4a038de60a69b2513a039add1e48">uvw::HandleCategory</a></div><div class="ttdeci">details::UVTypeWrapper&lt; uv_handle_type &gt; HandleCategory</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00188">util.h:188</a></div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a699f41c1c1d31a65c5d12adacdbb94e1"><div class="ttname"><a href="classuvw_1_1Loop.html#a699f41c1c1d31a65c5d12adacdbb94e1">uvw::Loop::walk</a></div><div class="ttdeci">void walk(std::function&lt; void(BaseHandle &amp;)&gt; callback)</div><div class="ttdoc">Walks the list of handles.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_a9771dcd6699b033ee484837a6419b195"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#a9771dcd6699b033ee484837a6419b195">uvw::BaseHandle::type</a></div><div class="ttdeci">virtual HandleType type() const noexcept=0</div><div class="ttdoc">Gets the type of the handle.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_ae2a1f36aafb919444d933e4a43e78d8f"><div class="ttname"><a href="classuvw_1_1Loop.html#ae2a1f36aafb919444d933e4a43e78d8f">uvw::Loop::create</a></div><div class="ttdeci">static std::shared_ptr&lt; Loop &gt; create()</div><div class="ttdoc">Initializes a new Loop instance.</div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html"><div class="ttname"><a href="structuvw_1_1BaseHandle.html">uvw::BaseHandle</a></div><div class="ttdoc">Untyped handle class.</div><div class="ttdef"><b>Definition:</b> <a href="loop_8h_source.html#l00048">loop.h:48</a></div></div>
<div class="ttc" id="astructuvw_1_1BaseHandle_html_af52ea3d010c19fa5fa3effe2e0d14e0b"><div class="ttname"><a href="structuvw_1_1BaseHandle.html#af52ea3d010c19fa5fa3effe2e0d14e0b">uvw::BaseHandle::closing</a></div><div class="ttdeci">virtual bool closing() const noexcept=0</div><div class="ttdoc">Checks if a handle is closing or closed.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_adf73136457c892dad414342c8648e6c1"><div class="ttname"><a href="classuvw_1_1Loop.html#adf73136457c892dad414342c8648e6c1">uvw::Loop::alive</a></div><div class="ttdeci">bool alive() const noexcept</div><div class="ttdoc">Checks if there are active resources.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a7044486c90abcaa665b67e5d9f284dcd"><div class="ttname"><a href="classuvw_1_1Loop.html#a7044486c90abcaa665b67e5d9f284dcd">uvw::Loop::resource</a></div><div class="ttdeci">std::shared_ptr&lt; R &gt; resource(Args &amp;&amp;... args)</div><div class="ttdoc">Creates resources of any type.</div><div class="ttdef"><b>Definition:</b> <a href="loop_8h_source.html#l00229">loop.h:229</a></div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_ac33b64667ba24e94456ed4ec172372c6"><div class="ttname"><a href="classuvw_1_1Loop.html#ac33b64667ba24e94456ed4ec172372c6">uvw::Loop::raw</a></div><div class="ttdeci">const uv_loop_t * raw() const noexcept</div><div class="ttdoc">Gets the underlying raw data structure.</div></div>
<div class="ttc" id="aclassuvw_1_1Loop_html_a8e9ff32011351d8cf99b0b3924a670df"><div class="ttname"><a href="classuvw_1_1Loop.html#a8e9ff32011351d8cf99b0b3924a670df">uvw::Loop::stop</a></div><div class="ttdeci">void stop() noexcept</div><div class="ttdoc">Stops the event loop.</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#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>