Files
entt/registry_8hpp_source.html
2021-07-21 14:02:37 +02:00

1012 lines
220 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: src/entt/entity/registry.hpp 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">EnTT
&#160;<span id="projectnumber">3.8.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<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','.html');
/* @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_66e9674e8206a335795995fa32a03c91.html">entt</a></li><li class="navelem"><a class="el" href="dir_e3a7bb56c55e5c2286e2fe96e197d4f5.html">entity</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">registry.hpp</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 ENTT_ENTITY_REGISTRY_HPP</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define ENTT_ENTITY_REGISTRY_HPP</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">#include &lt;algorithm&gt;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;type_traits&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;vector&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;../config/config.h&quot;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;../core/algorithm.hpp&quot;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;../core/any.hpp&quot;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;../core/fwd.hpp&quot;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;../core/type_info.hpp&quot;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../core/type_traits.hpp&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;component.hpp&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;entity.hpp&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;fwd.hpp&quot;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;group.hpp&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;poly_storage.hpp&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;runtime_view.hpp&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;sparse_set.hpp&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;storage.hpp&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;utility.hpp&quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;view.hpp&quot;</span></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; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceentt.html">entt</a> {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Entity&gt;</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html"> 45</a></span>&#160;<span class="keyword">class </span><a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1entt__traits.html">traits_type</a> = <a class="code" href="classentt_1_1entt__traits.html">entt_traits&lt;Entity&gt;</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">using</span> poly_storage_type = <span class="keyword">typename</span> <a class="code" href="classentt_1_1basic__poly.html">poly_storage_traits&lt;Entity&gt;::storage_type</a>;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1basic__sparse__set.html">basic_common_type</a> = <a class="code" href="classentt_1_1basic__sparse__set.html">basic_sparse_set&lt;Entity&gt;</a>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">using</span> storage_type = <a class="code" href="namespaceentt.html#a7b051461867d3c5c97f77f10b662c26b">constness_as_t&lt;typename storage_traits&lt;Entity, std::remove_const_t&lt;Component&gt;</a>&gt;::storage_type, Component&gt;;</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">struct </span>pool_data {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; poly_storage_type <a class="code" href="namespaceentt.html#aad3d1f1d0e83ad8f124155c9e511c2cd">poly</a>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::unique_ptr&lt;basic_common_type&gt; pool{};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; };</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>...&gt;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">struct </span>group_handler;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Exclude, <span class="keyword">typename</span>... Get, <span class="keyword">typename</span>... Owned&gt;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">struct </span>group_handler&lt;<a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t</a>&lt;Get...&gt;, Owned...&gt; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; static_assert(!std::disjunction_v&lt;<span class="keyword">typename</span> <a class="code" href="structentt_1_1basic__component__traits.html#af33aa4f747fb2a108434048c9661c686">component_traits&lt;Owned&gt;::in_place_delete</a>...&gt;, <span class="stringliteral">&quot;Groups do not support in-place delete&quot;</span>);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; static_assert(std::conjunction_v&lt;std::is_same&lt;Owned, std::remove_const_t&lt;Owned&gt;&gt;..., std::is_same&lt;Get, std::remove_const_t&lt;Get&gt;&gt;..., std::is_same&lt;Exclude, std::remove_const_t&lt;Exclude&gt;&gt;...&gt;, <span class="stringliteral">&quot;One or more component types are invalid&quot;</span>);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; std::conditional_t&lt;<span class="keyword">sizeof</span>...(Owned) == 0, <a class="code" href="classentt_1_1basic__sparse__set.html">basic_common_type</a>, std::size_t&gt; <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>{};</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">void</span> maybe_valid_if(<a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> &amp;owner, <span class="keyword">const</span> Entity <a class="code" href="namespaceentt.html">entt</a>) {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; [[maybe_unused]] <span class="keyword">const</span> <span class="keyword">auto</span> cpools = std::make_tuple(owner.assure&lt;Owned&gt;()...);</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="keyword">const</span> <span class="keyword">auto</span> is_valid = ((std::is_same_v&lt;Component, Owned&gt; || std::get&lt;storage_type&lt;Owned&gt; *&gt;(cpools)-&gt;contains(<a class="code" href="namespaceentt.html">entt</a>)) &amp;&amp; ...)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; &amp;&amp; ((std::is_same_v&lt;Component, Get&gt; || owner.assure&lt;Get&gt;()-&gt;contains(<a class="code" href="namespaceentt.html">entt</a>)) &amp;&amp; ...)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; &amp;&amp; ((std::is_same_v&lt;Component, Exclude&gt; || !owner.assure&lt;Exclude&gt;()-&gt;contains(<a class="code" href="namespaceentt.html">entt</a>)) &amp;&amp; ...);</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; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Owned) == 0) {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span>(is_valid &amp;&amp; !<a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>.contains(<a class="code" href="namespaceentt.html">entt</a>)) {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>.emplace(<a class="code" href="namespaceentt.html">entt</a>);</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; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span>(is_valid &amp;&amp; !(std::get&lt;0&gt;(cpools)-&gt;index(<a class="code" href="namespaceentt.html">entt</a>) &lt; <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>)) {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> pos = <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>++;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; (std::get&lt;storage_type&lt;Owned&gt; *&gt;(cpools)-&gt;swap(std::get&lt;storage_type&lt;Owned&gt; *&gt;(cpools)-&gt;data()[pos], <a class="code" href="namespaceentt.html">entt</a>), ...);</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; }</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; <span class="keywordtype">void</span> discard_if([[maybe_unused]] <a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> &amp;owner, <span class="keyword">const</span> Entity <a class="code" href="namespaceentt.html">entt</a>) {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Owned) == 0) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>.remove(<a class="code" href="namespaceentt.html">entt</a>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> cpools = std::make_tuple(owner.assure&lt;Owned&gt;()...); std::get&lt;0&gt;(cpools)-&gt;contains(<a class="code" href="namespaceentt.html">entt</a>) &amp;&amp; (std::get&lt;0&gt;(cpools)-&gt;index(<a class="code" href="namespaceentt.html">entt</a>) &lt; <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>)) {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> pos = --<a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; (std::get&lt;storage_type&lt;Owned&gt; *&gt;(cpools)-&gt;swap(std::get&lt;storage_type&lt;Owned&gt; *&gt;(cpools)-&gt;data()[pos], <a class="code" href="namespaceentt.html">entt</a>), ...);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</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; };</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">struct </span>group_data {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::size_t <a class="code" href="classentt_1_1basic__registry.html#a747d182de87516a3445f8df77d65e815">size</a>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; std::unique_ptr&lt;void, void(*)(<span class="keywordtype">void</span> *)&gt; <a class="code" href="classentt_1_1basic__group.html">group</a>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; bool (* owned)(<span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a>) ENTT_NOEXCEPT;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; bool (* <a class="code" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df">get</a>)(<span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a>) ENTT_NOEXCEPT;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; bool (* <a class="code" href="namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6">exclude</a>)(<span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a>) ENTT_NOEXCEPT;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; };</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">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; [[nodiscard]] storage_type&lt;Component&gt; * assure()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; static_assert(std::is_same_v&lt;Component, std::decay_t&lt;Component&gt;&gt;, <span class="stringliteral">&quot;Non-decayed types not allowed&quot;</span>);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> index = <a class="code" href="structentt_1_1type__seq.html#a4e2551d32b2eb0d5ab7681695de66248">type_seq&lt;Component&gt;::value</a>();</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span>(!(index &lt; pools.size())) {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; pools.resize(<a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>(index)+1u);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">auto</span> &amp;&amp;pdata = pools[index]; !pdata.pool) {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; pdata.pool.reset(<span class="keyword">new</span> storage_type&lt;Component&gt;());</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; pdata.poly.template emplace&lt;storage_type&lt;Component&gt; &amp;&gt;(*<span class="keyword">static_cast&lt;</span>storage_type&lt;Component&gt; *<span class="keyword">&gt;</span>(pdata.pool.get()));</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>storage_type&lt;Component&gt; *<span class="keyword">&gt;</span>(pools[index].pool.get());</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; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; [[nodiscard]] <span class="keyword">const</span> storage_type&lt;Component&gt; * pool_if_exists() <span class="keyword">const</span> ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; static_assert(std::is_same_v&lt;Component, std::decay_t&lt;Component&gt;&gt;, <span class="stringliteral">&quot;Non-decayed types not allowed&quot;</span>);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> index = <a class="code" href="structentt_1_1type__seq.html#a4e2551d32b2eb0d5ab7681695de66248">type_seq&lt;Component&gt;::value</a>();</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span> (!(index &lt; pools.size()) || !pools[index].pool) ? nullptr : <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>storage_type&lt;Component&gt; *<span class="keyword">&gt;</span>(pools[index].pool.get());</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</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">auto</span> generate_identifier(<span class="keyword">const</span> std::size_t pos) ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; ENTT_ASSERT(pos &lt; <a class="code" href="classentt_1_1entt__traits.html#a3797423cba124a5d52a7fcd247b16842">traits_type::to_integral</a>(<span class="keyword">null</span>), <span class="stringliteral">&quot;No entities available&quot;</span>);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">traits_type::construct</a>(<span class="keyword">static_cast&lt;</span>typename <a class="code" href="classentt_1_1entt__traits.html#a7c56e48588b138d9ed3ec0bff3ca872a">traits_type::entity_type</a><span class="keyword">&gt;</span>(pos), {});</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> recycle_identifier() ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; ENTT_ASSERT(free_list != <span class="keyword">null</span>, <span class="stringliteral">&quot;No entities available&quot;</span>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> curr = <a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(free_list);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; free_list = (<a class="code" href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">tombstone</a> | entities[curr]);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> (entities[curr] = <a class="code" href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">traits_type::construct</a>(curr, <a class="code" href="classentt_1_1entt__traits.html#aedb75689bab1bf13e99a8267662b7bc6">traits_type::to_version</a>(entities[curr])));</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</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; <span class="keyword">auto</span> release_entity(<span class="keyword">const</span> Entity <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classentt_1_1entt__traits.html#a455de7d5fcbcd138fb4b431305175ef0">traits_type::version_type</a> <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>) {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classentt_1_1entt__traits.html#a455de7d5fcbcd138fb4b431305175ef0">traits_type::version_type</a> vers = <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a> + (<a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a> == <a class="code" href="classentt_1_1entt__traits.html#aedb75689bab1bf13e99a8267662b7bc6">traits_type::to_version</a>(<a class="code" href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">tombstone</a>));</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; entities[<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)] = <a class="code" href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">traits_type::construct</a>(<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(free_list), vers);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; free_list = (<a class="code" href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">tombstone</a> | <a class="code" href="classentt_1_1basic__registry.html#a3e4a944c90598b7223f78cb7057d1a58">entity</a>);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> vers;</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; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138"> 152</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> = Entity;</div>
<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6"> 154</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> = <span class="keyword">typename</span> <a class="code" href="classentt_1_1entt__traits.html#a455de7d5fcbcd138fb4b431305175ef0">traits_type::version_type</a>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636"> 156</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> = std::size_t;</div>
<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aad36d8c035f2315d7013277e973dcffb"> 158</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classentt_1_1basic__registry.html#aad36d8c035f2315d7013277e973dcffb">poly_storage</a> = <span class="keyword">typename</span> <a class="code" href="classentt_1_1basic__poly.html">poly_storage_traits&lt;Entity&gt;::storage_type</a>;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3e4a944c90598b7223f78cb7057d1a58"> 165</a></span>&#160; [[nodiscard]] <span class="keyword">static</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#a3e4a944c90598b7223f78cb7057d1a58">entity</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">traits_type::construct</a>(<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), {});</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478"> 174</a></span>&#160; [[nodiscard]] <span class="keyword">static</span> <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1entt__traits.html#aedb75689bab1bf13e99a8267662b7bc6">traits_type::to_version</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</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; </div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a0998b4125d8d2c92817dccac31e7f652"> 179</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a0998b4125d8d2c92817dccac31e7f652">basic_registry</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f"> 182</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f">basic_registry</a>(<a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59"> 185</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> &amp; <a class="code" href="classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59">operator=</a>(<a class="code" href="classentt_1_1basic__registry.html">basic_registry</a> &amp;&amp;) = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6"> 192</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6">prepare</a>() {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// suppress the warning due to the [[nodiscard]] attribute</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span><span class="keyword">&gt;</span>(assure&lt;Component&gt;());</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a6d5e54549668622c5e1e02ba58a45212"> 203</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#aad36d8c035f2315d7013277e973dcffb">poly_storage</a> &amp; <a class="code" href="classentt_1_1basic__registry.html#a6d5e54549668622c5e1e02ba58a45212">storage</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1type__info.html">type_info</a> info) {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; ENTT_ASSERT(info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>() &lt; pools.size() &amp;&amp; pools[info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>()].poly, <span class="stringliteral">&quot;Storage not available&quot;</span>);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> pools[info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>()].poly;</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; </div>
<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aa4fd18bd8b1733c82b1ff3fa892a1a66"> 209</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#aad36d8c035f2315d7013277e973dcffb">poly_storage</a> &amp; <a class="code" href="classentt_1_1basic__registry.html#aa4fd18bd8b1733c82b1ff3fa892a1a66">storage</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1type__info.html">type_info</a> info)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; ENTT_ASSERT(info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>() &lt; pools.size() &amp;&amp; pools[info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>()].poly, <span class="stringliteral">&quot;Storage not available&quot;</span>);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> pools[info.<a class="code" href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">seq</a>()].poly;</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; </div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a747d182de87516a3445f8df77d65e815"> 220</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a747d182de87516a3445f8df77d65e815">size</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *cpool = pool_if_exists&lt;Component&gt;();</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> cpool ? cpool-&gt;size() : <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>{};</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="l00229"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a5b056608b1723b73a001e20d2f2592bc"> 229</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a5b056608b1723b73a001e20d2f2592bc">size</a>() const ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> entities.size();</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a7a42cddcb9bd14802bd597e789ff341f"> 237</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a7a42cddcb9bd14802bd597e789ff341f">alive</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keyword">auto</span> sz = entities.size();</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> curr = free_list; curr != <span class="keyword">null</span>; --sz) {</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; curr = entities[<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(curr)];</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</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; <span class="keywordflow">return</span> sz;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe"> 261</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe">reserve</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> cap) {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 0) {</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; entities.reserve(cap);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; (assure&lt;Component&gt;()-&gt;reserve(cap), ...);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; [[deprecated(<span class="stringliteral">&quot;No longer supported&quot;</span>)]]</div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a38bbefe07c81d2c5ed69ff8e4da45c48"> 274</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a38bbefe07c81d2c5ed69ff8e4da45c48">reserve_pools</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> count) {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; pools.reserve(count);</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; </div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a40c4a407d4a7a74fec41d44e915c4d89"> 284</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a40c4a407d4a7a74fec41d44e915c4d89">capacity</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *cpool = pool_if_exists&lt;Component&gt;();</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> cpool ? cpool-&gt;capacity() : <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>{};</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a05fd96006ea9f68b679507cdc67260ce"> 294</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a05fd96006ea9f68b679507cdc67260ce">capacity</a>() const ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> entities.capacity();</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e"> 304</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e">shrink_to_fit</a>() {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; (assure&lt;Component&gt;()-&gt;shrink_to_fit(), ...);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aba306a930c1a516cb9c9a764d2f4791f"> 320</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#aba306a930c1a516cb9c9a764d2f4791f">empty</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 0) {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">return</span> !<a class="code" href="classentt_1_1basic__registry.html#a7a42cddcb9bd14802bd597e789ff341f">alive</a>();</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> [](<span class="keyword">const</span> <span class="keyword">auto</span> *... cpool) { <span class="keywordflow">return</span> ((!cpool || cpool-&gt;empty()) &amp;&amp; ...); }(pool_if_exists&lt;Component&gt;()...);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</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="l00340"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#abd873a2d0dfb67f3fd27ce9ed23f61c2"> 340</a></span>&#160; [[nodiscard]] <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> * <a class="code" href="classentt_1_1basic__registry.html#abd873a2d0dfb67f3fd27ce9ed23f61c2">data</a>() const ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> entities.data();</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
<div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a48630f103bc6448af1f2b2928df4f488"> 352</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#a48630f103bc6448af1f2b2928df4f488">released</a>() const ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> free_list;</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; </div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; [[deprecated(<span class="stringliteral">&quot;Use ::released instead&quot;</span>)]]</div>
<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a4c6d73b07371b6d5b53e0d0c6197e25f"> 358</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#a4c6d73b07371b6d5b53e0d0c6197e25f">destroyed</a>() const ENTT_NOEXCEPT {</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a48630f103bc6448af1f2b2928df4f488">released</a>();</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; </div>
<div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d"> 367</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> pos = <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>(<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>));</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> (pos &lt; entities.size() &amp;&amp; entities[pos] == <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; </div>
<div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6"> 383</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">current</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> pos = <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>(<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>));</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ENTT_ASSERT(pos &lt; entities.size(), <span class="stringliteral">&quot;Entity does not exist&quot;</span>);</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(entities[pos]);</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; </div>
<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a91bfd7ec05e6d718e47da581a893cdc4"> 399</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#a91bfd7ec05e6d718e47da581a893cdc4">create</a>() {</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> (free_list == <span class="keyword">null</span>) ? entities.emplace_back(generate_identifier(entities.size())) : recycle_identifier();</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ab04ebcb3409a5e99a3a86a2f5b48e052"> 414</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#ab04ebcb3409a5e99a3a86a2f5b48e052">create</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> hint) {</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> length = entities.size();</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span>(hint == <span class="keyword">null</span> || hint == <a class="code" href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">tombstone</a>) {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a91bfd7ec05e6d718e47da581a893cdc4">create</a>();</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> req = <a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(hint); !(req &lt; length)) {</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; entities.resize(<a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>(req) + 1u, <span class="keyword">null</span>);</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; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = length; pos &lt; req; ++pos) {</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; release_entity(generate_identifier(pos), {});</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="keywordflow">return</span> (entities[req] = hint);</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> curr = <a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(entities[req]); req == curr) {</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a91bfd7ec05e6d718e47da581a893cdc4">create</a>();</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">auto</span> *it = &amp;free_list;</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">for</span>(; <a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(*it) != req; it = &amp;entities[<a class="code" href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">traits_type::to_entity</a>(*it)]);</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; *it = <a class="code" href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">traits_type::construct</a>(curr, <a class="code" href="classentt_1_1entt__traits.html#aedb75689bab1bf13e99a8267662b7bc6">traits_type::to_version</a>(*it));</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> (entities[req] = hint);</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; </div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a334768416fdf6372ecfdef9ec4f03e83"> 447</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a334768416fdf6372ecfdef9ec4f03e83">create</a>(It first, It last) {</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">for</span>(; free_list != <span class="keyword">null</span> &amp;&amp; first != last; ++first) {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; *first = recycle_identifier();</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; </div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> length = entities.size();</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; entities.resize(length + std::distance(first, last), <span class="keyword">null</span>);</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = length; first != last; ++first, ++pos) {</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; *first = entities[pos] = generate_identifier(pos);</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a35d217b9bc09235d55388941de380f72"> 478</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a35d217b9bc09235d55388941de380f72">assign</a>(It first, It last, <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="classentt_1_1basic__registry.html#a4c6d73b07371b6d5b53e0d0c6197e25f">destroyed</a>) {</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; ENTT_ASSERT(!<a class="code" href="classentt_1_1basic__registry.html#a7a42cddcb9bd14802bd597e789ff341f">alive</a>(), <span class="stringliteral">&quot;Entities still alive&quot;</span>);</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; entities.assign(first, last);</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; free_list = <a class="code" href="classentt_1_1basic__registry.html#a4c6d73b07371b6d5b53e0d0c6197e25f">destroyed</a>;</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; </div>
<div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e"> 495</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e">release</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e">release</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) + 1u);</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
<div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#af9c919867fc93a7e1a2d0762ac3a9877"> 511</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#af9c919867fc93a7e1a2d0762ac3a9877">release</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>) {</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; ENTT_ASSERT(<a class="code" href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551">orphan</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Non-orphan entity&quot;</span>);</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> release_entity(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>);</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; </div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a69fa71876716487256ac47e19f27c553"> 526</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a69fa71876716487256ac47e19f27c553">release</a>(It first, It last) {</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">for</span>(; first != last; ++first) {</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e">release</a>(*first, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(*first) + 1u);</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; </div>
<div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a7b2c0368d508a6af2d094a9fc592a4a0"> 547</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#a7b2c0368d508a6af2d094a9fc592a4a0">destroy</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a7b2c0368d508a6af2d094a9fc592a4a0">destroy</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) + 1u);</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#adc175a0d3bcf83a133c63890c674ceb3"> 563</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#adc175a0d3bcf83a133c63890c674ceb3">destroy</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>) {</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; ENTT_ASSERT(<a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; </div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;&amp;pdata: pools) {</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; pdata.pool &amp;&amp; pdata.pool-&gt;remove(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; }</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; </div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> release_entity(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>);</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7"> 583</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7">destroy</a>(It first, It last) {</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> constexpr(is_iterator_type_v&lt;typename basic_common_type::iterator, It&gt;) {</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">for</span>(; first != last; ++first) {</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a7b2c0368d508a6af2d094a9fc592a4a0">destroy</a>(*first, <a class="code" href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">version</a>(*first) + 1u);</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;&amp;pdata: pools) {</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; pdata.pool &amp;&amp; pdata.pool-&gt;remove(first, last, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e">release</a>(first, last);</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ac138930f54716e2b31907586e45367be"> 615</a></span>&#160; decltype(<span class="keyword">auto</span>) <a class="code" href="classentt_1_1basic__registry.html#ac138930f54716e2b31907586e45367be">emplace</a>(const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Args &amp;&amp;... args) {</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; ENTT_ASSERT(<a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;emplace(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3587004bdab85280c2a2a1b6371fd4c5"> 632</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a3587004bdab85280c2a2a1b6371fd4c5">insert</a>(It first, It last, <span class="keyword">const</span> Component &amp;value = {}) {</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; ENTT_ASSERT(std::all_of(first, last, [<span class="keyword">this</span>](<span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) { <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>); }), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; assure&lt;Component&gt;()-&gt;insert(*<span class="keyword">this</span>, first, last, value);</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; template&lt;typename Component, typename EIt, typename CIt, typename = std::enable_if_t&lt;std::is_same_v&lt;std::decay_t&lt;typename std::iterator_traits&lt;CIt&gt;::value_type&gt;, Component&gt;&gt;&gt;</div>
<div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a1a37b2a842fd3877bc25e3217a01ee11"> 650</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a1a37b2a842fd3877bc25e3217a01ee11">insert</a>(EIt first, EIt last, CIt from) {</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; static_assert(std::is_constructible_v&lt;Component, <span class="keyword">typename</span> std::iterator_traits&lt;CIt&gt;::value_type&gt;, <span class="stringliteral">&quot;Invalid value type&quot;</span>);</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; ENTT_ASSERT(std::all_of(first, last, [<span class="keyword">this</span>](<span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) { <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>); }), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; assure&lt;Component&gt;()-&gt;insert(*<span class="keyword">this</span>, first, last, from);</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a5c768fb13e23109823e1dc217eee100a"> 677</a></span>&#160; decltype(<span class="keyword">auto</span>) <a class="code" href="classentt_1_1basic__registry.html#a5c768fb13e23109823e1dc217eee100a">emplace_or_replace</a>(const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Args &amp;&amp;... args) {</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; ENTT_ASSERT(<a class="code" href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">valid</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keyword">auto</span> *cpool = assure&lt;Component&gt;();</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">return</span> cpool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; ? cpool-&gt;patch(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, [&amp;args...](<span class="keyword">auto</span> &amp;... curr) { ((curr = Component{std::forward&lt;Args&gt;(args)...}), ...); })</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; : cpool-&gt;emplace(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span>... Func&gt;</div>
<div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a4e83139f8d6774092bb4e0d14446f875"> 711</a></span>&#160; decltype(<span class="keyword">auto</span>) patch(const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Func &amp;&amp;... func) {</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;patch(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, std::forward&lt;Func&gt;(func)...);</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; }</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; </div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661"> 734</a></span>&#160; decltype(<span class="keyword">auto</span>) replace(const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Args &amp;&amp;... args) {</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;patch(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, [&amp;args...](<span class="keyword">auto</span> &amp;... curr) { ((curr = Component{std::forward&lt;Args&gt;(args)...}), ...); });</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; </div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a828206f7d5bbde61c6e63f742ab1cf6d"> 749</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#a828206f7d5bbde61c6e63f742ab1cf6d">remove</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Provide one or more component types&quot;</span>);</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span> (assure&lt;Component&gt;()-&gt;remove(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>) + ... + <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a>{});</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; </div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component, <span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#adde389b3b2224d40bdd15945bd048a77"> 767</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#adde389b3b2224d40bdd15945bd048a77">remove</a>(It first, It last) {</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Provide one or more component types&quot;</span>);</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cpools = std::make_tuple(assure&lt;Component&gt;()...);</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> count{};</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">for</span>(; first != last; ++first) {</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a> = *first;</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; count += (std::get&lt;storage_type&lt;Component&gt; *&gt;(cpools)-&gt;remove(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>) + ...);</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; }</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; </div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">return</span> count;</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; </div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00792"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#af92741bdee80da6da80171ce7ff17774"> 792</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#af92741bdee80da6da80171ce7ff17774">erase</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Provide one or more component types&quot;</span>);</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; (assure&lt;Component&gt;()-&gt;erase(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>), ...);</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; }</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; </div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component, <span class="keyword">typename</span> It&gt;</div>
<div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3665d26a32ce8fa770fd0e2094cd6a0f"> 809</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a3665d26a32ce8fa770fd0e2094cd6a0f">erase</a>(It first, It last) {</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Provide one or more component types&quot;</span>);</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cpools = std::make_tuple(assure&lt;Component&gt;()...);</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; </div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">for</span>(; first != last; ++first) {</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a> = *first;</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; (std::get&lt;storage_type&lt;Component&gt; *&gt;(cpools)-&gt;erase(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>), ...);</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a27f61f6b3347811854b7d1c2bd97db99"> 826</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a27f61f6b3347811854b7d1c2bd97db99">compact</a>() {</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 0) {</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;&amp;pdata: pools) {</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; pdata.pool &amp;&amp; (pdata.pool-&gt;compact(), <span class="keyword">true</span>);</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; }</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; (assure&lt;Component&gt;()-&gt;compact(), ...);</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; }</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; </div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; [[deprecated(<span class="stringliteral">&quot;Use ::remove instead&quot;</span>)]]</div>
<div class="line"><a name="l00839"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ad2c2d2f9d5f79186215919e3d0c00565"> 839</a></span>&#160; <a class="code" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> <a class="code" href="classentt_1_1basic__registry.html#ad2c2d2f9d5f79186215919e3d0c00565">remove_if_exists</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">return</span> remove&lt;Component...&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; [[deprecated(<span class="stringliteral">&quot;Use ::destroy(entity)/::create(entity) instead&quot;</span>)]]</div>
<div class="line"><a name="l00858"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a46d948137afacbb1e4e79b72c917c5ea"> 858</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a46d948137afacbb1e4e79b72c917c5ea">remove_all</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; </div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;&amp;pdata: pools) {</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; pdata.pool &amp;&amp; pdata.pool-&gt;remove(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; }</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; </div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00877"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a40072eca607846f43f47d0e3f11dd196"> 877</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#a40072eca607846f43f47d0e3f11dd196">all_of</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> [<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>](<span class="keyword">const</span> <span class="keyword">auto</span> *... cpool) { <span class="keywordflow">return</span> ((cpool &amp;&amp; cpool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)) &amp;&amp; ...); }(pool_if_exists&lt;Component&gt;()...);</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; }</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; </div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a08f819276fd2d8b2b2b6d01357f61a42"> 894</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#a08f819276fd2d8b2b2b6d01357f61a42">any_of</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">return</span> [<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>](<span class="keyword">const</span> <span class="keyword">auto</span> *... cpool) { <span class="keywordflow">return</span> !((!cpool || !cpool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)) &amp;&amp; ...); }(pool_if_exists&lt;Component&gt;()...);</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; }</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; </div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00911"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df"> 911</a></span>&#160; [[nodiscard]] decltype(<span class="keyword">auto</span>) get([[maybe_unused]] const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; </div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 1) {</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *cpool = pool_if_exists&lt;std::remove_const_t&lt;Component&gt;...&gt;();</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; ENTT_ASSERT(cpool, <span class="stringliteral">&quot;Storage not available&quot;</span>);</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="keywordflow">return</span> cpool-&gt;get(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">return</span> std::forward_as_tuple(get&lt;Component&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)...);</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; }</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; }</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; </div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00925"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a0b1a73cf6349646adfd6a6715be93df1"> 925</a></span>&#160; [[nodiscard]] decltype(<span class="keyword">auto</span>) get([[maybe_unused]] const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; </div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 1) {</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">return</span> (<span class="keyword">const_cast&lt;</span>Component &amp;<span class="keyword">&gt;</span>(assure&lt;std::remove_const_t&lt;Component&gt;&gt;()-&gt;<a class="code" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e">get</a>(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)), ...);</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">return</span> std::forward_as_tuple(get&lt;Component&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)...);</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; }</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; }</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; </div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00958"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ae8b86324fa88b9162050daf599d0f094"> 958</a></span>&#160; [[nodiscard]] decltype(<span class="keyword">auto</span>) get_or_emplace(const <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Args &amp;&amp;... args) {</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">auto</span> *cpool = assure&lt;Component&gt;();</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordflow">return</span> cpool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) ? cpool-&gt;get(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) : cpool-&gt;emplace(*<span class="keyword">this</span>, <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; }</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; </div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00978"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a9a01c958149b6c0d5b233a1a7c3c3bb3"> 978</a></span>&#160; [[nodiscard]] <span class="keyword">auto</span> <a class="code" href="classentt_1_1basic__registry.html#a9a01c958149b6c0d5b233a1a7c3c3bb3">try_get</a>([[maybe_unused]] <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; </div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 1) {</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> *cpool = pool_if_exists&lt;std::remove_const_t&lt;Component&gt;...&gt;();</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">return</span> (cpool &amp;&amp; cpool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)) ? &amp;cpool-&gt;get(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) : <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">return</span> std::make_tuple(try_get&lt;Component&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)...);</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; }</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; }</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; </div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l00991"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#acc3f7f2d48549f2386b065988bc372b7"> 991</a></span>&#160; [[nodiscard]] <span class="keyword">auto</span> <a class="code" href="classentt_1_1basic__registry.html#acc3f7f2d48549f2386b065988bc372b7">try_get</a>([[maybe_unused]] <span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; </div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 1) {</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">return</span> (<span class="keyword">const_cast&lt;</span>Component *<span class="keyword">&gt;</span>(std::as_const(*this).template try_get&lt;Component&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)), ...);</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">return</span> std::make_tuple(try_get&lt;Component&gt;(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)...);</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; }</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; </div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aa4b08ad282560ead88ceeeddba16f552"> 1006</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#aa4b08ad282560ead88ceeeddba16f552">clear</a>() {</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Component) == 0) {</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;&amp;pdata: pools) {</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; pdata.pool &amp;&amp; (pdata.pool-&gt;clear(<span class="keyword">this</span>), <span class="keyword">true</span>);</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; }</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; </div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; each([<span class="keyword">this</span>](<span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) { release_entity(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, version(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) + 1u); });</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; (assure&lt;Component&gt;()-&gt;clear(<span class="keyword">this</span>), ...);</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; }</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; }</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; </div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Func&gt;</div>
<div class="line"><a name="l01036"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754"> 1036</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754">each</a>(Func func)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span>(free_list == <span class="keyword">null</span>) {</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = entities.size(); pos; --pos) {</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; func(entities[pos-1]);</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = entities.size(); pos; --pos) {</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a> = entities[pos - 1]; traits_type::to_entity(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) == (pos - 1)) {</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; func(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; }</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; }</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; }</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; }</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; </div>
<div class="line"><a name="l01055"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551"> 1055</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551">orphan</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; ENTT_ASSERT(valid(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>), <span class="stringliteral">&quot;Invalid entity&quot;</span>);</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">return</span> std::none_of(pools.cbegin(), pools.cend(), [<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>](<span class="keyword">auto</span> &amp;&amp;pdata) { return pdata.pool &amp;&amp; pdata.pool-&gt;contains(entity); });</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; }</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; </div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Func&gt;</div>
<div class="line"><a name="l01077"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8"> 1077</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8">orphans</a>(Func func)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; each([<span class="keyword">this</span>, &amp;func](<span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>) {</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span>(orphan(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)) {</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; func(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>);</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; }</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; });</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; }</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l01106"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#adc3cd847e65843f936824cd7d45984a5"> 1106</a></span>&#160; [[nodiscard]] <span class="keyword">auto</span> <a class="code" href="classentt_1_1basic__registry.html#adc3cd847e65843f936824cd7d45984a5">on_construct</a>() {</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;on_construct();</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; </div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l01129"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aaaf474d42df7b8852c4656152cc4a295"> 1129</a></span>&#160; [[nodiscard]] <span class="keyword">auto</span> <a class="code" href="classentt_1_1basic__registry.html#aaaf474d42df7b8852c4656152cc4a295">on_update</a>() {</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;on_update();</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; }</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; </div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component&gt;</div>
<div class="line"><a name="l01154"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ad87a72c6d1e49a2fd992ddb7fd9d5a93"> 1154</a></span>&#160; [[nodiscard]] <span class="keyword">auto</span> <a class="code" href="classentt_1_1basic__registry.html#ad87a72c6d1e49a2fd992ddb7fd9d5a93">on_destroy</a>() {</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordflow">return</span> assure&lt;Component&gt;()-&gt;on_destroy();</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; }</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; </div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a919cb6946314d79a42ecb13c31f0ac93"> 1191</a></span>&#160; [[nodiscard]] <a class="code" href="structentt_1_1basic__view.html">basic_view</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, std::add_const_t&lt;Component&gt;...&gt; <a class="code" href="classentt_1_1basic__registry.html#a919cb6946314d79a42ecb13c31f0ac93">view</a>(<a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) <span class="keyword">const</span> {</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Exclusion-only views are not supported&quot;</span>);</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="keywordflow">return</span> { *assure&lt;std::remove_const_t&lt;Component&gt;&gt;()..., *assure&lt;Exclude&gt;()... };</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; }</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01198"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a49034a5ead1dda9c7c436413b172f33f"> 1198</a></span>&#160; [[nodiscard]] <a class="code" href="structentt_1_1basic__view.html">basic_view</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, Component...&gt; <a class="code" href="classentt_1_1basic__registry.html#a49034a5ead1dda9c7c436413b172f33f">view</a>(<a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) {</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Component) &gt; 0, <span class="stringliteral">&quot;Exclusion-only views are not supported&quot;</span>);</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">return</span> { *assure&lt;std::remove_const_t&lt;Component&gt;&gt;()..., *assure&lt;Exclude&gt;()... };</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; }</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; </div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ItComp, <span class="keyword">typename</span> ItExcl = <span class="keywordtype">id</span>_type *&gt;</div>
<div class="line"><a name="l01232"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#af1d54beb5ae95d5f867c60c05319d1eb"> 1232</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__runtime__view.html">basic_runtime_view&lt;Entity&gt;</a> <a class="code" href="classentt_1_1basic__registry.html#af1d54beb5ae95d5f867c60c05319d1eb">runtime_view</a>(ItComp first, ItComp last, ItExcl from = {}, ItExcl to = {}) <span class="keyword">const</span> {</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; std::vector&lt;const basic_common_type *&gt; component(std::distance(first, last));</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; std::vector&lt;const basic_common_type *&gt; filter(std::distance(from, to));</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; </div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; std::transform(first, last, component.begin(), [<span class="keyword">this</span>](<span class="keyword">const</span> <span class="keyword">auto</span> ctype) {</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; const auto it = std::find_if(pools.cbegin(), pools.cend(), [ctype](auto &amp;&amp;pdata) { return pdata.poly &amp;&amp; pdata.poly-&gt;value_type().hash() == ctype; });</div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keywordflow">return</span> it == pools.cend() ? nullptr : it-&gt;pool.get();</div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; });</div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; </div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; std::transform(from, to, filter.begin(), [<span class="keyword">this</span>](<span class="keyword">const</span> <span class="keyword">auto</span> ctype) {</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; const auto it = std::find_if(pools.cbegin(), pools.cend(), [ctype](auto &amp;&amp;pdata) { return pdata.poly &amp;&amp; pdata.poly-&gt;value_type().hash() == ctype; });</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">return</span> it == pools.cend() ? nullptr : it-&gt;pool.get();</div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; });</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">return</span> { std::move(component), std::move(filter) };</div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; }</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; </div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Owned, <span class="keyword">typename</span>... Get, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01277"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a716510eb0a63f8512ddc932381fa105f"> 1277</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__group.html">basic_group</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t</a>&lt;Get...&gt;, Owned...&gt; <a class="code" href="classentt_1_1basic__registry.html#a716510eb0a63f8512ddc932381fa105f">group</a>(<a class="code" href="structentt_1_1get__t.html">get_t&lt;Get...&gt;</a>, <a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) {</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Owned) + <span class="keyword">sizeof</span>...(Get) &gt; 0, <span class="stringliteral">&quot;Exclusion-only groups are not supported&quot;</span>);</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; static_assert(<span class="keyword">sizeof</span>...(Owned) + <span class="keyword">sizeof</span>...(Get) + <span class="keyword">sizeof</span>...(Exclude) &gt; 1, <span class="stringliteral">&quot;Single component groups are not allowed&quot;</span>);</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; </div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keyword">using</span> handler_type = group_handler&lt;<a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t&lt;std::remove_const_t&lt;Get&gt;</a>...&gt;, std::remove_const_t&lt;Owned&gt;...&gt;;</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cpools = std::make_tuple(assure&lt;std::remove_const_t&lt;Owned&gt;&gt;()..., assure&lt;std::remove_const_t&lt;Get&gt;&gt;()...);</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; constexpr <span class="keyword">auto</span> size = <span class="keyword">sizeof</span>...(Owned) + <span class="keyword">sizeof</span>...(Get) + <span class="keyword">sizeof</span>...(Exclude);</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; handler_type *handler = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; </div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">auto</span> it = std::find_if(groups.cbegin(), groups.cend(), [size](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">return</span> gdata.size == size</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; &amp;&amp; (gdata.owned(<a class="code" href="structentt_1_1type__hash.html">type_hash</a>&lt;std::remove_const_t&lt;Owned&gt;&gt;::value()) &amp;&amp; ...)</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; &amp;&amp; (gdata.get(<a class="code" href="structentt_1_1type__hash.html">type_hash</a>&lt;std::remove_const_t&lt;Get&gt;&gt;::value()) &amp;&amp; ...)</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; &amp;&amp; (gdata.exclude(<a class="code" href="structentt_1_1type__hash.html">type_hash&lt;Exclude&gt;::value</a>()) &amp;&amp; ...);</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }); it != groups.cend())</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; {</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; handler = <span class="keyword">static_cast&lt;</span>handler_type *<span class="keyword">&gt;</span>(it-&gt;group.get());</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; </div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">if</span>(!handler) {</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; group_data candidate = {</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; size,</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; { <span class="keyword">new</span> handler_type{}, [](<span class="keywordtype">void</span> *instance) { <span class="keyword">delete</span> <span class="keyword">static_cast&lt;</span>handler_type *<span class="keyword">&gt;</span>(instance); } },</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; []([[maybe_unused]] <span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a> ctype) ENTT_NOEXCEPT { <span class="keywordflow">return</span> ((ctype == type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value()) || ...); },</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; []([[maybe_unused]] <span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a> ctype) ENTT_NOEXCEPT { <span class="keywordflow">return</span> ((ctype == type_hash&lt;std::remove_const_t&lt;Get&gt;&gt;::value()) || ...); },</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; []([[maybe_unused]] <span class="keyword">const</span> <a class="code" href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">id_type</a> ctype) ENTT_NOEXCEPT { <span class="keywordflow">return</span> ((ctype == type_hash&lt;Exclude&gt;::value()) || ...); },</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; };</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; </div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; handler = <span class="keyword">static_cast&lt;</span>handler_type *<span class="keyword">&gt;</span>(candidate.group.get());</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; </div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keyword">const</span> <span class="keywordtype">void</span> *maybe_valid_if = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">const</span> <span class="keywordtype">void</span> *discard_if = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; </div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Owned) == 0) {</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; groups.push_back(std::move(candidate));</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; ENTT_ASSERT(std::all_of(groups.cbegin(), groups.cend(), [size](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; const auto overlapping = (0u + ... + gdata.owned(type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value()));</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; const auto sz = overlapping + (0u + ... + gdata.get(type_hash&lt;std::remove_const_t&lt;Get&gt;&gt;::value())) + (0u + ... + gdata.exclude(type_hash&lt;Exclude&gt;::value()));</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; return !overlapping || ((sz == size) || (sz == gdata.size));</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; }), <span class="stringliteral">&quot;Conflicting groups&quot;</span>);</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; </div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> next = std::find_if_not(groups.cbegin(), groups.cend(), [size](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; return !(0u + ... + gdata.owned(type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value())) || (size &gt; gdata.size);</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; });</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; </div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> prev = std::find_if(std::make_reverse_iterator(next), groups.crend(), [](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; return (0u + ... + gdata.owned(type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value()));</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; });</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; </div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; maybe_valid_if = (next == groups.cend() ? maybe_valid_if : next-&gt;group.get());</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; discard_if = (prev == groups.crend() ? discard_if : prev-&gt;group.get());</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; groups.insert(next, std::move(candidate));</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; }</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; </div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; (on_construct&lt;std::remove_const_t&lt;Owned&gt;&gt;().before(maybe_valid_if).template connect&lt;&amp;handler_type::template maybe_valid_if&lt;std::remove_const_t&lt;Owned&gt;&gt;&gt;(*handler), ...);</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; (on_construct&lt;std::remove_const_t&lt;Get&gt;&gt;().before(maybe_valid_if).template connect&lt;&amp;handler_type::template maybe_valid_if&lt;std::remove_const_t&lt;Get&gt;&gt;&gt;(*handler), ...);</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; (on_destroy&lt;Exclude&gt;().before(maybe_valid_if).template connect&lt;&amp;handler_type::template maybe_valid_if&lt;Exclude&gt;&gt;(*handler), ...);</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; </div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; (on_destroy&lt;std::remove_const_t&lt;Owned&gt;&gt;().before(discard_if).template connect&lt;&amp;handler_type::discard_if&gt;(*handler), ...);</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; (on_destroy&lt;std::remove_const_t&lt;Get&gt;&gt;().before(discard_if).template connect&lt;&amp;handler_type::discard_if&gt;(*handler), ...);</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; (on_construct&lt;Exclude&gt;().before(discard_if).template connect&lt;&amp;handler_type::discard_if&gt;(*handler), ...);</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; </div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">if</span> constexpr(<span class="keyword">sizeof</span>...(Owned) == 0) {</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> entity: view&lt;Owned..., Get...&gt;(exclude&lt;Exclude...&gt;)) {</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; handler-&gt;current.emplace(entity);</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; }</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="comment">// we cannot iterate backwards because we want to leave behind valid entities in case of owned types</span></div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> *first = std::get&lt;0&gt;(cpools)-&gt;data(), *last = first + std::get&lt;0&gt;(cpools)-&gt;size(); first != last; ++first) {</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; handler-&gt;template maybe_valid_if&lt;type_list_element_t&lt;0, type_list&lt;std::remove_const_t&lt;Owned&gt;...&gt;&gt;&gt;(*<span class="keyword">this</span>, *first);</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; }</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; }</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; }</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; </div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">return</span> { handler-&gt;current, *std::get&lt;storage_type&lt;std::remove_const_t&lt;Owned&gt;&gt; *&gt;(cpools)..., *std::get&lt;storage_type&lt;std::remove_const_t&lt;Get&gt;&gt; *&gt;(cpools)... };</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; }</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; </div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Owned, <span class="keyword">typename</span>... Get, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01367"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ae887b20d1ff92772676de90a1befd87a"> 1367</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__group.html">basic_group</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t&lt;std::add_const_t&lt;Get&gt;</a>...&gt;, std::add_const_t&lt;Owned&gt;...&gt; <a class="code" href="classentt_1_1basic__registry.html#ae887b20d1ff92772676de90a1befd87a">group_if_exists</a>(<a class="code" href="structentt_1_1get__t.html">get_t&lt;Get...&gt;</a>, <a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) <span class="keyword">const</span> {</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">auto</span> it = std::find_if(groups.cbegin(), groups.cend(), [](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; return gdata.size == (sizeof...(Owned) + sizeof...(Get) + sizeof...(Exclude))</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; &amp;&amp; (gdata.owned(type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value()) &amp;&amp; ...)</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; &amp;&amp; (gdata.get(type_hash&lt;std::remove_const_t&lt;Get&gt;&gt;::value()) &amp;&amp; ...)</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; &amp;&amp; (gdata.exclude(type_hash&lt;Exclude&gt;::value()) &amp;&amp; ...);</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; }); it == groups.cend())</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; {</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="keyword">using</span> handler_type = group_handler&lt;exclude_t&lt;Exclude...&gt;, get_t&lt;std::remove_const_t&lt;Get&gt;...&gt;, std::remove_const_t&lt;Owned&gt;...&gt;;</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordflow">return</span> { <span class="keyword">static_cast&lt;</span>handler_type *<span class="keyword">&gt;</span>(it-&gt;group.get())-&gt;current, *pool_if_exists&lt;std::remove_const_t&lt;Owned&gt;&gt;()... , *pool_if_exists&lt;std::remove_const_t&lt;Get&gt;&gt;()... };</div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; }</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; }</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; </div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Owned, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01392"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aa05eacbf8368ae162fa4b7828fa26976"> 1392</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__group.html">basic_group</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t&lt;&gt;</a>, Owned...&gt; <a class="code" href="classentt_1_1basic__registry.html#aa05eacbf8368ae162fa4b7828fa26976">group</a>(<a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) {</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classentt_1_1basic__group.html">group</a>&lt;Owned...&gt;(<a class="code" href="structentt_1_1get__t.html">get_t&lt;&gt;</a>{}, exclude&lt;Exclude...&gt;);</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; }</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; </div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Owned, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01406"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a9f5750e9405dab3add44e6dea6549f73"> 1406</a></span>&#160; [[nodiscard]] <a class="code" href="classentt_1_1basic__group.html">basic_group</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;Exclude...&gt;, <a class="code" href="structentt_1_1get__t.html">get_t&lt;&gt;</a>, std::add_const_t&lt;Owned&gt;...&gt; <a class="code" href="classentt_1_1basic__registry.html#a9f5750e9405dab3add44e6dea6549f73">group_if_exists</a>(<a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a> = {}) <span class="keyword">const</span> {</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">return</span> group_if_exists&lt;std::add_const_t&lt;Owned&gt;...&gt;(<a class="code" href="structentt_1_1get__t.html">get_t&lt;&gt;</a>{}, exclude&lt;Exclude...&gt;);</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; }</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; </div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Component&gt;</div>
<div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a5f7af56d6b9fca94a6ebd6ab13896b27"> 1417</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#a5f7af56d6b9fca94a6ebd6ab13896b27">sortable</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keywordflow">return</span> std::none_of(groups.cbegin(), groups.cend(), [](<span class="keyword">auto</span> &amp;&amp;gdata) { return (gdata.owned(type_hash&lt;std::remove_const_t&lt;Component&gt;&gt;::value()) || ...); });</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; }</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; </div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Owned, <span class="keyword">typename</span>... Get, <span class="keyword">typename</span>... Exclude&gt;</div>
<div class="line"><a name="l01429"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ae30d3262defa6fd847dc059d3d0ed026"> 1429</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classentt_1_1basic__registry.html#ae30d3262defa6fd847dc059d3d0ed026">sortable</a>(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__group.html">basic_group</a>&lt;Entity, <a class="code" href="structentt_1_1exclude__t.html">exclude_t&lt;Exclude...&gt;</a>, <a class="code" href="structentt_1_1get__t.html">get_t&lt;Get...&gt;</a>, Owned...&gt; &amp;) ENTT_NOEXCEPT {</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; constexpr <span class="keyword">auto</span> size = <span class="keyword">sizeof</span>...(Owned) + <span class="keyword">sizeof</span>...(Get) + <span class="keyword">sizeof</span>...(Exclude);</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">return</span> std::find_if(groups.cbegin(), groups.cend(), [size](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;gdata) {</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; return (0u + ... + gdata.owned(type_hash&lt;std::remove_const_t&lt;Owned&gt;&gt;::value())) &amp;&amp; (size &lt; gdata.size);</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; }) == groups.cend();</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; }</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; </div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Component, <span class="keyword">typename</span> Compare, <span class="keyword">typename</span> Sort = <a class="code" href="structentt_1_1std__sort.html">std_sort</a>, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l01482"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae"> 1482</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae">sort</a>(Compare compare, Sort algo = Sort{}, Args &amp;&amp;... args) {</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; ENTT_ASSERT(sortable&lt;Component&gt;(), <span class="stringliteral">&quot;Cannot sort owned storage&quot;</span>);</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; assure&lt;Component&gt;()-&gt;sort(std::move(compare), std::move(algo), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; }</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; </div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> To, <span class="keyword">typename</span> From&gt;</div>
<div class="line"><a name="l01521"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d"> 1521</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d">sort</a>() {</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; ENTT_ASSERT(sortable&lt;To&gt;(), <span class="stringliteral">&quot;Cannot sort owned storage&quot;</span>);</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; assure&lt;To&gt;()-&gt;respect(*assure&lt;From&gt;());</div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; }</div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; </div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Func&gt;</div>
<div class="line"><a name="l01548"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aef8bac41fdb48e3c8c589dee21b96980"> 1548</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#aef8bac41fdb48e3c8c589dee21b96980">visit</a>(<a class="code" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> <a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>, Func func)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = pools.size(); pos; --pos) {</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pdata = pools[pos-1]; pdata.pool &amp;&amp; pdata.pool-&gt;contains(<a class="code" href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entity</a>)) {</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; func(pdata.poly-&gt;value_type());</div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; }</div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; }</div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; }</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; </div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Func&gt;</div>
<div class="line"><a name="l01577"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aedc179d58adaab31202fc000a0bee068"> 1577</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#aedc179d58adaab31202fc000a0bee068">visit</a>(Func func)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = pools.size(); pos; --pos) {</div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp;pdata = pools[pos-1]; pdata.pool) {</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; func(pdata.poly-&gt;value_type());</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; }</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; }</div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; }</div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; </div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l01597"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1"> 1597</a></span>&#160; Type &amp; <a class="code" href="classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1">set</a>(Args &amp;&amp;... args) {</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; unset&lt;Type&gt;();</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; vars.emplace_back(std::in_place_type&lt;Type&gt;, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <span class="keywordflow">return</span> any_cast&lt;Type &amp;&gt;(vars.back());</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; }</div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; </div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type&gt;</div>
<div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd"> 1608</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd">unset</a>() {</div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; vars.erase(std::remove_if(vars.begin(), vars.end(), [type = type_id&lt;Type&gt;()](<span class="keyword">auto</span> &amp;&amp;var) { return var.type() == type; }), vars.end());</div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; }</div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; </div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l01624"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e"> 1624</a></span>&#160; [[nodiscard]] Type &amp; <a class="code" href="classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e">ctx_or_set</a>(Args &amp;&amp;... args) {</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keyword">auto</span> *value = try_ctx&lt;Type&gt;();</div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keywordflow">return</span> value ? *value : set&lt;Type&gt;(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; }</div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; </div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type&gt;</div>
<div class="line"><a name="l01636"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a8554b6cb789387d30ab3a42c26b06c72"> 1636</a></span>&#160; [[nodiscard]] std::add_const_t&lt;Type&gt; * <a class="code" href="classentt_1_1basic__registry.html#a8554b6cb789387d30ab3a42c26b06c72">try_ctx</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keyword">auto</span> it = std::find_if(vars.cbegin(), vars.cend(), [type = type_id&lt;Type&gt;()](<span class="keyword">auto</span> &amp;&amp;var) { return var.type() == type; });</div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">return</span> it == vars.cend() ? nullptr : any_cast&lt;std::add_const_t&lt;Type&gt;&gt;(&amp;*it);</div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; }</div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; </div>
<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type&gt;</div>
<div class="line"><a name="l01643"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#ab25a060f43bbb5ce9aec1f7f5a698220"> 1643</a></span>&#160; [[nodiscard]] Type * <a class="code" href="classentt_1_1basic__registry.html#ab25a060f43bbb5ce9aec1f7f5a698220">try_ctx</a>() {</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keyword">auto</span> it = std::find_if(vars.begin(), vars.end(), [type = type_id&lt;Type&gt;()](<span class="keyword">auto</span> &amp;&amp;var) { return var.type() == type; });</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <span class="keywordflow">return</span> it == vars.end() ? nullptr : any_cast&lt;Type&gt;(&amp;*it);</div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; }</div>
<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; </div>
<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type&gt;</div>
<div class="line"><a name="l01659"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#aa7b72e3bdb0b072439afb85fe8af6ced"> 1659</a></span>&#160; [[nodiscard]] std::add_const_t&lt;Type&gt; &amp; <a class="code" href="classentt_1_1basic__registry.html#aa7b72e3bdb0b072439afb85fe8af6ced">ctx</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keyword">auto</span> it = std::find_if(vars.cbegin(), vars.cend(), [type = type_id&lt;Type&gt;()](<span class="keyword">auto</span> &amp;&amp;var) { return var.type() == type; });</div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; ENTT_ASSERT(it != vars.cend(), <span class="stringliteral">&quot;Invalid instance&quot;</span>);</div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="keywordflow">return</span> any_cast&lt;std::add_const_t&lt;Type&gt; &amp;&gt;(*it);</div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; }</div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; </div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Type&gt;</div>
<div class="line"><a name="l01667"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#a03031127c53abc80f8dcb835290fa765"> 1667</a></span>&#160; [[nodiscard]] Type &amp; <a class="code" href="classentt_1_1basic__registry.html#a03031127c53abc80f8dcb835290fa765">ctx</a>() {</div>
<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <span class="keyword">auto</span> it = std::find_if(vars.begin(), vars.end(), [type = type_id&lt;Type&gt;()](<span class="keyword">auto</span> &amp;&amp;var) { return var.type() == type; });</div>
<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; ENTT_ASSERT(it != vars.end(), <span class="stringliteral">&quot;Invalid instance&quot;</span>);</div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">return</span> any_cast&lt;Type &amp;&gt;(*it);</div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; }</div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; </div>
<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Func&gt;</div>
<div class="line"><a name="l01695"></a><span class="lineno"><a class="line" href="classentt_1_1basic__registry.html#adebb39eff1162ede07bffded9528e710"> 1695</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classentt_1_1basic__registry.html#adebb39eff1162ede07bffded9528e710">ctx</a>(Func func)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> pos = vars.size(); pos; --pos) {</div>
<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; func(vars[pos-1].type());</div>
<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; }</div>
<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; }</div>
<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; </div>
<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; std::vector&lt;basic_any&lt;0u&gt;&gt; vars{};</div>
<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; <span class="keyword">mutable</span> std::vector&lt;pool_data&gt; pools{};</div>
<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; std::vector&lt;group_data&gt; groups{};</div>
<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; std::vector&lt;entity_type&gt; entities{};</div>
<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; entity_type free_list{<a class="code" href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">tombstone</a>};</div>
<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;};</div>
<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; </div>
<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; </div>
<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;}</div>
<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; </div>
<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; </div>
<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassentt_1_1basic__group_html"><div class="ttname"><a href="classentt_1_1basic__group.html">entt::basic_group</a></div><div class="ttdoc">Group.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2fwd_8hpp_source.html#l00033">fwd.hpp:33</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__poly_html"><div class="ttname"><a href="classentt_1_1basic__poly.html">entt::basic_poly</a></div><div class="ttdoc">Static polymorphism made simple and within everyone's reach.</div><div class="ttdef"><b>Definition:</b> <a href="poly_8hpp_source.html#l00181">poly.hpp:181</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html"><div class="ttname"><a href="classentt_1_1basic__registry.html">entt::basic_registry</a></div><div class="ttdoc">Fast and reliable entity-component system.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00045">registry.hpp:45</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a03031127c53abc80f8dcb835290fa765"><div class="ttname"><a href="classentt_1_1basic__registry.html#a03031127c53abc80f8dcb835290fa765">entt::basic_registry::ctx</a></div><div class="ttdeci">Type &amp; ctx()</div><div class="ttdoc">Returns a reference to an object in the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01667">registry.hpp:1667</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a05fd96006ea9f68b679507cdc67260ce"><div class="ttname"><a href="classentt_1_1basic__registry.html#a05fd96006ea9f68b679507cdc67260ce">entt::basic_registry::capacity</a></div><div class="ttdeci">size_type capacity() const</div><div class="ttdoc">Returns the number of entities that a registry has currently allocated space for.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00294">registry.hpp:294</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a08f819276fd2d8b2b2b6d01357f61a42"><div class="ttname"><a href="classentt_1_1basic__registry.html#a08f819276fd2d8b2b2b6d01357f61a42">entt::basic_registry::any_of</a></div><div class="ttdeci">bool any_of(const entity_type entity) const</div><div class="ttdoc">Checks if an entity has at least one of the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00894">registry.hpp:894</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a0998b4125d8d2c92817dccac31e7f652"><div class="ttname"><a href="classentt_1_1basic__registry.html#a0998b4125d8d2c92817dccac31e7f652">entt::basic_registry::basic_registry</a></div><div class="ttdeci">basic_registry()=default</div><div class="ttdoc">Default constructor.</div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a10f5e61d4cabab9e9c1e87edc30de551"><div class="ttname"><a href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551">entt::basic_registry::orphan</a></div><div class="ttdeci">bool orphan(const entity_type entity) const</div><div class="ttdoc">Checks if an entity has components assigned.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01055">registry.hpp:1055</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a16f2019558eb620c5054dc8f2e312b9e"><div class="ttname"><a href="classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e">entt::basic_registry::ctx_or_set</a></div><div class="ttdeci">Type &amp; ctx_or_set(Args &amp;&amp;... args)</div><div class="ttdoc">Binds an object to the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01624">registry.hpp:1624</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a1795b1221d728f806319a685930f520d"><div class="ttname"><a href="classentt_1_1basic__registry.html#a1795b1221d728f806319a685930f520d">entt::basic_registry::valid</a></div><div class="ttdeci">bool valid(const entity_type entity) const</div><div class="ttdoc">Checks if an entity identifier refers to a valid entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00367">registry.hpp:367</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a199babc787d6baa6f7ccce761228a5f6"><div class="ttname"><a href="classentt_1_1basic__registry.html#a199babc787d6baa6f7ccce761228a5f6">entt::basic_registry::current</a></div><div class="ttdeci">version_type current(const entity_type entity) const</div><div class="ttdoc">Returns the actual version for an entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00383">registry.hpp:383</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a1a37b2a842fd3877bc25e3217a01ee11"><div class="ttname"><a href="classentt_1_1basic__registry.html#a1a37b2a842fd3877bc25e3217a01ee11">entt::basic_registry::insert</a></div><div class="ttdeci">void insert(EIt first, EIt last, CIt from)</div><div class="ttdoc">Assigns each entity in a range the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00650">registry.hpp:650</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a27f61f6b3347811854b7d1c2bd97db99"><div class="ttname"><a href="classentt_1_1basic__registry.html#a27f61f6b3347811854b7d1c2bd97db99">entt::basic_registry::compact</a></div><div class="ttdeci">void compact()</div><div class="ttdoc">Removes all tombstones from a registry or only the pools for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00826">registry.hpp:826</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a2907f89b80fb692b16727e5e67a91c5d"><div class="ttname"><a href="classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d">entt::basic_registry::sort</a></div><div class="ttdeci">void sort()</div><div class="ttdoc">Sorts two pools of components in the same way.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01521">registry.hpp:1521</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a334768416fdf6372ecfdef9ec4f03e83"><div class="ttname"><a href="classentt_1_1basic__registry.html#a334768416fdf6372ecfdef9ec4f03e83">entt::basic_registry::create</a></div><div class="ttdeci">void create(It first, It last)</div><div class="ttdoc">Assigns each element in a range an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00447">registry.hpp:447</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3587004bdab85280c2a2a1b6371fd4c5"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3587004bdab85280c2a2a1b6371fd4c5">entt::basic_registry::insert</a></div><div class="ttdeci">void insert(It first, It last, const Component &amp;value={})</div><div class="ttdoc">Assigns each entity in a range the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00632">registry.hpp:632</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a35d217b9bc09235d55388941de380f72"><div class="ttname"><a href="classentt_1_1basic__registry.html#a35d217b9bc09235d55388941de380f72">entt::basic_registry::assign</a></div><div class="ttdeci">void assign(It first, It last, const entity_type destroyed)</div><div class="ttdoc">Assigns entities to an empty registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00478">registry.hpp:478</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3665d26a32ce8fa770fd0e2094cd6a0f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3665d26a32ce8fa770fd0e2094cd6a0f">entt::basic_registry::erase</a></div><div class="ttdeci">void erase(It first, It last)</div><div class="ttdoc">Erases the given components from all the entities in a range.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00809">registry.hpp:809</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a38ac2a883e3d881c6ae5a05a0252b7ae"><div class="ttname"><a href="classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae">entt::basic_registry::sort</a></div><div class="ttdeci">void sort(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</div><div class="ttdoc">Sorts the pool of entities for the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01482">registry.hpp:1482</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a38bbefe07c81d2c5ed69ff8e4da45c48"><div class="ttname"><a href="classentt_1_1basic__registry.html#a38bbefe07c81d2c5ed69ff8e4da45c48">entt::basic_registry::reserve_pools</a></div><div class="ttdeci">void reserve_pools(const size_t count)</div><div class="ttdoc">Reserves enough space to store count pools.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00274">registry.hpp:274</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3a683bb33971cc5a0bbbf4a9409208df"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df">entt::basic_registry::get</a></div><div class="ttdeci">decltype(auto) get([[maybe_unused]] const entity_type entity) const</div><div class="ttdoc">Returns references to the given components for an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00911">registry.hpp:911</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3d9cb2368384b0952cb54848e777359e"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3d9cb2368384b0952cb54848e777359e">entt::basic_registry::release</a></div><div class="ttdeci">version_type release(const entity_type entity)</div><div class="ttdoc">Releases an entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00495">registry.hpp:495</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3e4a944c90598b7223f78cb7057d1a58"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3e4a944c90598b7223f78cb7057d1a58">entt::basic_registry::entity</a></div><div class="ttdeci">static entity_type entity(const entity_type entity)</div><div class="ttdoc">Returns the entity identifier without the version.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00165">registry.hpp:165</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a3fc181b150fee3e42b8cad4103953b9f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a3fc181b150fee3e42b8cad4103953b9f">entt::basic_registry::basic_registry</a></div><div class="ttdeci">basic_registry(basic_registry &amp;&amp;)=default</div><div class="ttdoc">Default move constructor.</div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a40072eca607846f43f47d0e3f11dd196"><div class="ttname"><a href="classentt_1_1basic__registry.html#a40072eca607846f43f47d0e3f11dd196">entt::basic_registry::all_of</a></div><div class="ttdeci">bool all_of(const entity_type entity) const</div><div class="ttdoc">Checks if an entity has all the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00877">registry.hpp:877</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a40c4a407d4a7a74fec41d44e915c4d89"><div class="ttname"><a href="classentt_1_1basic__registry.html#a40c4a407d4a7a74fec41d44e915c4d89">entt::basic_registry::capacity</a></div><div class="ttdeci">size_type capacity() const</div><div class="ttdoc">Returns the capacity of the pool for the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00284">registry.hpp:284</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a46d948137afacbb1e4e79b72c917c5ea"><div class="ttname"><a href="classentt_1_1basic__registry.html#a46d948137afacbb1e4e79b72c917c5ea">entt::basic_registry::remove_all</a></div><div class="ttdeci">void remove_all(const entity_type entity)</div><div class="ttdoc">Removes all the components from an entity and makes it orphaned.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00858">registry.hpp:858</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a48630f103bc6448af1f2b2928df4f488"><div class="ttname"><a href="classentt_1_1basic__registry.html#a48630f103bc6448af1f2b2928df4f488">entt::basic_registry::released</a></div><div class="ttdeci">entity_type released() const</div><div class="ttdoc">Returns the head of the list of released entities.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00352">registry.hpp:352</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a49034a5ead1dda9c7c436413b172f33f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a49034a5ead1dda9c7c436413b172f33f">entt::basic_registry::view</a></div><div class="ttdeci">basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt; view(exclude_t&lt; Exclude... &gt;={})</div><div class="ttdoc">Returns a view for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01198">registry.hpp:1198</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a4c6d73b07371b6d5b53e0d0c6197e25f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a4c6d73b07371b6d5b53e0d0c6197e25f">entt::basic_registry::destroyed</a></div><div class="ttdeci">entity_type destroyed() const</div><div class="ttdoc">Returns the head of the list of released entities.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00358">registry.hpp:358</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a5b056608b1723b73a001e20d2f2592bc"><div class="ttname"><a href="classentt_1_1basic__registry.html#a5b056608b1723b73a001e20d2f2592bc">entt::basic_registry::size</a></div><div class="ttdeci">size_type size() const</div><div class="ttdoc">Returns the number of entities created so far.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00229">registry.hpp:229</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a5c768fb13e23109823e1dc217eee100a"><div class="ttname"><a href="classentt_1_1basic__registry.html#a5c768fb13e23109823e1dc217eee100a">entt::basic_registry::emplace_or_replace</a></div><div class="ttdeci">decltype(auto) emplace_or_replace(const entity_type entity, Args &amp;&amp;... args)</div><div class="ttdoc">Assigns or replaces the given component for an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00677">registry.hpp:677</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a5f7af56d6b9fca94a6ebd6ab13896b27"><div class="ttname"><a href="classentt_1_1basic__registry.html#a5f7af56d6b9fca94a6ebd6ab13896b27">entt::basic_registry::sortable</a></div><div class="ttdeci">bool sortable() const</div><div class="ttdoc">Checks whether the given components belong to any group.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01417">registry.hpp:1417</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a632adf32f7b23f1dae8bf4f8800a0bbe"><div class="ttname"><a href="classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe">entt::basic_registry::reserve</a></div><div class="ttdeci">void reserve(const size_type cap)</div><div class="ttdoc">Increases the capacity of the registry or of the pools for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00261">registry.hpp:261</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a63aa387e557553d61483a58807cd785e"><div class="ttname"><a href="classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e">entt::basic_registry::shrink_to_fit</a></div><div class="ttdeci">void shrink_to_fit()</div><div class="ttdoc">Requests the removal of unused capacity for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00304">registry.hpp:304</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a69fa71876716487256ac47e19f27c553"><div class="ttname"><a href="classentt_1_1basic__registry.html#a69fa71876716487256ac47e19f27c553">entt::basic_registry::release</a></div><div class="ttdeci">void release(It first, It last)</div><div class="ttdoc">Releases all entity identifiers in a range.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00526">registry.hpp:526</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a6a44260f861a699f1353097391c51636"><div class="ttname"><a href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">entt::basic_registry::size_type</a></div><div class="ttdeci">std::size_t size_type</div><div class="ttdoc">Unsigned integer type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00156">registry.hpp:156</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a6c163dcc335da90e727e2f40e67973b7"><div class="ttname"><a href="classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7">entt::basic_registry::destroy</a></div><div class="ttdeci">void destroy(It first, It last)</div><div class="ttdoc">Destroys all entities in a range and releases their identifiers.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00583">registry.hpp:583</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a6d5e54549668622c5e1e02ba58a45212"><div class="ttname"><a href="classentt_1_1basic__registry.html#a6d5e54549668622c5e1e02ba58a45212">entt::basic_registry::storage</a></div><div class="ttdeci">poly_storage &amp; storage(const type_info info)</div><div class="ttdoc">Returns a poly storage for a given type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00203">registry.hpp:203</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a70f7acd3a0e9a8dc4ef7e85172f93a59"><div class="ttname"><a href="classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59">entt::basic_registry::operator=</a></div><div class="ttdeci">basic_registry &amp; operator=(basic_registry &amp;&amp;)=default</div><div class="ttdoc">Default move assignment operator.</div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a716510eb0a63f8512ddc932381fa105f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a716510eb0a63f8512ddc932381fa105f">entt::basic_registry::group</a></div><div class="ttdeci">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt; group(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={})</div><div class="ttdoc">Returns a group for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01277">registry.hpp:1277</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a747d182de87516a3445f8df77d65e815"><div class="ttname"><a href="classentt_1_1basic__registry.html#a747d182de87516a3445f8df77d65e815">entt::basic_registry::size</a></div><div class="ttdeci">size_type size() const</div><div class="ttdoc">Returns the number of existing components of the given type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00220">registry.hpp:220</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a7a42cddcb9bd14802bd597e789ff341f"><div class="ttname"><a href="classentt_1_1basic__registry.html#a7a42cddcb9bd14802bd597e789ff341f">entt::basic_registry::alive</a></div><div class="ttdeci">size_type alive() const</div><div class="ttdoc">Returns the number of entities still in use.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00237">registry.hpp:237</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a7b2c0368d508a6af2d094a9fc592a4a0"><div class="ttname"><a href="classentt_1_1basic__registry.html#a7b2c0368d508a6af2d094a9fc592a4a0">entt::basic_registry::destroy</a></div><div class="ttdeci">version_type destroy(const entity_type entity)</div><div class="ttdoc">Destroys an entity and releases its identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00547">registry.hpp:547</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a7d771eee6e8e573bf1b8e4e8501ea7f1"><div class="ttname"><a href="classentt_1_1basic__registry.html#a7d771eee6e8e573bf1b8e4e8501ea7f1">entt::basic_registry::set</a></div><div class="ttdeci">Type &amp; set(Args &amp;&amp;... args)</div><div class="ttdoc">Binds an object to the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01597">registry.hpp:1597</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a7df39ef4ca62af9540f593dfb5550138"><div class="ttname"><a href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entt::basic_registry::entity_type</a></div><div class="ttdeci">Entity entity_type</div><div class="ttdoc">Underlying entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00152">registry.hpp:152</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a828206f7d5bbde61c6e63f742ab1cf6d"><div class="ttname"><a href="classentt_1_1basic__registry.html#a828206f7d5bbde61c6e63f742ab1cf6d">entt::basic_registry::remove</a></div><div class="ttdeci">size_type remove(const entity_type entity)</div><div class="ttdoc">Removes the given components from an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00749">registry.hpp:749</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a8554b6cb789387d30ab3a42c26b06c72"><div class="ttname"><a href="classentt_1_1basic__registry.html#a8554b6cb789387d30ab3a42c26b06c72">entt::basic_registry::try_ctx</a></div><div class="ttdeci">std::add_const_t&lt; Type &gt; * try_ctx() const</div><div class="ttdoc">Returns a pointer to an object in the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01636">registry.hpp:1636</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a86d2b035f54225d82548e8f03de28754"><div class="ttname"><a href="classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754">entt::basic_registry::each</a></div><div class="ttdeci">void each(Func func) const</div><div class="ttdoc">Iterates all the entities that are still in use.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01036">registry.hpp:1036</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a919cb6946314d79a42ecb13c31f0ac93"><div class="ttname"><a href="classentt_1_1basic__registry.html#a919cb6946314d79a42ecb13c31f0ac93">entt::basic_registry::view</a></div><div class="ttdeci">basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, std::add_const_t&lt; Component &gt;... &gt; view(exclude_t&lt; Exclude... &gt;={}) const</div><div class="ttdoc">Returns a view for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01191">registry.hpp:1191</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a91bfd7ec05e6d718e47da581a893cdc4"><div class="ttname"><a href="classentt_1_1basic__registry.html#a91bfd7ec05e6d718e47da581a893cdc4">entt::basic_registry::create</a></div><div class="ttdeci">entity_type create()</div><div class="ttdoc">Creates a new entity and returns it.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00399">registry.hpp:399</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a9a01c958149b6c0d5b233a1a7c3c3bb3"><div class="ttname"><a href="classentt_1_1basic__registry.html#a9a01c958149b6c0d5b233a1a7c3c3bb3">entt::basic_registry::try_get</a></div><div class="ttdeci">auto try_get([[maybe_unused]] const entity_type entity) const</div><div class="ttdoc">Returns pointers to the given components for an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00978">registry.hpp:978</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_a9f5750e9405dab3add44e6dea6549f73"><div class="ttname"><a href="classentt_1_1basic__registry.html#a9f5750e9405dab3add44e6dea6549f73">entt::basic_registry::group_if_exists</a></div><div class="ttdeci">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt;&gt;, std::add_const_t&lt; Owned &gt;... &gt; group_if_exists(exclude_t&lt; Exclude... &gt;={}) const</div><div class="ttdoc">Returns a group for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01406">registry.hpp:1406</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aa05eacbf8368ae162fa4b7828fa26976"><div class="ttname"><a href="classentt_1_1basic__registry.html#aa05eacbf8368ae162fa4b7828fa26976">entt::basic_registry::group</a></div><div class="ttdeci">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt;&gt;, Owned... &gt; group(exclude_t&lt; Exclude... &gt;={})</div><div class="ttdoc">Returns a group for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01392">registry.hpp:1392</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aa4b08ad282560ead88ceeeddba16f552"><div class="ttname"><a href="classentt_1_1basic__registry.html#aa4b08ad282560ead88ceeeddba16f552">entt::basic_registry::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears a whole registry or the pools for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01006">registry.hpp:1006</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aa4fd18bd8b1733c82b1ff3fa892a1a66"><div class="ttname"><a href="classentt_1_1basic__registry.html#aa4fd18bd8b1733c82b1ff3fa892a1a66">entt::basic_registry::storage</a></div><div class="ttdeci">const poly_storage &amp; storage(const type_info info) const</div><div class="ttdoc">Returns a poly storage for a given type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00209">registry.hpp:209</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aa7b72e3bdb0b072439afb85fe8af6ced"><div class="ttname"><a href="classentt_1_1basic__registry.html#aa7b72e3bdb0b072439afb85fe8af6ced">entt::basic_registry::ctx</a></div><div class="ttdeci">std::add_const_t&lt; Type &gt; &amp; ctx() const</div><div class="ttdoc">Returns a reference to an object in the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01659">registry.hpp:1659</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aaa23b74e76b1749bb510a86e9d31b9cd"><div class="ttname"><a href="classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd">entt::basic_registry::unset</a></div><div class="ttdeci">void unset()</div><div class="ttdoc">Unsets a context variable if it exists.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01608">registry.hpp:1608</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aaaf474d42df7b8852c4656152cc4a295"><div class="ttname"><a href="classentt_1_1basic__registry.html#aaaf474d42df7b8852c4656152cc4a295">entt::basic_registry::on_update</a></div><div class="ttdeci">auto on_update()</div><div class="ttdoc">Returns a sink object for the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01129">registry.hpp:1129</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aad36d8c035f2315d7013277e973dcffb"><div class="ttname"><a href="classentt_1_1basic__registry.html#aad36d8c035f2315d7013277e973dcffb">entt::basic_registry::poly_storage</a></div><div class="ttdeci">typename poly_storage_traits&lt; Entity &gt;::storage_type poly_storage</div><div class="ttdoc">Poly storage type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00158">registry.hpp:158</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aad398e6279c6bbee2068b94c74bf83d6"><div class="ttname"><a href="classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6">entt::basic_registry::prepare</a></div><div class="ttdeci">void prepare()</div><div class="ttdoc">Prepares a pool for the given type if required.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00192">registry.hpp:192</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aae2197c81e29459bbe3fa7984656a2b6"><div class="ttname"><a href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">entt::basic_registry::version_type</a></div><div class="ttdeci">typename traits_type::version_type version_type</div><div class="ttdoc">Underlying version type.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00154">registry.hpp:154</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ab04ebcb3409a5e99a3a86a2f5b48e052"><div class="ttname"><a href="classentt_1_1basic__registry.html#ab04ebcb3409a5e99a3a86a2f5b48e052">entt::basic_registry::create</a></div><div class="ttdeci">entity_type create(const entity_type hint)</div><div class="ttdoc">Creates a new entity and returns it.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00414">registry.hpp:414</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ab25a060f43bbb5ce9aec1f7f5a698220"><div class="ttname"><a href="classentt_1_1basic__registry.html#ab25a060f43bbb5ce9aec1f7f5a698220">entt::basic_registry::try_ctx</a></div><div class="ttdeci">Type * try_ctx()</div><div class="ttdoc">Returns a pointer to an object in the context of the registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01643">registry.hpp:1643</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aba306a930c1a516cb9c9a764d2f4791f"><div class="ttname"><a href="classentt_1_1basic__registry.html#aba306a930c1a516cb9c9a764d2f4791f">entt::basic_registry::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Checks whether the registry or the pools of the given components are empty.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00320">registry.hpp:320</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_abd873a2d0dfb67f3fd27ce9ed23f61c2"><div class="ttname"><a href="classentt_1_1basic__registry.html#abd873a2d0dfb67f3fd27ce9ed23f61c2">entt::basic_registry::data</a></div><div class="ttdeci">const entity_type * data() const</div><div class="ttdoc">Direct access to the list of entities of a registry.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00340">registry.hpp:340</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ac138930f54716e2b31907586e45367be"><div class="ttname"><a href="classentt_1_1basic__registry.html#ac138930f54716e2b31907586e45367be">entt::basic_registry::emplace</a></div><div class="ttdeci">decltype(auto) emplace(const entity_type entity, Args &amp;&amp;... args)</div><div class="ttdoc">Assigns the given component to an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00615">registry.hpp:615</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_acc3f7f2d48549f2386b065988bc372b7"><div class="ttname"><a href="classentt_1_1basic__registry.html#acc3f7f2d48549f2386b065988bc372b7">entt::basic_registry::try_get</a></div><div class="ttdeci">auto try_get([[maybe_unused]] const entity_type entity)</div><div class="ttdoc">Returns pointers to the given components for an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00991">registry.hpp:991</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ad2c2d2f9d5f79186215919e3d0c00565"><div class="ttname"><a href="classentt_1_1basic__registry.html#ad2c2d2f9d5f79186215919e3d0c00565">entt::basic_registry::remove_if_exists</a></div><div class="ttdeci">size_type remove_if_exists(const entity_type entity)</div><div class="ttdoc">Removes the given components from an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00839">registry.hpp:839</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ad87a72c6d1e49a2fd992ddb7fd9d5a93"><div class="ttname"><a href="classentt_1_1basic__registry.html#ad87a72c6d1e49a2fd992ddb7fd9d5a93">entt::basic_registry::on_destroy</a></div><div class="ttdeci">auto on_destroy()</div><div class="ttdoc">Returns a sink object for the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01154">registry.hpp:1154</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_adc175a0d3bcf83a133c63890c674ceb3"><div class="ttname"><a href="classentt_1_1basic__registry.html#adc175a0d3bcf83a133c63890c674ceb3">entt::basic_registry::destroy</a></div><div class="ttdeci">version_type destroy(const entity_type entity, const version_type version)</div><div class="ttdoc">Destroys an entity and releases its identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00563">registry.hpp:563</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_adc3cd847e65843f936824cd7d45984a5"><div class="ttname"><a href="classentt_1_1basic__registry.html#adc3cd847e65843f936824cd7d45984a5">entt::basic_registry::on_construct</a></div><div class="ttdeci">auto on_construct()</div><div class="ttdoc">Returns a sink object for the given component.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01106">registry.hpp:1106</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_adde389b3b2224d40bdd15945bd048a77"><div class="ttname"><a href="classentt_1_1basic__registry.html#adde389b3b2224d40bdd15945bd048a77">entt::basic_registry::remove</a></div><div class="ttdeci">size_type remove(It first, It last)</div><div class="ttdoc">Removes the given components from all the entities in a range.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00767">registry.hpp:767</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_adebb39eff1162ede07bffded9528e710"><div class="ttname"><a href="classentt_1_1basic__registry.html#adebb39eff1162ede07bffded9528e710">entt::basic_registry::ctx</a></div><div class="ttdeci">void ctx(Func func) const</div><div class="ttdoc">Visits a registry and returns the type info for its context variables.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01695">registry.hpp:1695</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ae30d3262defa6fd847dc059d3d0ed026"><div class="ttname"><a href="classentt_1_1basic__registry.html#ae30d3262defa6fd847dc059d3d0ed026">entt::basic_registry::sortable</a></div><div class="ttdeci">bool sortable(const basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt; &amp;)</div><div class="ttdoc">Checks whether a group can be sorted.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01429">registry.hpp:1429</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ae337ceb77e75c10c73ffa671e09bfff8"><div class="ttname"><a href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8">entt::basic_registry::orphans</a></div><div class="ttdeci">void orphans(Func func) const</div><div class="ttdoc">Iterates orphans and applies them the given function object.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01077">registry.hpp:1077</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ae38b851c7dcc58ca37157e977402a478"><div class="ttname"><a href="classentt_1_1basic__registry.html#ae38b851c7dcc58ca37157e977402a478">entt::basic_registry::version</a></div><div class="ttdeci">static version_type version(const entity_type entity)</div><div class="ttdoc">Returns the version stored along with an entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00174">registry.hpp:174</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_ae887b20d1ff92772676de90a1befd87a"><div class="ttname"><a href="classentt_1_1basic__registry.html#ae887b20d1ff92772676de90a1befd87a">entt::basic_registry::group_if_exists</a></div><div class="ttdeci">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; std::add_const_t&lt; Get &gt;... &gt;, std::add_const_t&lt; Owned &gt;... &gt; group_if_exists(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={}) const</div><div class="ttdoc">Returns a group for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01367">registry.hpp:1367</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aedc179d58adaab31202fc000a0bee068"><div class="ttname"><a href="classentt_1_1basic__registry.html#aedc179d58adaab31202fc000a0bee068">entt::basic_registry::visit</a></div><div class="ttdeci">void visit(Func func) const</div><div class="ttdoc">Visits a registry and returns the type info for its components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01577">registry.hpp:1577</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_aef8bac41fdb48e3c8c589dee21b96980"><div class="ttname"><a href="classentt_1_1basic__registry.html#aef8bac41fdb48e3c8c589dee21b96980">entt::basic_registry::visit</a></div><div class="ttdeci">void visit(entity_type entity, Func func) const</div><div class="ttdoc">Visits an entity and returns the type info for its components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01548">registry.hpp:1548</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_af1d54beb5ae95d5f867c60c05319d1eb"><div class="ttname"><a href="classentt_1_1basic__registry.html#af1d54beb5ae95d5f867c60c05319d1eb">entt::basic_registry::runtime_view</a></div><div class="ttdeci">basic_runtime_view&lt; Entity &gt; runtime_view(ItComp first, ItComp last, ItExcl from={}, ItExcl to={}) const</div><div class="ttdoc">Returns a runtime view for the given components.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l01232">registry.hpp:1232</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_af92741bdee80da6da80171ce7ff17774"><div class="ttname"><a href="classentt_1_1basic__registry.html#af92741bdee80da6da80171ce7ff17774">entt::basic_registry::erase</a></div><div class="ttdeci">void erase(const entity_type entity)</div><div class="ttdoc">Erases the given components from an entity.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00792">registry.hpp:792</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__registry_html_af9c919867fc93a7e1a2d0762ac3a9877"><div class="ttname"><a href="classentt_1_1basic__registry.html#af9c919867fc93a7e1a2d0762ac3a9877">entt::basic_registry::release</a></div><div class="ttdeci">version_type release(const entity_type entity, const version_type version)</div><div class="ttdoc">Releases an entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00511">registry.hpp:511</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__runtime__view_html"><div class="ttname"><a href="classentt_1_1basic__runtime__view.html">entt::basic_runtime_view</a></div><div class="ttdoc">Runtime view.</div><div class="ttdef"><b>Definition:</b> <a href="runtime__view_8hpp_source.html#l00058">runtime_view.hpp:58</a></div></div>
<div class="ttc" id="aclassentt_1_1basic__sparse__set_html"><div class="ttname"><a href="classentt_1_1basic__sparse__set.html">entt::basic_sparse_set</a></div><div class="ttdoc">Basic sparse set implementation.</div><div class="ttdef"><b>Definition:</b> <a href="sparse__set_8hpp_source.html#l00053">sparse_set.hpp:53</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html"><div class="ttname"><a href="classentt_1_1entt__traits.html">entt::entt_traits</a></div><div class="ttdoc">Entity traits.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00077">entity.hpp:77</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_a3797423cba124a5d52a7fcd247b16842"><div class="ttname"><a href="classentt_1_1entt__traits.html#a3797423cba124a5d52a7fcd247b16842">entt::entt_traits::to_integral</a></div><div class="ttdeci">static constexpr entity_type to_integral(const value_type value)</div><div class="ttdoc">Converts an entity to its underlying type.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00095">entity.hpp:95</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_a391b8de07d30bc1b9dd719b6886ddfe0"><div class="ttname"><a href="classentt_1_1entt__traits.html#a391b8de07d30bc1b9dd719b6886ddfe0">entt::entt_traits::to_entity</a></div><div class="ttdeci">static constexpr entity_type to_entity(const value_type value)</div><div class="ttdoc">Returns the entity part once converted to the underlying type.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00104">entity.hpp:104</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_a455de7d5fcbcd138fb4b431305175ef0"><div class="ttname"><a href="classentt_1_1entt__traits.html#a455de7d5fcbcd138fb4b431305175ef0">entt::entt_traits::version_type</a></div><div class="ttdeci">typename traits_type::version_type version_type</div><div class="ttdoc">Underlying version type.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00086">entity.hpp:86</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_a7c56e48588b138d9ed3ec0bff3ca872a"><div class="ttname"><a href="classentt_1_1entt__traits.html#a7c56e48588b138d9ed3ec0bff3ca872a">entt::entt_traits::entity_type</a></div><div class="ttdeci">typename traits_type::entity_type entity_type</div><div class="ttdoc">Underlying entity type.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00084">entity.hpp:84</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_a93f3a6be2f545d7df0532a51dd65238d"><div class="ttname"><a href="classentt_1_1entt__traits.html#a93f3a6be2f545d7df0532a51dd65238d">entt::entt_traits::construct</a></div><div class="ttdeci">static constexpr value_type construct(const entity_type entity=traits_type::entity_mask, const version_type version=traits_type::version_mask)</div><div class="ttdoc">Constructs an identifier from its parts.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00128">entity.hpp:128</a></div></div>
<div class="ttc" id="aclassentt_1_1entt__traits_html_aedb75689bab1bf13e99a8267662b7bc6"><div class="ttname"><a href="classentt_1_1entt__traits.html#aedb75689bab1bf13e99a8267662b7bc6">entt::entt_traits::to_version</a></div><div class="ttdeci">static constexpr version_type to_version(const value_type value)</div><div class="ttdoc">Returns the version part once converted to the underlying type.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00113">entity.hpp:113</a></div></div>
<div class="ttc" id="aclassentt_1_1type__info_html"><div class="ttname"><a href="classentt_1_1type__info.html">entt::type_info</a></div><div class="ttdoc">Implementation specific information about a type.</div><div class="ttdef"><b>Definition:</b> <a href="type__info_8hpp_source.html#l00150">type_info.hpp:150</a></div></div>
<div class="ttc" id="aclassentt_1_1type__info_html_ab1004b9f81624250853a86af8da02b8b"><div class="ttname"><a href="classentt_1_1type__info.html#ab1004b9f81624250853a86af8da02b8b">entt::type_info::seq</a></div><div class="ttdeci">id_type seq() const</div><div class="ttdoc">Type sequential identifier.</div><div class="ttdef"><b>Definition:</b> <a href="type__info_8hpp_source.html#l00195">type_info.hpp:195</a></div></div>
<div class="ttc" id="anamespaceentt_html"><div class="ttname"><a href="namespaceentt.html">entt</a></div><div class="ttdoc">EnTT default namespace.</div><div class="ttdef"><b>Definition:</b> <a href="algorithm_8hpp_source.html#l00013">algorithm.hpp:13</a></div></div>
<div class="ttc" id="anamespaceentt_html_a0b54e231d069e8a231e14b223388808a"><div class="ttname"><a href="namespaceentt.html#a0b54e231d069e8a231e14b223388808a">entt::entity</a></div><div class="ttdeci">entity</div><div class="ttdoc">Default entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2fwd_8hpp_source.html#l00061">fwd.hpp:61</a></div></div>
<div class="ttc" id="anamespaceentt_html_a13e040e7b38a8f86d1ab2f096f37b627"><div class="ttname"><a href="namespaceentt.html#a13e040e7b38a8f86d1ab2f096f37b627">entt::id_type</a></div><div class="ttdeci">std::uint32_t id_type</div><div class="ttdoc">Alias declaration for type identifiers.</div><div class="ttdef"><b>Definition:</b> <a href="core_2fwd_8hpp_source.html#l00017">fwd.hpp:17</a></div></div>
<div class="ttc" id="anamespaceentt_html_a5b73210cef43c4db35ef8ce477cc38a6"><div class="ttname"><a href="namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6">entt::exclude</a></div><div class="ttdeci">constexpr exclude_t&lt; Type... &gt; exclude</div><div class="ttdoc">Variable template for exclusion lists.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2utility_8hpp_source.html#l00024">utility.hpp:24</a></div></div>
<div class="ttc" id="anamespaceentt_html_a674269102fdfe3fd6d7766210a828862"><div class="ttname"><a href="namespaceentt.html#a674269102fdfe3fd6d7766210a828862">entt::tombstone</a></div><div class="ttdeci">constexpr tombstone_t tombstone</div><div class="ttdoc">Compile-time constant for tombstone entities.</div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00345">entity.hpp:345</a></div></div>
<div class="ttc" id="anamespaceentt_html_a7b051461867d3c5c97f77f10b662c26b"><div class="ttname"><a href="namespaceentt.html#a7b051461867d3c5c97f77f10b662c26b">entt::constness_as_t</a></div><div class="ttdeci">typename constness_as&lt; To, From &gt;::type constness_as_t</div><div class="ttdoc">Alias template to facilitate the transcription of the constness.</div><div class="ttdef"><b>Definition:</b> <a href="core_2type__traits_8hpp_source.html#l00653">type_traits.hpp:653</a></div></div>
<div class="ttc" id="anamespaceentt_html_a8c24ecc5ab0055f9f2a4725c95afb29e"><div class="ttname"><a href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e">entt::get</a></div><div class="ttdeci">constexpr get_t&lt; Type... &gt; get</div><div class="ttdoc">Variable template for lists of observed components.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2utility_8hpp_source.html#l00040">utility.hpp:40</a></div></div>
<div class="ttc" id="anamespaceentt_html_aad3d1f1d0e83ad8f124155c9e511c2cd"><div class="ttname"><a href="namespaceentt.html#aad3d1f1d0e83ad8f124155c9e511c2cd">entt::poly</a></div><div class="ttdeci">basic_poly&lt; Concept, sizeof(double[2])&gt; poly</div><div class="ttdoc">Alias declaration for the most common use case.</div><div class="ttdef"><b>Definition:</b> <a href="poly_2fwd_8hpp_source.html#l00020">fwd.hpp:20</a></div></div>
<div class="ttc" id="astructentt_1_1basic__component__traits_html_af33aa4f747fb2a108434048c9661c686"><div class="ttname"><a href="structentt_1_1basic__component__traits.html#af33aa4f747fb2a108434048c9661c686">entt::basic_component_traits::in_place_delete</a></div><div class="ttdeci">std::false_type in_place_delete</div><div class="ttdoc">Pointer stability, default is std::false_type.</div><div class="ttdef"><b>Definition:</b> <a href="component_8hpp_source.html#l00015">component.hpp:15</a></div></div>
<div class="ttc" id="astructentt_1_1basic__view_html"><div class="ttname"><a href="structentt_1_1basic__view.html">entt::basic_view</a></div><div class="ttdoc">View implementation dispatcher.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2fwd_8hpp_source.html#l00025">fwd.hpp:25</a></div></div>
<div class="ttc" id="astructentt_1_1exclude__t_html"><div class="ttname"><a href="structentt_1_1exclude__t.html">entt::exclude_t</a></div><div class="ttdoc">Alias for exclusion lists.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2utility_8hpp_source.html#l00016">utility.hpp:16</a></div></div>
<div class="ttc" id="astructentt_1_1get__t_html"><div class="ttname"><a href="structentt_1_1get__t.html">entt::get_t</a></div><div class="ttdoc">Alias for lists of observed components.</div><div class="ttdef"><b>Definition:</b> <a href="entity_2utility_8hpp_source.html#l00032">utility.hpp:32</a></div></div>
<div class="ttc" id="astructentt_1_1std__sort_html"><div class="ttname"><a href="structentt_1_1std__sort.html">entt::std_sort</a></div><div class="ttdoc">Function object to wrap std::sort in a class type.</div><div class="ttdef"><b>Definition:</b> <a href="algorithm_8hpp_source.html#l00024">algorithm.hpp:24</a></div></div>
<div class="ttc" id="astructentt_1_1type__hash_html"><div class="ttname"><a href="structentt_1_1type__hash.html">entt::type_hash</a></div><div class="ttdoc">Type hash.</div><div class="ttdef"><b>Definition:</b> <a href="type__info_8hpp_source.html#l00111">type_info.hpp:111</a></div></div>
<div class="ttc" id="astructentt_1_1type__seq_html_a4e2551d32b2eb0d5ab7681695de66248"><div class="ttname"><a href="structentt_1_1type__seq.html#a4e2551d32b2eb0d5ab7681695de66248">entt::type_seq::value</a></div><div class="ttdeci">static id_type value()</div><div class="ttdoc">Returns the sequential identifier of a given type.</div><div class="ttdef"><b>Definition:</b> <a href="type__info_8hpp_source.html#l00096">type_info.hpp:96</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>