API reference v3.2.0

This commit is contained in:
Michele Caini
2019-10-30 00:07:19 +01:00
parent c600a6be5e
commit 401b1db1a0
738 changed files with 8958 additions and 12695 deletions
File diff suppressed because one or more lines are too long
+5 -5
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -71,21 +71,21 @@ $(function() {
<div class="ttc" id="structentt_1_1basic__actor_html_a46dc913885c448e059e9ca7cf3a21221"><div class="ttname"><a href="structentt_1_1basic__actor.html#a46dc913885c448e059e9ca7cf3a21221">entt::basic_actor::~basic_actor</a></div><div class="ttdeci">virtual ~basic_actor()</div><div class="ttdoc">Default destructor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00058">actor.hpp:58</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a8e7a76ea53bc8a0cce33462def30b9ac"><div class="ttname"><a href="structentt_1_1basic__actor.html#a8e7a76ea53bc8a0cce33462def30b9ac">entt::basic_actor::has</a></div><div class="ttdeci">bool has() const ENTT_NOEXCEPT</div><div class="ttdoc">Checks if an actor has the given components. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00133">actor.hpp:133</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a827ed2e23e39e8b706f7acc511a46024"><div class="ttname"><a href="structentt_1_1basic__actor.html#a827ed2e23e39e8b706f7acc511a46024">entt::basic_actor::backend</a></div><div class="ttdeci">registry_type &amp; backend() ENTT_NOEXCEPT</div><div class="ttdoc">Returns a reference to the underlying registry. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00178">actor.hpp:178</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_af58f3add442cfb3f1fa470402db072bd"><div class="ttname"><a href="classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd">entt::basic_registry::destroy</a></div><div class="ttdeci">void destroy(const entity_type entity)</div><div class="ttdoc">Destroys an entity and lets the registry recycle the identifier. </div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00695">registry.hpp:695</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_af58f3add442cfb3f1fa470402db072bd"><div class="ttname"><a href="classentt_1_1basic__registry.html#af58f3add442cfb3f1fa470402db072bd">entt::basic_registry::destroy</a></div><div class="ttdeci">void destroy(const entity_type entity)</div><div class="ttdoc">Destroys an entity and lets the registry recycle the identifier. </div><div class="ttdef"><b>Definition:</b> <a href="registry_8hpp_source.html#l00682">registry.hpp:682</a></div></div>
<div class="ttc" id="namespaceentt_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#l00012">algorithm.hpp:12</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a2c2e10f12014f5269be0b9ab055acfca"><div class="ttname"><a href="structentt_1_1basic__actor.html#a2c2e10f12014f5269be0b9ab055acfca">entt::basic_actor::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="actor_8hpp_source.html#l00032">actor.hpp:32</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a079bddd72566b14843729a154a8f684e"><div class="ttname"><a href="structentt_1_1basic__actor.html#a079bddd72566b14843729a154a8f684e">entt::basic_actor::backend</a></div><div class="ttdeci">const registry_type &amp; backend() const ENTT_NOEXCEPT</div><div class="ttdoc">Returns a reference to the underlying registry. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00173">actor.hpp:173</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_ac37259d66c0a8f42b7e744567382c6c2"><div class="ttname"><a href="structentt_1_1basic__actor.html#ac37259d66c0a8f42b7e744567382c6c2">entt::basic_actor::try_get</a></div><div class="ttdeci">auto try_get() const ENTT_NOEXCEPT</div><div class="ttdoc">Returns pointers to the given components for an actor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00159">actor.hpp:159</a></div></div>
<div class="ttc" id="namespaceentt_html_a588326af8f6f902a6c0b57d3f9fc6c17"><div class="ttname"><a href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a></div><div class="ttdeci">constexpr auto null</div><div class="ttdoc">Compile-time constant for null entities. </div><div class="ttdef"><b>Definition:</b> <a href="entity_8hpp_source.html#l00168">entity.hpp:168</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_ac7d145b7adb8ca486c49cfd44aebea73"><div class="ttname"><a href="classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73">entt::basic_registry::valid</a></div><div class="ttdeci">bool valid(const entity_type entity) const ENTT_NOEXCEPT</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#l00493">registry.hpp:493</a></div></div>
<div class="ttc" id="classentt_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="entity_2fwd_8hpp_source.html#l00014">fwd.hpp:14</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_ac7d145b7adb8ca486c49cfd44aebea73"><div class="ttname"><a href="classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73">entt::basic_registry::valid</a></div><div class="ttdeci">bool valid(const entity_type entity) const ENTT_NOEXCEPT</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#l00500">registry.hpp:500</a></div></div>
<div class="ttc" id="classentt_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="entity_2fwd_8hpp_source.html#l00013">fwd.hpp:13</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a32635ae3046ebca665adef6b3ef87ef3"><div class="ttname"><a href="structentt_1_1basic__actor.html#a32635ae3046ebca665adef6b3ef87ef3">entt::basic_actor::basic_actor</a></div><div class="ttdeci">basic_actor(registry_type &amp;ref)</div><div class="ttdoc">Constructs an actor from a given registry. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00042">actor.hpp:42</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a0320585b864c700d980212f37654a8a1"><div class="ttname"><a href="structentt_1_1basic__actor.html#a0320585b864c700d980212f37654a8a1">entt::basic_actor::try_get</a></div><div class="ttdeci">auto try_get() ENTT_NOEXCEPT</div><div class="ttdoc">Returns pointers to the given components for an actor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00165">actor.hpp:165</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a3633aea0c287c0de909dc1d7aad80aef"><div class="ttname"><a href="structentt_1_1basic__actor.html#a3633aea0c287c0de909dc1d7aad80aef">entt::basic_actor::basic_actor</a></div><div class="ttdeci">basic_actor(entity_type entity, registry_type &amp;ref)</div><div class="ttdoc">Constructs an actor from a given entity. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00051">actor.hpp:51</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a729116e0ae65677a6ed9ed9d21c111c6"><div class="ttname"><a href="structentt_1_1basic__actor.html#a729116e0ae65677a6ed9ed9d21c111c6">entt::basic_actor::operator=</a></div><div class="ttdeci">basic_actor &amp; operator=(basic_actor &amp;&amp;other)</div><div class="ttdoc">Move assignment operator. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00089">actor.hpp:89</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a8c86ac43873d5b42c1774ea6646513e0"><div class="ttname"><a href="structentt_1_1basic__actor.html#a8c86ac43873d5b42c1774ea6646513e0">entt::basic_actor::basic_actor</a></div><div class="ttdeci">basic_actor(basic_actor &amp;&amp;other)</div><div class="ttdoc">Move constructor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00073">actor.hpp:73</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_a64d3d7ff9801b9efbb3cf08d93baca88"><div class="ttname"><a href="structentt_1_1basic__actor.html#a64d3d7ff9801b9efbb3cf08d93baca88">entt::basic_actor::get</a></div><div class="ttdeci">decltype(auto) get() const ENTT_NOEXCEPT</div><div class="ttdoc">Returns references to the given components for an actor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00143">actor.hpp:143</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_a32d0bb4c8ad63d78c8ae455dfeb02c59"><div class="ttname"><a href="classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59">entt::basic_registry::create</a></div><div class="ttdeci">auto 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#l00558">registry.hpp:558</a></div></div>
<div class="ttc" id="classentt_1_1basic__registry_html_a32d0bb4c8ad63d78c8ae455dfeb02c59"><div class="ttname"><a href="classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59">entt::basic_registry::create</a></div><div class="ttdeci">auto 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#l00565">registry.hpp:565</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html"><div class="ttname"><a href="structentt_1_1basic__actor.html">entt::basic_actor</a></div><div class="ttdoc">Dedicated to those who aren&amp;#39;t confident with the entity-component-system architecture. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00028">actor.hpp:28</a></div></div>
<div class="ttc" id="structentt_1_1basic__actor_html_af92d62c39e122692addbfd6b75ea6922"><div class="ttname"><a href="structentt_1_1basic__actor.html#af92d62c39e122692addbfd6b75ea6922">entt::basic_actor::entity</a></div><div class="ttdeci">entity_type entity() const ENTT_NOEXCEPT</div><div class="ttdoc">Returns the entity associated with an actor. </div><div class="ttdef"><b>Definition:</b> <a href="actor_8hpp_source.html#l00186">actor.hpp:186</a></div></div>
</div><!-- fragment --></div><!-- contents -->
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+81 -73
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -73,83 +73,91 @@ $(function() {
<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1as__void__t.html" target="_self">as_void_t</a></td><td class="desc">Empty class type used to request the <em>as void</em> policy </td></tr>
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1basic__actor.html" target="_self">basic_actor</a></td><td class="desc">Dedicated to those who aren't confident with the entity-component-system architecture </td></tr>
<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1basic__collector.html" target="_self">basic_collector</a></td><td class="desc">Collector </td></tr>
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1basic__collector_3_01matcher_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_0f5f4fb3c1586eeb5723872d0d0e4f427.html" target="_self">basic_collector&lt; matcher&lt; matcher&lt; type_list&lt; Reject... &gt;, type_list&lt; Require... &gt; &gt;, Rule... &gt;, Other... &gt;</a></td><td class="desc">Collector </td></tr>
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1basic__collector_3_01matcher_3_01type__list_3_01Reject_8_8_8_01_4_00_01type__list_98a79514dcad34a82f321f0796064ffb.html" target="_self">basic_collector&lt; matcher&lt; type_list&lt; Reject... &gt;, type_list&lt; Require... &gt;, Rule... &gt;, Other... &gt;</a></td><td class="desc">Collector </td></tr>
<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1basic__collector_3_4.html" target="_self">basic_collector&lt;&gt;</a></td><td class="desc">Collector </td></tr>
<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__continuous__loader.html" target="_self">basic_continuous_loader</a></td><td class="desc">Utility class for <em>continuous loading</em> </td></tr>
<tr id="row_0_10_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__group.html" target="_self">basic_group</a></td><td class="desc">Group </td></tr>
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html" target="_self">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="desc">Non-owning group </td></tr>
<tr id="row_0_12_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html" target="_self">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="desc">Owning group </td></tr>
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html" target="_self">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="desc">Non-owning group </td></tr>
<tr id="row_0_12_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html" target="_self">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="desc">Owning group </td></tr>
<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__hashed__string.html" target="_self">basic_hashed_string</a></td><td class="desc">Zero overhead unique identifier </td></tr>
<tr id="row_0_14_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__observer.html" target="_self">basic_observer</a></td><td class="desc">Observer </td></tr>
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__prototype.html" target="_self">basic_prototype</a></td><td class="desc"></td></tr>
<tr id="row_0_16_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__registry.html" target="_self">basic_registry</a></td><td class="desc">Fast and reliable entity-component system </td></tr>
<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__runtime__view.html" target="_self">basic_runtime_view</a></td><td class="desc">Runtime view </td></tr>
<tr id="row_0_18_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__snapshot.html" target="_self">basic_snapshot</a></td><td class="desc">Utility class to create snapshots from a registry </td></tr>
<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__snapshot__loader.html" target="_self">basic_snapshot_loader</a></td><td class="desc">Utility class to restore a snapshot as a whole </td></tr>
<tr id="row_0_20_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__storage.html" target="_self">basic_storage</a></td><td class="desc">Basic storage implementation </td></tr>
<tr id="row_0_21_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html" target="_self">basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="desc">Basic storage implementation. </td></tr>
<tr id="row_0_22_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__view.html" target="_self">basic_view</a></td><td class="desc">Multi component view </td></tr>
<tr id="row_0_23_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html" target="_self">basic_view&lt; Entity, Component &gt;</a></td><td class="desc">Single component view specialization </td></tr>
<tr id="row_0_24_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1connect__arg__t.html" target="_self">connect_arg_t</a></td><td class="desc">Used to wrap a function or a member of a specified type </td></tr>
<tr id="row_0_25_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1connection.html" target="_self">connection</a></td><td class="desc">Connection class </td></tr>
<tr id="row_0_26_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1delegate.html" target="_self">delegate</a></td><td class="desc">Basic delegate implementation </td></tr>
<tr id="row_0_27_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html" target="_self">delegate&lt; Ret(Args...)&gt;</a></td><td class="desc">Utility class to use to send around functions and members </td></tr>
<tr id="row_0_28_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1dispatcher.html" target="_self">dispatcher</a></td><td class="desc">Basic dispatcher implementation </td></tr>
<tr id="row_0_29_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_29_" class="arrow" onclick="toggleFolder('0_29_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1emitter.html" target="_self">emitter</a></td><td class="desc">General purpose event emitter </td></tr>
<tr id="row_0_29_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1emitter_1_1connection.html" target="_self">connection</a></td><td class="desc">Generic connection type for events </td></tr>
<tr id="row_0_30_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits.html" target="_self">entt_traits</a></td><td class="desc">Entity traits </td></tr>
<tr id="row_0_31_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html" target="_self">entt_traits&lt; std::uint16_t &gt;</a></td><td class="desc">Entity traits for a 16 bits entity identifier </td></tr>
<tr id="row_0_32_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html" target="_self">entt_traits&lt; std::uint32_t &gt;</a></td><td class="desc">Entity traits for a 32 bits entity identifier </td></tr>
<tr id="row_0_33_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html" target="_self">entt_traits&lt; std::uint64_t &gt;</a></td><td class="desc">Entity traits for a 64 bits entity identifier </td></tr>
<tr id="row_0_34_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1exclude__t.html" target="_self">exclude_t</a></td><td class="desc">Alias for exclusion lists </td></tr>
<tr id="row_0_35_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1family.html" target="_self">family</a></td><td class="desc">Dynamic identifier generator </td></tr>
<tr id="row_0_36_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1get__t.html" target="_self">get_t</a></td><td class="desc">Alias for lists of observed components </td></tr>
<tr id="row_0_37_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1identifier.html" target="_self">identifier</a></td><td class="desc">Types identifiers </td></tr>
<tr id="row_0_38_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1identity.html" target="_self">identity</a></td><td class="desc">Identity function object (waiting for C++20) </td></tr>
<tr id="row_0_39_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1insertion__sort.html" target="_self">insertion_sort</a></td><td class="desc">Function object for performing insertion sort </td></tr>
<tr id="row_0_40_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__named__type.html" target="_self">is_named_type</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type has a name. In all other cases, <code>value</code> is false </td></tr>
<tr id="row_0_41_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html" target="_self">is_named_type&lt; Type, std::void_t&lt; named_type_traits_t&lt; std::decay_t&lt; Type &gt; &gt; &gt; &gt;</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type has a name. In all other cases, <code>value</code> is false </td></tr>
<tr id="row_0_42_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1matcher.html" target="_self">matcher</a></td><td class="desc">Grouping matcher </td></tr>
<tr id="row_0_43_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__any.html" target="_self">meta_any</a></td><td class="desc">Meta any object </td></tr>
<tr id="row_0_44_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__base.html" target="_self">meta_base</a></td><td class="desc">Meta base object </td></tr>
<tr id="row_0_45_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__conv.html" target="_self">meta_conv</a></td><td class="desc">Meta conversion function object </td></tr>
<tr id="row_0_46_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__ctor.html" target="_self">meta_ctor</a></td><td class="desc">Meta constructor object </td></tr>
<tr id="row_0_47_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__data.html" target="_self">meta_data</a></td><td class="desc">Meta data object </td></tr>
<tr id="row_0_48_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__dtor.html" target="_self">meta_dtor</a></td><td class="desc">Meta destructor object </td></tr>
<tr id="row_0_49_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__factory.html" target="_self">meta_factory</a></td><td class="desc">A meta factory to be used for reflection purposes </td></tr>
<tr id="row_0_50_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__func.html" target="_self">meta_func</a></td><td class="desc">Meta function object </td></tr>
<tr id="row_0_51_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__handle.html" target="_self">meta_handle</a></td><td class="desc">Meta handle object </td></tr>
<tr id="row_0_52_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__prop.html" target="_self">meta_prop</a></td><td class="desc">Meta property object </td></tr>
<tr id="row_0_53_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__type.html" target="_self">meta_type</a></td><td class="desc">Meta type object </td></tr>
<tr id="row_0_54_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1monostate.html" target="_self">monostate</a></td><td class="desc">Minimal implementation of the monostate pattern </td></tr>
<tr id="row_0_55_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1named__type__traits.html" target="_self">named_type_traits</a></td><td class="desc">Traits class used mainly to push things across boundaries </td></tr>
<tr id="row_0_56_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1named__type__traits_3_01const_01Type_01_4.html" target="_self">named_type_traits&lt; const Type &gt;</a></td><td class="desc">Specialization used to get rid of constness </td></tr>
<tr id="row_0_57_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1process.html" target="_self">process</a></td><td class="desc">Base class for processes </td></tr>
<tr id="row_0_58_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1process__adaptor.html" target="_self">process_adaptor</a></td><td class="desc">Adaptor for lambdas and functors to turn them into processes </td></tr>
<tr id="row_0_59_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1radix__sort.html" target="_self">radix_sort</a></td><td class="desc">Function object for performing LSD radix sort </td></tr>
<tr id="row_0_60_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1resource__cache.html" target="_self">resource_cache</a></td><td class="desc">Simple cache for resources of a given type </td></tr>
<tr id="row_0_61_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1resource__handle.html" target="_self">resource_handle</a></td><td class="desc">Shared resource handle </td></tr>
<tr id="row_0_62_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1resource__loader.html" target="_self">resource_loader</a></td><td class="desc">Base class for resource loaders </td></tr>
<tr id="row_0_63_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1scheduler.html" target="_self">scheduler</a></td><td class="desc">Cooperative scheduler for processes </td></tr>
<tr id="row_0_64_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1scoped__connection.html" target="_self">scoped_connection</a></td><td class="desc">Scoped connection class </td></tr>
<tr id="row_0_65_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1service__locator.html" target="_self">service_locator</a></td><td class="desc">Service locator, nothing more </td></tr>
<tr id="row_0_66_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sigh.html" target="_self">sigh</a></td><td class="desc">Unmanaged signal handler </td></tr>
<tr id="row_0_67_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html" target="_self">sigh&lt; Ret(Args...)&gt;</a></td><td class="desc">Unmanaged signal handler </td></tr>
<tr id="row_0_68_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sink.html" target="_self">sink</a></td><td class="desc">Sink class </td></tr>
<tr id="row_0_69_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html" target="_self">sink&lt; Ret(Args...)&gt;</a></td><td class="desc">Sink class </td></tr>
<tr id="row_0_70_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sparse__set.html" target="_self">sparse_set</a></td><td class="desc">Basic sparse set implementation </td></tr>
<tr id="row_0_71_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1std__sort.html" target="_self">std_sort</a></td><td class="desc">Function object to wrap <code>std::sort</code> in a class type </td></tr>
<tr id="row_0_72_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1storage.html" target="_self">storage</a></td><td class="desc">Basic storage implementation. </td></tr>
<tr id="row_0_73_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list.html" target="_self">type_list</a></td><td class="desc">A class to use to push around lists of types, nothing more </td></tr>
<tr id="row_0_74_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat.html" target="_self">type_list_cat</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_75_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html" target="_self">type_list_cat&lt; type_list&lt; Type... &gt; &gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_76_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html" target="_self">type_list_cat&lt; type_list&lt; Type... &gt;, type_list&lt; Other... &gt;, List... &gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_77_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_4.html" target="_self">type_list_cat&lt;&gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_78_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__size.html" target="_self">type_list_size</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_79_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html" target="_self">type_list_size&lt; type_list&lt; Type... &gt; &gt;</a></td><td class="desc">Compile-time number of elements in a type list </td></tr>
<tr id="row_0_80_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique.html" target="_self">type_list_unique</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_81_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html" target="_self">type_list_unique&lt; type_list&lt; Type, Other... &gt; &gt;</a></td><td class="desc">Removes duplicates types from a type list </td></tr>
<tr id="row_0_82_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html" target="_self">type_list_unique&lt; type_list&lt;&gt; &gt;</a></td><td class="desc">Removes duplicates types from a type list </td></tr>
<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__registry.html" target="_self">basic_registry</a></td><td class="desc">Fast and reliable entity-component system </td></tr>
<tr id="row_0_16_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__runtime__view.html" target="_self">basic_runtime_view</a></td><td class="desc">Runtime view </td></tr>
<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__snapshot.html" target="_self">basic_snapshot</a></td><td class="desc">Utility class to create snapshots from a registry </td></tr>
<tr id="row_0_18_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__snapshot__loader.html" target="_self">basic_snapshot_loader</a></td><td class="desc">Utility class to restore a snapshot as a whole </td></tr>
<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__storage.html" target="_self">basic_storage</a></td><td class="desc">Basic storage implementation </td></tr>
<tr id="row_0_20_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html" target="_self">basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="desc">Basic storage implementation. </td></tr>
<tr id="row_0_21_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__view.html" target="_self">basic_view</a></td><td class="desc">View </td></tr>
<tr id="row_0_22_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html" target="_self">basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="desc">Multi component view </td></tr>
<tr id="row_0_23_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html" target="_self">basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="desc">Single component view specialization </td></tr>
<tr id="row_0_24_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1cache.html" target="_self">cache</a></td><td class="desc">Simple cache for resources of a given type </td></tr>
<tr id="row_0_25_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1choice__t.html" target="_self">choice_t</a></td><td class="desc">Utility class to disambiguate overloaded functions </td></tr>
<tr id="row_0_26_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1choice__t_3_010_01_4.html" target="_self">choice_t&lt; 0 &gt;</a></td><td class="desc">Utility class to disambiguate overloaded functions. </td></tr>
<tr id="row_0_27_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1connect__arg__t.html" target="_self">connect_arg_t</a></td><td class="desc">Used to wrap a function or a member of a specified type </td></tr>
<tr id="row_0_28_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1connection.html" target="_self">connection</a></td><td class="desc">Connection class </td></tr>
<tr id="row_0_29_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1delegate.html" target="_self">delegate</a></td><td class="desc">Basic delegate implementation </td></tr>
<tr id="row_0_30_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html" target="_self">delegate&lt; Ret(Args...)&gt;</a></td><td class="desc">Utility class to use to send around functions and members </td></tr>
<tr id="row_0_31_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1dispatcher.html" target="_self">dispatcher</a></td><td class="desc">Basic dispatcher implementation </td></tr>
<tr id="row_0_32_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_32_" class="arrow" onclick="toggleFolder('0_32_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1emitter.html" target="_self">emitter</a></td><td class="desc">General purpose event emitter </td></tr>
<tr id="row_0_32_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1emitter_1_1connection.html" target="_self">connection</a></td><td class="desc">Generic connection type for events </td></tr>
<tr id="row_0_33_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits.html" target="_self">entt_traits</a></td><td class="desc">Entity traits </td></tr>
<tr id="row_0_34_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint16__t_01_4.html" target="_self">entt_traits&lt; std::uint16_t &gt;</a></td><td class="desc">Entity traits for a 16 bits entity identifier </td></tr>
<tr id="row_0_35_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint32__t_01_4.html" target="_self">entt_traits&lt; std::uint32_t &gt;</a></td><td class="desc">Entity traits for a 32 bits entity identifier </td></tr>
<tr id="row_0_36_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1entt__traits_3_01std_1_1uint64__t_01_4.html" target="_self">entt_traits&lt; std::uint64_t &gt;</a></td><td class="desc">Entity traits for a 64 bits entity identifier </td></tr>
<tr id="row_0_37_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1exclude__t.html" target="_self">exclude_t</a></td><td class="desc">Alias for exclusion lists </td></tr>
<tr id="row_0_38_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1extended__meta__factory.html" target="_self">extended_meta_factory</a></td><td class="desc">Extended meta factory to be used for reflection purposes </td></tr>
<tr id="row_0_39_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1family.html" target="_self">family</a></td><td class="desc">Dynamic identifier generator </td></tr>
<tr id="row_0_40_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1get__t.html" target="_self">get_t</a></td><td class="desc">Alias for lists of observed components </td></tr>
<tr id="row_0_41_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1handle.html" target="_self">handle</a></td><td class="desc">Shared resource handle </td></tr>
<tr id="row_0_42_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1identifier.html" target="_self">identifier</a></td><td class="desc">Types identifiers </td></tr>
<tr id="row_0_43_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1identity.html" target="_self">identity</a></td><td class="desc">Identity function object (waiting for C++20) </td></tr>
<tr id="row_0_44_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1insertion__sort.html" target="_self">insertion_sort</a></td><td class="desc">Function object for performing insertion sort </td></tr>
<tr id="row_0_45_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__equality__comparable.html" target="_self">is_equality_comparable</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type is equality comparable, false otherwise </td></tr>
<tr id="row_0_46_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__equality__comparable_3_01Type_00_01std_1_1void__t_3_01decltype_07std_1_1declva22225425f92ebe2943dca66f125cfda1.html" target="_self">is_equality_comparable&lt; Type, std::void_t&lt; decltype(std::declval&lt; Type &gt;()==std::declval&lt; Type &gt;())&gt; &gt;</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type is equality comparable, false otherwise. </td></tr>
<tr id="row_0_47_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__named__type.html" target="_self">is_named_type</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type has a name. In all other cases, <code>value</code> is false </td></tr>
<tr id="row_0_48_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1is__named__type_3_01Type_00_01std_1_1void__t_3_01named__type__traits__t_3_01std_1_268fa5a871b2de95e24d77c0786df19e.html" target="_self">is_named_type&lt; Type, std::void_t&lt; named_type_traits_t&lt; std::decay_t&lt; Type &gt; &gt; &gt; &gt;</a></td><td class="desc">Provides the member constant <code>value</code> to true if a given type has a name. In all other cases, <code>value</code> is false. </td></tr>
<tr id="row_0_49_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1loader.html" target="_self">loader</a></td><td class="desc">Base class for resource loaders </td></tr>
<tr id="row_0_50_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1matcher.html" target="_self">matcher</a></td><td class="desc">Grouping matcher </td></tr>
<tr id="row_0_51_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__any.html" target="_self">meta_any</a></td><td class="desc">Opaque container for values of any type </td></tr>
<tr id="row_0_52_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__base.html" target="_self">meta_base</a></td><td class="desc">Opaque container for meta base classes </td></tr>
<tr id="row_0_53_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__conv.html" target="_self">meta_conv</a></td><td class="desc">Opaque container for meta conversion functions </td></tr>
<tr id="row_0_54_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__ctor.html" target="_self">meta_ctor</a></td><td class="desc">Opaque container for meta constructors </td></tr>
<tr id="row_0_55_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__ctx.html" target="_self">meta_ctx</a></td><td class="desc">Opaque container for a meta context </td></tr>
<tr id="row_0_56_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__data.html" target="_self">meta_data</a></td><td class="desc">Opaque container for meta data </td></tr>
<tr id="row_0_57_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__dtor.html" target="_self">meta_dtor</a></td><td class="desc">Opaque container for meta destructors </td></tr>
<tr id="row_0_58_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__factory.html" target="_self">meta_factory</a></td><td class="desc">A meta factory to be used for reflection purposes </td></tr>
<tr id="row_0_59_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__func.html" target="_self">meta_func</a></td><td class="desc">Opaque container for meta functions </td></tr>
<tr id="row_0_60_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__handle.html" target="_self">meta_handle</a></td><td class="desc">Opaque pointers to instances of any type </td></tr>
<tr id="row_0_61_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1meta__prop.html" target="_self">meta_prop</a></td><td class="desc">Opaque container for meta properties of any type </td></tr>
<tr id="row_0_62_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1meta__type.html" target="_self">meta_type</a></td><td class="desc">Opaque container for meta types </td></tr>
<tr id="row_0_63_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1monostate.html" target="_self">monostate</a></td><td class="desc">Minimal implementation of the monostate pattern </td></tr>
<tr id="row_0_64_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1named__type__traits.html" target="_self">named_type_traits</a></td><td class="desc">Traits class used mainly to push things across boundaries </td></tr>
<tr id="row_0_65_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1named__type__traits_3_01const_01Type_01_4.html" target="_self">named_type_traits&lt; const Type &gt;</a></td><td class="desc">Specialization used to get rid of constness </td></tr>
<tr id="row_0_66_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1overloaded.html" target="_self">overloaded</a></td><td class="desc">Helper type for visitors </td></tr>
<tr id="row_0_67_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1process.html" target="_self">process</a></td><td class="desc">Base class for processes </td></tr>
<tr id="row_0_68_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1process__adaptor.html" target="_self">process_adaptor</a></td><td class="desc">Adaptor for lambdas and functors to turn them into processes </td></tr>
<tr id="row_0_69_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1radix__sort.html" target="_self">radix_sort</a></td><td class="desc">Function object for performing LSD radix sort </td></tr>
<tr id="row_0_70_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1scheduler.html" target="_self">scheduler</a></td><td class="desc">Cooperative scheduler for processes </td></tr>
<tr id="row_0_71_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1scoped__connection.html" target="_self">scoped_connection</a></td><td class="desc">Scoped connection class </td></tr>
<tr id="row_0_72_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1service__locator.html" target="_self">service_locator</a></td><td class="desc">Service locator, nothing more </td></tr>
<tr id="row_0_73_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sigh.html" target="_self">sigh</a></td><td class="desc">Unmanaged signal handler </td></tr>
<tr id="row_0_74_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sigh_3_01Ret_07Args_8_8_8_08_4.html" target="_self">sigh&lt; Ret(Args...)&gt;</a></td><td class="desc">Unmanaged signal handler </td></tr>
<tr id="row_0_75_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sink.html" target="_self">sink</a></td><td class="desc">Sink class </td></tr>
<tr id="row_0_76_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sink_3_01Ret_07Args_8_8_8_08_4.html" target="_self">sink&lt; Ret(Args...)&gt;</a></td><td class="desc">Sink class </td></tr>
<tr id="row_0_77_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classentt_1_1sparse__set.html" target="_self">sparse_set</a></td><td class="desc">Basic sparse set implementation </td></tr>
<tr id="row_0_78_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1std__sort.html" target="_self">std_sort</a></td><td class="desc">Function object to wrap <code>std::sort</code> in a class type </td></tr>
<tr id="row_0_79_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1storage.html" target="_self">storage</a></td><td class="desc">Basic storage implementation. </td></tr>
<tr id="row_0_80_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list.html" target="_self">type_list</a></td><td class="desc">A class to use to push around lists of types, nothing more </td></tr>
<tr id="row_0_81_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat.html" target="_self">type_list_cat</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_82_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_01_4.html" target="_self">type_list_cat&lt; type_list&lt; Type... &gt; &gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_83_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_01type__list_3_01Type_8_8_8_01_4_00_01type__list_3_01Other_8_8_8_01_4_00_01List_8_8_8_01_4.html" target="_self">type_list_cat&lt; type_list&lt; Type... &gt;, type_list&lt; Other... &gt;, List... &gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_84_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__cat_3_4.html" target="_self">type_list_cat&lt;&gt;</a></td><td class="desc">Concatenates multiple type lists </td></tr>
<tr id="row_0_85_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__size.html" target="_self">type_list_size</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_86_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__size_3_01type__list_3_01Type_8_8_8_01_4_01_4.html" target="_self">type_list_size&lt; type_list&lt; Type... &gt; &gt;</a></td><td class="desc">Compile-time number of elements in a type list </td></tr>
<tr id="row_0_87_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique.html" target="_self">type_list_unique</a></td><td class="desc">Primary template isn't defined on purpose </td></tr>
<tr id="row_0_88_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique_3_01type__list_3_01Type_00_01Other_8_8_8_01_4_01_4.html" target="_self">type_list_unique&lt; type_list&lt; Type, Other... &gt; &gt;</a></td><td class="desc">Removes duplicates types from a type list </td></tr>
<tr id="row_0_89_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1type__list__unique_3_01type__list_3_4_01_4.html" target="_self">type_list_unique&lt; type_list&lt;&gt; &gt;</a></td><td class="desc">Removes duplicates types from a type list </td></tr>
<tr id="row_0_90_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structentt_1_1y__combinator.html" target="_self">y_combinator</a></td><td class="desc">Basic implementation of a y-combinator </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
-126
View File
@@ -1,126 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Frequently Asked Questions</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Frequently Asked Questions </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md49"></a>
Introduction</h1>
<p>This is a constantly updated section where I'll try to put the answers to the most frequently asked questions.<br />
If you don't find your answer here, there are two cases: nobody has done it yet or this section needs updating. In both cases, try to <a href="https://github.com/skypjack/entt/issues/new">open a new issue</a> or enter the <a href="https://gitter.im/skypjack/entt">gitter channel</a> and ask your question. Probably someone already has an answer for you and we can then integrate this part of the documentation.</p>
<h1><a class="anchor" id="autotoc_md50"></a>
FAQ</h1>
<h2><a class="anchor" id="autotoc_md51"></a>
Why is my debug build on Windows so slow?</h2>
<p><code>EnTT</code> is an experimental project that I also use to keep me up-to-date with the latest revision of the language and the standard library. For this reason, it's likely that some classes you're working with are using standard containers under the hood.<br />
Unfortunately, it's known that the standard containers aren't particularly performing in debugging (the reasons for this go beyond this document) and are even less so on Windows apparently. Fortunately this can also be mitigated a lot, achieving good results in many cases.</p>
<p>First of all, there are two things to do in a Windows project:</p>
<ul>
<li>Disable the <a href="https://docs.microsoft.com/cpp/build/reference/jmc"><code>/JMC</code></a> option (<em>Just My Code</em> debugging), available starting in Visual Studio 2017 version 15.8.</li>
<li>Set the <a href="https://docs.microsoft.com/cpp/standard-library/iterator-debug-level"><code>_ITERATOR_DEBUG_LEVEL</code></a> macro to 0. This will disable checked iterators and iterator debugging.</li>
</ul>
<p>Moreover, the macro <code>ENTT_DISABLE_ASSERT</code> should be defined to disable internal checks made by <code>EnTT</code> in debug. These are asserts introduced to help the users, but require to access to the underlying containers and therefore risk ruining the performance in some cases.</p>
<p>With these changes, debug performance should increase enough for most cases. If you want something more, you can can also switch to an optimization level <code>O0</code> or preferably <code>O1</code>.</p>
<h2><a class="anchor" id="autotoc_md52"></a>
How can I represent hierarchies with my components?</h2>
<p>This is one of the first questions that anyone makes when starting to work with the entity-component-system architectural pattern.<br />
There are several approaches to the problem and what’s the best one depends mainly on the real problem one is facing. In all cases, how to do it doesn't strictly depend on the library in use, but the latter can certainly allow or not different techniques depending on how the data are laid out.</p>
<p>I tried to describe some of the techniques that fit well with the model of <code>EnTT</code>. <a href="https://skypjack.github.io/2019-06-25-ecs-baf-part-4/">Here</a> is the first post of a series that tries to explore the problem. More will probably come in future.</p>
<p>Long story short, you can always define a tree where the nodes expose implicit lists of children by means of the following type:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>relationship {</div><div class="line"> std::size_t children{};</div><div class="line"> entt::entity first{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity prev{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity next{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity parent{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> <span class="comment">// ... other data members ...</span></div><div class="line">};</div></div><!-- fragment --><p>The sort functionalities of <code>EnTT</code>, the groups and all the other features of the library can help then to get the best in terms of data locality and therefore performance from this component.</p>
<h2><a class="anchor" id="autotoc_md53"></a>
Custom entity identifiers: yay or nay?</h2>
<p>Custom entity identifiers are definitely a good idea in two cases at least:</p>
<ul>
<li>If <code>std::uint32_t</code> isn't large enough as an underlying type.</li>
<li>If you want to avoid conflicts when using multiple registries.</li>
</ul>
<p>These identifiers are nothing more than enum classes with some salt.<br />
To simplify the creation of new identifiers, <code>EnTT</code> provides the macro <code>ENTT_ENTITY_TYPE</code> that accepts two arguments:</p>
<ul>
<li>The name you want to give to the new identifier (watch out for namespaces).</li>
<li>The underlying type to use (either <code>std::uint16_t</code>, <code>std::uint32_t</code> or <code>std::uint64_t</code>).</li>
</ul>
<p>In fact, this is the definition of <code>entt::entity</code>:</p>
<div class="fragment"><div class="line">ENTT_ENTITY_TYPE(entity, std::uint32_t)</div></div><!-- fragment --><p>The use of this macro is highly recommended, so as not to run into problems if the requirements for the identifiers should change in the future.</p>
<h2><a class="anchor" id="autotoc_md54"></a>
Warning C4307: integral constant overflow</h2>
<p>According to <a href="https://github.com/skypjack/entt/issues/121">this</a> issue, using a hashed string under VS could generate a warning.<br />
First of all, I want to reassure you: it's expected and harmless. However, it can be annoying.</p>
<p>To suppress it and if you don't want to suppress all the other warnings as well, here is a workaround in the form of a macro:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><span class="preprocessor"> #define HS(str)\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(push))\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(disable:4307))\</span></div><div class="line"><span class="preprocessor"> entt::hashed_string{str}\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(pop))</span></div><div class="line"><span class="preprocessor">#else</span></div><div class="line"><span class="preprocessor"> #define HS(str) entt::hashed_string{str}</span></div><div class="line"><span class="preprocessor">#endif</span></div></div><!-- fragment --><p>With an example of use included:</p>
<div class="fragment"><div class="line">constexpr <span class="keyword">auto</span> identifier = HS(<span class="stringliteral">&quot;my/resource/identifier&quot;</span>);</div></div><!-- fragment --><p>Thanks to <a href="https://github.com/huwpascoe">huwpascoe</a> for the courtesy.</p>
<h2><a class="anchor" id="autotoc_md55"></a>
Warning C4003: the min, the max and the macro</h2>
<p>On Windows, a header file defines two macros <code>min</code> and <code>max</code> which may result in conflicts with their counterparts in the standard library and therefore in errors during compilation.</p>
<p>It's a pretty big problem but fortunately it's not a problem of <code>EnTT</code> and there is a fairly simple solution to it.<br />
It consists in defining the <code>NOMINMAX</code> macro before to include any other header so as to get rid of the extra definitions:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#define NOMINMAX</span></div></div><!-- fragment --><p>Please refer to <a href="https://github.com/skypjack/entt/issues/96">this</a> issue for more details. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+17 -9
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -63,13 +63,13 @@ $(function() {
<div class="title">Frequently Asked Questions </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md50"></a>
<div class="textblock"><h1><a class="anchor" id="autotoc_md51"></a>
Introduction</h1>
<p>This is a constantly updated section where I'll try to put the answers to the most frequently asked questions.<br />
If you don't find your answer here, there are two cases: nobody has done it yet or this section needs updating. In both cases, try to <a href="https://github.com/skypjack/entt/issues/new">open a new issue</a> or enter the <a href="https://gitter.im/skypjack/entt">gitter channel</a> and ask your question. Probably someone already has an answer for you and we can then integrate this part of the documentation.</p>
<h1><a class="anchor" id="autotoc_md51"></a>
<h1><a class="anchor" id="autotoc_md52"></a>
FAQ</h1>
<h2><a class="anchor" id="autotoc_md52"></a>
<h2><a class="anchor" id="autotoc_md53"></a>
Why is my debug build on Windows so slow?</h2>
<p><code>EnTT</code> is an experimental project that I also use to keep me up-to-date with the latest revision of the language and the standard library. For this reason, it's likely that some classes you're working with are using standard containers under the hood.<br />
Unfortunately, it's known that the standard containers aren't particularly performing in debugging (the reasons for this go beyond this document) and are even less so on Windows apparently. Fortunately this can also be mitigated a lot, achieving good results in many cases.</p>
@@ -80,14 +80,14 @@ Why is my debug build on Windows so slow?</h2>
</ul>
<p>Moreover, the macro <code>ENTT_DISABLE_ASSERT</code> should be defined to disable internal checks made by <code>EnTT</code> in debug. These are asserts introduced to help the users, but require to access to the underlying containers and therefore risk ruining the performance in some cases.</p>
<p>With these changes, debug performance should increase enough for most cases. If you want something more, you can can also switch to an optimization level <code>O0</code> or preferably <code>O1</code>.</p>
<h2><a class="anchor" id="autotoc_md53"></a>
<h2><a class="anchor" id="autotoc_md54"></a>
How can I represent hierarchies with my components?</h2>
<p>This is one of the first questions that anyone makes when starting to work with the entity-component-system architectural pattern.<br />
There are several approaches to the problem and what’s the best one depends mainly on the real problem one is facing. In all cases, how to do it doesn't strictly depend on the library in use, but the latter can certainly allow or not different techniques depending on how the data are laid out.</p>
<p>I tried to describe some of the techniques that fit well with the model of <code>EnTT</code>. <a href="https://skypjack.github.io/2019-06-25-ecs-baf-part-4/">Here</a> is the first post of a series that tries to explore the problem. More will probably come in future.</p>
<p>Long story short, you can always define a tree where the nodes expose implicit lists of children by means of the following type:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>relationship {</div><div class="line"> std::size_t children{};</div><div class="line"> entt::entity first{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity prev{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity next{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> entt::entity parent{<a class="code" href="namespaceentt.html#a588326af8f6f902a6c0b57d3f9fc6c17">entt::null</a>};</div><div class="line"> <span class="comment">// ... other data members ...</span></div><div class="line">};</div></div><!-- fragment --><p>The sort functionalities of <code>EnTT</code>, the groups and all the other features of the library can help then to get the best in terms of data locality and therefore performance from this component.</p>
<h2><a class="anchor" id="autotoc_md54"></a>
<h2><a class="anchor" id="autotoc_md55"></a>
Custom entity identifiers: yay or nay?</h2>
<p>Custom entity identifiers are definitely a good idea in two cases at least:</p>
<ul>
@@ -102,19 +102,27 @@ Custom entity identifiers: yay or nay?</h2>
</ul>
<p>In fact, this is the definition of <code>entt::entity</code>:</p>
<div class="fragment"><div class="line">ENTT_OPAQUE_TYPE(entity, std::uint32_t)</div></div><!-- fragment --><p>The use of this macro is highly recommended, so as not to run into problems if the requirements for the identifiers should change in the future.</p>
<h2><a class="anchor" id="autotoc_md55"></a>
<h2><a class="anchor" id="autotoc_md56"></a>
Warning C4307: integral constant overflow</h2>
<p>According to <a href="https://github.com/skypjack/entt/issues/121">this</a> issue, using a hashed string under VS could generate a warning.<br />
First of all, I want to reassure you: it's expected and harmless. However, it can be annoying.</p>
<p>To suppress it and if you don't want to suppress all the other warnings as well, here is a workaround in the form of a macro:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><span class="preprocessor"> #define HS(str)\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(push))\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(disable:4307))\</span></div><div class="line"><span class="preprocessor"> entt::hashed_string{str}\</span></div><div class="line"><span class="preprocessor"> __pragma(warning(pop))</span></div><div class="line"><span class="preprocessor">#else</span></div><div class="line"><span class="preprocessor"> #define HS(str) entt::hashed_string{str}</span></div><div class="line"><span class="preprocessor">#endif</span></div></div><!-- fragment --><p>With an example of use included:</p>
<div class="fragment"><div class="line">constexpr <span class="keyword">auto</span> identifier = HS(<span class="stringliteral">&quot;my/resource/identifier&quot;</span>);</div></div><!-- fragment --><p>Thanks to <a href="https://github.com/huwpascoe">huwpascoe</a> for the courtesy.</p>
<h2><a class="anchor" id="autotoc_md56"></a>
<h2><a class="anchor" id="autotoc_md57"></a>
Warning C4003: the min, the max and the macro</h2>
<p>On Windows, a header file defines two macros <code>min</code> and <code>max</code> which may result in conflicts with their counterparts in the standard library and therefore in errors during compilation.</p>
<p>It's a pretty big problem but fortunately it's not a problem of <code>EnTT</code> and there is a fairly simple solution to it.<br />
It consists in defining the <code>NOMINMAX</code> macro before to include any other header so as to get rid of the extra definitions:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#define NOMINMAX</span></div></div><!-- fragment --><p>Please refer to <a href="https://github.com/skypjack/entt/issues/96">this</a> issue for more details. </p>
<div class="fragment"><div class="line"><span class="preprocessor">#define NOMINMAX</span></div></div><!-- fragment --><p>Please refer to <a href="https://github.com/skypjack/entt/issues/96">this</a> issue for more details.</p>
<h2><a class="anchor" id="autotoc_md58"></a>
The standard and the non-copyable types</h2>
<p><code>EnTT</code> uses internally the trait <code>std::is_copy_constructible_v</code> to check if a component is actually copyable. This trait doesn't check if an object can actually be copied but only verifies if there is a copy constructor available.<br />
This can lead to surprising results due to some idiosyncrasies of the standard mainly related to the need to guarantee backward compatibility.</p>
<p>For example, <code>std::vector</code> defines a copy constructor no matter if its value type is copyable or not. As a result, <code>std::is_copy_constructible_v</code> is true for the following specialization:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>type {</div><div class="line"> std::vector&lt;std::unique_ptr&lt;action&gt;&gt; vec;</div><div class="line">};</div></div><!-- fragment --><p>When trying to assign an instance of this type to an entity in the ECS part, this may trigger a compilation error because we cannot really make a copy of it.<br />
As a workaround, users can mark the type explicitly as non-copyable:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>type {</div><div class="line"> type(<span class="keyword">const</span> type &amp;) = <span class="keyword">delete</span>;</div><div class="line"> type &amp; operator=(<span class="keyword">const</span> type &amp;) = <span class="keyword">delete</span>;</div><div class="line"></div><div class="line"> std::vector&lt;std::unique_ptr&lt;action&gt;&gt; vec;</div><div class="line">};</div></div><!-- fragment --><p>Unfortunately, this will also disable aggregate initialization. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-116
View File
@@ -1,116 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Push EnTT across boundaries</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Push EnTT across boundaries </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md57"></a>
Introduction</h1>
<p><code>EnTT</code> has historically had a limit when used across boundaries on Windows in general and on GNU/Linux when default visibility was set to <em>hidden</em>. The limitation is due mainly to a custom utility used to assign unique, sequential identifiers to different types. Unfortunately, this tool is used by several core classes (the <code>registry</code> among the others) that are thus almost unusable across boundaries.<br />
The reasons for that are beyond the purposes of this document. However, the good news is that <code>EnTT</code> also offers now a way to overcome this limit and to push things across boundaries without problems when needed.</p>
<h1><a class="anchor" id="autotoc_md58"></a>
Named types and traits class</h1>
<p>To allow a type to work properly across boundaries when used by a class that requires to assign unique identifiers to types, users must specialize a class template to literally give a compile-time name to the type itself.<br />
The name of the class template is <code>name_type_traits</code> and the specialization must be such that it exposes a static constexpr data member named <code>value</code> having type either <code>ENTT_ID_TYPE</code> or <code><a class="el" href="classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd" title="Unsigned integer type. ">entt::hashed_string::hash_type</a></code>. Its value is the user defined unique identifier assigned to the specific type.<br />
Identifiers are not to be sequentially generated in this case.</p>
<p>As an example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_type { <span class="comment">/* ... */</span> };</div><div class="line"></div><div class="line"><span class="keyword">template</span>&lt;&gt;</div><div class="line"><span class="keyword">struct </span><a class="code" href="structentt_1_1named__type__traits.html">entt::named_type_traits</a>&lt;my_type&gt; {</div><div class="line"> <span class="keyword">static</span> constexpr <span class="keyword">auto</span> value = <span class="stringliteral">&quot;my_type&quot;</span>_hs;</div><div class="line">};</div></div><!-- fragment --><p>Because of the rules of the language, the specialization must reside in the global namespace or in the <code>entt</code> namespace. There is no way to change this rule unfortunately, because it doesn't depend on the library itself.</p>
<p>The good aspect of this approach is that it's not intrusive at all. The other way around was in fact forcing users to inherit all their classes from a common base. Something to avoid, at least from my point of view.<br />
However, despite the fact that it's not intrusive, it would be great if it was also easier to use and a bit less error-prone. This is why a bunch of macros exist to ease defining named types.</p>
<h2><a class="anchor" id="autotoc_md59"></a>
Do not mix types</h2>
<p>Someone might think that this trick is valid only for the types to push across boundaries. This isn't how things work. In fact, the problem is more complex than that.<br />
As a rule of thumb, users should never mix named and non-named types. Whenever a type is given a name, all the types must be given a name. As an example, consider the <code>registry</code> class template: in case it is pushed across boundaries, all the types of components should be assigned a name to avoid subtle bugs.</p>
<p>Indeed, this constraint can be relaxed in many cases. However, it is difficult to define a general rule to follow that is not the most stringent, unless users know exactly what they are doing. Therefore, I won't elaborate on giving further details on the topic.</p>
<h1><a class="anchor" id="autotoc_md60"></a>
Macros, macros everywhere</h1>
<p>The library comes with a set of predefined macros to use to declare named types or export already existing ones. In particular:</p>
<ul>
<li><code>ENTT_NAMED_TYPE</code> can be used to assign a name to already existing types. This macro must be used in the global namespace even when the types to be named are not.</li>
</ul>
<div class="fragment"><div class="line">ENTT_NAMED_TYPE(my_type)</div><div class="line">ENTT_NAMED_TYPE(ns::another_type)</div></div><!-- fragment --><ul>
<li><code>ENTT_NAMED_STRUCT</code> can be used to define and export a struct at the same time. It accepts also an optional namespace in which to define the given type. This macro must be used in the global namespace.</li>
</ul>
<div class="fragment"><div class="line">ENTT_NAMED_STRUCT(my_type, { <span class="comment">/* struct definition */</span>})</div><div class="line">ENTT_NAMED_STRUCT(ns, another_type, { <span class="comment">/* struct definition */</span>})</div></div><!-- fragment --><ul>
<li><code>ENTT_NAMED_CLASS</code> can be used to define and export a class at the same time. It accepts also an optional namespace in which to define the given type. This macro must be used in the global namespace.</li>
</ul>
<div class="fragment"><div class="line">ENTT_NAMED_CLASS(my_type, { <span class="comment">/* class definition */</span>})</div><div class="line">ENTT_NAMED_CLASS(ns, another_type, { <span class="comment">/* class definition */</span>})</div></div><!-- fragment --><p>Nested namespaces are supported out of the box as well in all cases. As an example:</p>
<div class="fragment"><div class="line">ENTT_NAMED_STRUCT(nested::ns, my_type, { <span class="comment">/* struct definition */</span>})</div></div><!-- fragment --><p>These macros can be used to avoid specializing the <code>named_type_traits</code> class template. In all cases, the name of the class is used also as a seed to generate the compile-time unique identifier.</p>
<h2><a class="anchor" id="autotoc_md61"></a>
Conflicts</h2>
<p>When using macros, unique identifiers are 32/64 bit integers generated by hashing strings during compilation. Therefore, conflicts are rare but still possible. In case of conflicts, everything simply will get broken at runtime and the strangest things will probably take place.<br />
Unfortunately, there is no safe way to prevent it. If this happens, it will be enough to give a different value to one of the conflicting types to solve the problem. To do this, users can either assign a different name to the class or directly define a specialization for the <code>named_type_traits</code> class template.</p>
<h1><a class="anchor" id="autotoc_md62"></a>
Allocations: the dark side of the force</h1>
<p>As long as <code>EnTT</code> won't support custom allocators, another problem with allocations will remain alive instead. This is in fact easily solved, or at least it is if one knows it.</p>
<p>To allow users to add types dynamically, the library makes extensive use of type erasure techniques and dynamic allocations for pools (whether they are for components, events or anything else). The problem occurs when, for example, a registry is created on one side of a boundary and a pool is dynamically created on the other side. In the best case, everything will crash at the exit, while at worst it will do so at runtime.<br />
To avoid problems, the pools must be generated from the same side of the boundary where the object that owns them is also created. As an example, when the registry is created in the main executable and used across boundaries for a given type of component, the pool for that type must be created before passing around the registry itself. To do this is fortunately quite easy, since it is sufficient to invoke any of the methods that involve the given type (continuing the example with the registry, a call to <code>reserve</code> or <code>size</code> is more than enough).</p>
<p>Maybe one day some dedicated methods will be added that do nothing but create a pool for a given type. Until now it has been preferred to keep the API cleaner as they are not strictly necessary. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+18 -7
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -63,11 +63,11 @@ $(function() {
<div class="title">Push EnTT across boundaries </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md58"></a>
<div class="textblock"><h1><a class="anchor" id="autotoc_md60"></a>
Introduction</h1>
<p><code>EnTT</code> has historically had a limit when used across boundaries on Windows in general and on GNU/Linux when default visibility was set to <em>hidden</em>. The limitation is due mainly to a custom utility used to assign unique, sequential identifiers to different types. Unfortunately, this tool is used by several core classes (the <code>registry</code> among the others) that are thus almost unusable across boundaries.<br />
The reasons for that are beyond the purposes of this document. However, the good news is that <code>EnTT</code> also offers now a way to overcome this limit and to push things across boundaries without problems when needed.</p>
<h1><a class="anchor" id="autotoc_md59"></a>
<h1><a class="anchor" id="autotoc_md61"></a>
Named types and traits class</h1>
<p>To allow a type to work properly across boundaries when used by a class that requires to assign unique identifiers to types, users must specialize a class template to literally give a compile-time name to the type itself.<br />
The name of the class template is <code>name_type_traits</code> and the specialization must be such that it exposes a static constexpr data member named <code>value</code> having type either <code>ENTT_ID_TYPE</code> or <code><a class="el" href="classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd" title="Unsigned integer type. ">entt::hashed_string::hash_type</a></code>. Its value is the user defined unique identifier assigned to the specific type.<br />
@@ -76,12 +76,12 @@ Named types and traits class</h1>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_type { <span class="comment">/* ... */</span> };</div><div class="line"></div><div class="line"><span class="keyword">template</span>&lt;&gt;</div><div class="line"><span class="keyword">struct </span><a class="code" href="structentt_1_1named__type__traits.html">entt::named_type_traits</a>&lt;my_type&gt; {</div><div class="line"> <span class="keyword">static</span> constexpr <span class="keyword">auto</span> value = <span class="stringliteral">&quot;my_type&quot;</span>_hs;</div><div class="line">};</div></div><!-- fragment --><p>Because of the rules of the language, the specialization must reside in the global namespace or in the <code>entt</code> namespace. There is no way to change this rule unfortunately, because it doesn't depend on the library itself.</p>
<p>The good aspect of this approach is that it's not intrusive at all. The other way around was in fact forcing users to inherit all their classes from a common base. Something to avoid, at least from my point of view.<br />
However, despite the fact that it's not intrusive, it would be great if it was also easier to use and a bit less error-prone. This is why a bunch of macros exist to ease defining named types.</p>
<h2><a class="anchor" id="autotoc_md60"></a>
<h2><a class="anchor" id="autotoc_md62"></a>
Do not mix types</h2>
<p>Someone might think that this trick is valid only for the types to push across boundaries. This isn't how things work. In fact, the problem is more complex than that.<br />
As a rule of thumb, users should never mix named and non-named types. Whenever a type is given a name, all the types must be given a name. As an example, consider the <code>registry</code> class template: in case it is pushed across boundaries, all the types of components should be assigned a name to avoid subtle bugs.</p>
<p>Indeed, this constraint can be relaxed in many cases. However, it is difficult to define a general rule to follow that is not the most stringent, unless users know exactly what they are doing. Therefore, I won't elaborate on giving further details on the topic.</p>
<h1><a class="anchor" id="autotoc_md61"></a>
<h1><a class="anchor" id="autotoc_md63"></a>
Macros, macros everywhere</h1>
<p>The library comes with a set of predefined macros to use to declare named types or export already existing ones. In particular:</p>
<ul>
@@ -95,11 +95,22 @@ Macros, macros everywhere</h1>
</ul>
<div class="fragment"><div class="line">ENTT_NAMED_CLASS(my_type, { <span class="comment">/* class definition */</span>})</div><div class="line">ENTT_NAMED_CLASS(ns, another_type, { <span class="comment">/* class definition */</span>})</div></div><!-- fragment --><p>Nested namespaces are supported out of the box as well in all cases. As an example:</p>
<div class="fragment"><div class="line">ENTT_NAMED_STRUCT(nested::ns, my_type, { <span class="comment">/* struct definition */</span>})</div></div><!-- fragment --><p>These macros can be used to avoid specializing the <code>named_type_traits</code> class template. In all cases, the name of the class is used also as a seed to generate the compile-time unique identifier.</p>
<h2><a class="anchor" id="autotoc_md62"></a>
<h2><a class="anchor" id="autotoc_md64"></a>
Conflicts</h2>
<p>When using macros, unique identifiers are 32/64 bit integers generated by hashing strings during compilation. Therefore, conflicts are rare but still possible. In case of conflicts, everything simply will get broken at runtime and the strangest things will probably take place.<br />
Unfortunately, there is no safe way to prevent it. If this happens, it will be enough to give a different value to one of the conflicting types to solve the problem. To do this, users can either assign a different name to the class or directly define a specialization for the <code>named_type_traits</code> class template.</p>
<h1><a class="anchor" id="autotoc_md63"></a>
<h1><a class="anchor" id="autotoc_md65"></a>
Runtime reflection system</h1>
<p>The runtime reflection system deserves a special mention when it comes to using it across boundaries.<br />
As in all other cases, it's necessary to give a name to the types. However, this time this isn't enough to get the job done.</p>
<p>The runtime reflection system is linked to a static context to which the visible components are linked. A component is visible when it's given a name, so the named components are implicitly visible.<br />
Different contexts don't relate to each other. Therefore, to allow the use of named types across boundaries, a context must also be shared.</p>
<p>Sharing a context is straightforward. First of all, the local one must be acquired:</p>
<div class="fragment"><div class="line">entt::meta_ctx ctx{};</div></div><!-- fragment --><p>Then, it must be pushed across boundaries and the receiving space must set it as its global context, thus releasing the local one that remains available but is no longer referred to by the runtime reflection system:</p>
<div class="fragment"><div class="line">entt::meta_ctx::bind(ctx);</div></div><!-- fragment --><p>From now on, both spaces will refer to the same context and on it will be associated the new visible meta types, no matter <em>where</em> they are created.</p>
<p>A context can also be reset and then associated again locally as:</p>
<div class="fragment"><div class="line">entt::meta_ctx::bind{entt::meta_ctx{});</div></div><!-- fragment --><p>This is allowed because local and global contexts are separated. Therefore, it's always possible to make the local context the current one again.</p>
<h1><a class="anchor" id="autotoc_md66"></a>
Allocations: the dark side of the force</h1>
<p>As long as <code>EnTT</code> won't support custom allocators, another problem with allocations will remain alive instead. This is in fact easily solved, or at least it is if one knows it.</p>
<p>To allow users to add types dynamically, the library makes extensive use of type erasure techniques and dynamic allocations for pools (whether they are for components, events or anything else). The problem occurs when, for example, a registry is created on one side of a boundary and a pool is dynamically created on the other side. In the best case, everything will crash at the exit, while at worst it will do so at runtime.<br />
-122
View File
@@ -1,122 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: EnTT in Action</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">EnTT in Action </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><code>EnTT</code> is widely used in private and commercial applications. I cannot even mention most of them because of some signatures I put on some documents time ago. Fortunately, there are also people who took the time to implement open source projects based on <code>EnTT</code> and did not hold back when it came to documenting them.</p>
<p>Below an incomplete list of games, applications and articles that can be used as a reference. Where I put the word <em>apparently</em> means that the use of <code>EnTT</code> is documented but the authors didn't make explicit announcements or contacted me directly.</p>
<p>I hope this list can grow much more in the future:</p>
<ul>
<li>Games:<ul>
<li><a href="https://minecraft.net/en-us/attribution/">Minecraft</a> by <a href="https://mojang.com/">Mojang</a>: of course, <b>that</b> Minecraft, see the open source attributions page for more details.</li>
<li><a href="https://play.google.com/store/apps/details?id=com.gamee.facesmash">Face Smash</a>: a game to play with your face.</li>
<li><a href="https://github.com/Kerndog73/EnTT-Pacman">EnTT Pacman</a>: an example of how to make Pacman with <code>EnTT</code>.</li>
<li><a href="https://github.com/carlfindahl/wacman">Wacman</a>: a pacman clone with OpenGL.</li>
<li><a href="https://github.com/kerndog73/Classic-Tower-Defence">Classic Tower Defence</a>: a tiny little tower defence game featuring a homemade font. <a href="https://indi-kernick.itch.io/classic-tower-defence">Check it out</a>.</li>
<li><a href="https://github.com/Kerndog73/The-Machine">The Machine</a>: a box pushing puzzler with logic gates and other cool stuff. <a href="https://indi-kernick.itch.io/the-machine-web-version">Check it out</a>.</li>
<li><a href="https://github.com/reworks/EnttPong">EnttPong</a>: an example of how to make Pong with <code>EnTT</code>.</li>
<li><a href="https://github.com/gale93/randballs">Randballs</a>: simple <code>SFML</code> and <code>EnTT</code> playground.</li>
<li><a href="https://github.com/Daivuk/tddod">EnTT Tower Defense</a>: a data oriented tower defense example.</li>
<li><a href="https://github.com/vblanco20-1/entt-breakout">EnTT Breakout</a>: simple example of a breakout game, using <code>SDL</code> and <code>EnTT</code>.</li>
<li><a href="https://github.com/MasonRG/ArcadePuzzleGame">Arcade puzzle game with EnTT</a>: arcade puzzle game made in C++ using the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
<li><a href="https://github.com/MasonRG/SnakeGame">Snake with EnTT</a>: simple snake game made in C++ with the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
</ul>
</li>
<li>Engines/Frameworks:<ul>
<li><a href="https://teamwisp.github.io/credits/">Apparently</a> <a href="https://teamwisp.github.io/product/">Wisp</a> by <a href="https://teamwisp.github.io/">Team Wisp</a>: an advanced real-time ray tracing renderer built for the demands of video game artists.</li>
<li><a href="https://github.com/DomRe/starlight">starlight</a>: game programming framework using <code>Allegro</code>, <code>Lua</code> and modern C++.</li>
<li><a href="https://github.com/JosiahWI/qub3d-libdeps">Apparently</a> <a href="https://qub3d.org/">Qub3d</a>: because blocks should be open source.</li>
<li><a href="https://github.com/Milerius/shiva">shiva</a>: modern C++ engine with modularity.</li>
</ul>
</li>
<li>Emulators:<ul>
<li><a href="https://github.com/novuscore/NovusCore">NovusCore</a>: A modern take on World of Warcraft emulation.</li>
</ul>
</li>
<li>Articles and blog posts<ul>
<li><a href="https://skypjack.github.io/tags/#entt">Some posts</a> on my personal <a href="https://skypjack.github.io/">blog</a> are about <code>EnTT</code>, for those who want to know <b>more</b> on this project.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/06/11/post-ecs-battle-huge.html">Space Battle: Huge edition</a>: huge space battle built entirely from scratch.</li>
<li><a href="https://github.com/vblanco20-1/ECS_SpaceBattle">Space Battle</a>: huge space battle built on <code>UE4</code>.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/03/25/post-ue4-ecs-battle.html">Experimenting with ECS in UE4</a>: interesting article about <code>UE4</code> and <code>EnTT</code>.</li>
<li><a href="https://forums.unrealengine.com/development-discussion/c-gameplay-programming/1449913-implementing-ecs-architecture-in-ue4-giant-space-battle">Implementing ECS architecture in UE4</a>: giant space battle.</li>
<li><a href="https://leinnan.github.io/blog/conan-adventuressfml-and-entt-in-c.html">Conan Adventures (SFML and EnTT in C++)</a>: create projects in modern C++ using <code>SFML</code>, <code>EnTT</code>, <code>Conan</code> and <code>CMake</code>.</li>
</ul>
</li>
<li>Any Other Business:<ul>
<li>The <a href="https://developers.arcgis.com/arcgis-runtime/">ArcGIS Runtime SDKs</a> by <a href="https://www.esri.com/">Esri</a>: they use <code>EnTT</code> for the internal ECS and the cross platform C++ rendering engine. The SDKs are utilized by a lot of enterprise custom apps, as well as by Esri for its own public applications such as <a href="https://play.google.com/store/apps/details?id=com.esri.explorer">Explorer</a>, <a href="https://play.google.com/store/apps/details?id=com.esri.arcgis.collector">Collector</a> and <a href="https://play.google.com/store/apps/details?id=com.esri.navigator">Navigator</a>.</li>
<li><a href="https://www.linkedin.com/in/skypjack/">Apparently</a> <a href="https://www.nio.io/">NIO</a>: there was a collaboration to make some changes to <code>EnTT</code>, at the time used for internal projects.</li>
<li><a href="https://github.com/mhaemmerle/MatchOneEntt">MatchOneEntt</a>: port of <a href="https://github.com/sschmid/Match-One">Match One</a> for <code>Entitas-CSharp</code>.</li>
<li>GitHub contains also <a href="https://github.com/search?o=desc&amp;q=%22skypjack%2Fentt%22&amp;s=indexed&amp;type=Code">many other examples</a> of use of <code>EnTT</code> from which to take inspiration if interested.</li>
</ul>
</li>
</ul>
<p>If you know of other resources out there that are about <code>EnTT</code>, feel free to open an issue or a PR and I'll be glad to add them to this page. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
-121
View File
@@ -1,121 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: EnTT in Action</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">EnTT in Action </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><code>EnTT</code> is widely used in private and commercial applications. I cannot even mention most of them because of some signatures I put on some documents time ago. Fortunately, there are also people who took the time to implement open source projects based on <code>EnTT</code> and did not hold back when it came to documenting them.</p>
<p>Below an incomplete list of games, applications and articles that can be used as a reference. Where I put the word <em>apparently</em> means that the use of <code>EnTT</code> is documented but the authors didn't make explicit announcements or contacted me directly.</p>
<p>I hope this list can grow much more in the future:</p>
<ul>
<li>Games:<ul>
<li><a href="https://minecraft.net/en-us/attribution/">Minecraft</a> by <a href="https://mojang.com/">Mojang</a>: of course, <b>that</b> Minecraft, see the open source attributions page for more details.</li>
<li><a href="https://play.google.com/store/apps/details?id=com.gamee.facesmash">Face Smash</a>: a game to play with your face.</li>
<li><a href="https://github.com/Kerndog73/EnTT-Pacman">EnTT Pacman</a>: an example of how to make Pacman with <code>EnTT</code>.</li>
<li><a href="https://github.com/carlfindahl/wacman">Wacman</a>: a pacman clone with OpenGL.</li>
<li><a href="https://github.com/kerndog73/Classic-Tower-Defence">Classic Tower Defence</a>: a tiny little tower defence game featuring a homemade font. <a href="https://indi-kernick.itch.io/classic-tower-defence">Check it out</a>.</li>
<li><a href="https://github.com/Kerndog73/The-Machine">The Machine</a>: a box pushing puzzler with logic gates and other cool stuff. <a href="https://indi-kernick.itch.io/the-machine-web-version">Check it out</a>.</li>
<li><a href="https://github.com/reworks/EnttPong">EnttPong</a>: an example of how to make Pong with <code>EnTT</code>.</li>
<li><a href="https://github.com/gale93/randballs">Randballs</a>: simple <code>SFML</code> and <code>EnTT</code> playground.</li>
<li><a href="https://github.com/Daivuk/tddod">EnTT Tower Defense</a>: a data oriented tower defense example.</li>
<li><a href="https://github.com/vblanco20-1/entt-breakout">EnTT Breakout</a>: simple example of a breakout game, using <code>SDL</code> and <code>EnTT</code>.</li>
<li><a href="https://github.com/MasonRG/ArcadePuzzleGame">Arcade puzzle game with EnTT</a>: arcade puzzle game made in C++ using the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
<li><a href="https://github.com/MasonRG/SnakeGame">Snake with EnTT</a>: simple snake game made in C++ with the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
</ul>
</li>
<li>Engines and the like:<ul>
<li><a href="https://teamwisp.github.io/credits/">Apparently</a> <a href="https://teamwisp.github.io/product/">Wisp</a> by <a href="https://teamwisp.github.io/">Team Wisp</a>: an advanced real-time ray tracing renderer built for the demands of video game artists.</li>
<li><a href="https://github.com/DomRe/starlight">starlight</a>: game programming framework using <code>Allegro</code>, <code>Lua</code> and modern C++.</li>
<li><a href="https://github.com/JosiahWI/qub3d-libdeps">Apparently</a> <a href="https://qub3d.org/">Qub3d</a>: because blocks should be open source.</li>
<li><a href="https://github.com/Milerius/shiva">shiva</a>: modern C++ engine with modularity.</li>
<li><a href="https://github.com/novuscore/NovusCore">NovusCore</a>: A modern take on World of Warcraft emulation.</li>
<li><a href="https://github.com/Green-Sky/imgui_entt_entity_editor">ImGui/EnTT editor</a>: A drop-in, single-file entity editor for <code>EnTT</code> that uses <code>ImGui</code> as graphical backend (with <a href="https://github.com/Green-Sky/imgui_entt_entity_editor_demo">demo code</a>).</li>
</ul>
</li>
<li>Articles and blog posts<ul>
<li><a href="https://skypjack.github.io/tags/#entt">Some posts</a> on my personal <a href="https://skypjack.github.io/">blog</a> are about <code>EnTT</code>, for those who want to know <b>more</b> on this project.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/06/11/post-ecs-battle-huge.html">Space Battle: Huge edition</a>: huge space battle built entirely from scratch.</li>
<li><a href="https://github.com/vblanco20-1/ECS_SpaceBattle">Space Battle</a>: huge space battle built on <code>UE4</code>.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/03/25/post-ue4-ecs-battle.html">Experimenting with ECS in UE4</a>: interesting article about <code>UE4</code> and <code>EnTT</code>.</li>
<li><a href="https://forums.unrealengine.com/development-discussion/c-gameplay-programming/1449913-implementing-ecs-architecture-in-ue4-giant-space-battle">Implementing ECS architecture in UE4</a>: giant space battle.</li>
<li><a href="https://leinnan.github.io/blog/conan-adventuressfml-and-entt-in-c.html">Conan Adventures (SFML and EnTT in C++)</a>: create projects in modern C++ using <code>SFML</code>, <code>EnTT</code>, <code>Conan</code> and <code>CMake</code>.</li>
</ul>
</li>
<li>Any Other Business:<ul>
<li>The <a href="https://developers.arcgis.com/arcgis-runtime/">ArcGIS Runtime SDKs</a> by <a href="https://www.esri.com/">Esri</a>: they use <code>EnTT</code> for the internal ECS and the cross platform C++ rendering engine. The SDKs are utilized by a lot of enterprise custom apps, as well as by Esri for its own public applications such as <a href="https://play.google.com/store/apps/details?id=com.esri.explorer">Explorer</a>, <a href="https://play.google.com/store/apps/details?id=com.esri.arcgis.collector">Collector</a> and <a href="https://play.google.com/store/apps/details?id=com.esri.navigator">Navigator</a>.</li>
<li><a href="https://www.linkedin.com/in/skypjack/">Apparently</a> <a href="https://www.nio.io/">NIO</a>: there was a collaboration to make some changes to <code>EnTT</code>, at the time used for internal projects.</li>
<li><a href="https://www.linkedin.com/jobs/view/architekt-c%2B%2B-at-tieto-1219512333/">Apparently</a> <a href="https://www.tieto.com/">Tieto</a>: they published a job post where <code>EnTT</code> was listed on their software stack.</li>
<li><a href="https://github.com/mhaemmerle/MatchOneEntt">MatchOneEntt</a>: port of <a href="https://github.com/sschmid/Match-One">Match One</a> for <code>Entitas-CSharp</code>.</li>
<li>GitHub contains also <a href="https://github.com/search?o=desc&amp;q=%22skypjack%2Fentt%22&amp;s=indexed&amp;type=Code">many other examples</a> of use of <code>EnTT</code> from which to take inspiration if interested.</li>
</ul>
</li>
</ul>
<p>If you know of other resources out there that are about <code>EnTT</code>, feel free to open an issue or a PR and I'll be glad to add them to this page. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
-84
View File
@@ -1,84 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: service locator</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: service locator </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md66"></a>
Introduction</h1>
<p>Usually service locators are tightly bound to the services they expose and it's hard to define a general purpose solution. This template based implementation tries to fill the gap and to get rid of the burden of defining a different specific locator for each application.<br />
This class is tiny, partially unsafe and thus risky to use. Moreover it doesn't fit probably most of the scenarios in which a service locator is required. Look at it as a small tool that can sometimes be useful if users know how to handle it.</p>
<h1><a class="anchor" id="autotoc_md67"></a>
Service locator</h1>
<p>The API is straightforward. The basic idea is that services are implemented by means of interfaces and rely on polymorphism.<br />
The locator is instantiated with the base type of the service if any and a concrete implementation is provided along with all the parameters required to initialize it. As an example:</p>
<div class="fragment"><div class="line"><span class="comment">// the service has no base type, a locator is used to treat it as a kind of singleton</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f">entt::service_locator&lt;my_service&gt;::set</a>(params...);</div><div class="line"></div><div class="line"><span class="comment">// sets up an opaque service</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;audio_interface&gt;::set</a>&lt;audio_implementation&gt;(params...);</div><div class="line"></div><div class="line"><span class="comment">// resets (destroys) the service</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8">entt::service_locator&lt;audio_interface&gt;::reset</a>();</div></div><!-- fragment --><p>The locator can also be queried to know if an active service is currently set and to retrieve it if necessary (either as a pointer or as a reference):</p>
<div class="fragment"><div class="line"><span class="comment">// no service currently set</span></div><div class="line"><span class="keyword">auto</span> empty = <a class="code" href="structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250">entt::service_locator&lt;audio_interface&gt;::empty</a>();</div><div class="line"></div><div class="line"><span class="comment">// gets a (possibly empty) shared pointer to the service ...</span></div><div class="line">std::shared_ptr&lt;audio_interface&gt; ptr = <a class="code" href="structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385">entt::service_locator&lt;audio_interface&gt;::get</a>();</div><div class="line"></div><div class="line"><span class="comment">// ... or a reference, but it&#39;s undefined behaviour if the service isn&#39;t set yet</span></div><div class="line">audio_interface &amp;ref = <a class="code" href="structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e">entt::service_locator&lt;audio_interface&gt;::ref</a>();</div></div><!-- fragment --><p>A common use is to wrap the different locators in a container class, creating aliases for the various services:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>locator {</div><div class="line"> <span class="keyword">using</span> camera = <a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;camera_interface&gt;</a>;</div><div class="line"> <span class="keyword">using</span> audio = <a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;audio_interface&gt;</a>;</div><div class="line"> <span class="comment">// ...</span></div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="keywordtype">void</span> init() {</div><div class="line"> locator::camera::set&lt;camera_null&gt;();</div><div class="line"> locator::audio::set&lt;audio_implementation&gt;(params...);</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+49 -148
View File
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: reflection system</title>
<title>EnTT: EnTT in Action</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.0</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -60,161 +60,62 @@ $(function() {
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: reflection system </div> </div>
<div class="title">EnTT in Action </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md68"></a>
Introduction</h1>
<p>Reflection (or rather, its lack) is a trending topic in the C++ world and, in the specific case of <code>EnTT</code>, a tool that can unlock a lot of other features. I looked for a third-party library that met my needs on the subject, but I always came across some details that I didn't like: macros, being intrusive, too many allocations. In one word: unsatisfactory.<br />
I finally decided to write a built-in, non-intrusive and macro-free runtime reflection system for <code>EnTT</code>. Maybe I didn't do better than others or maybe yes, time will tell me, but at least I can model this tool around the library to which it belongs and not vice versa.</p>
<h1><a class="anchor" id="autotoc_md69"></a>
Names and identifiers</h1>
<p>The meta system doesn't force the user to use the tools provided by the library when it comes to working with names and identifiers. It does this by offering an API that works with opaque identifiers that may or may not be generated by means of a hashed string.<br />
This means that users can assign any type of identifier to the meta objects, as long as they are numeric. It doesn't matter if they are generated at runtime, at compile-time or with custom functions.</p>
<p>However, the examples in the following sections are all based on the <code>hashed_string</code> class as provided by this library. Therefore, where an identifier is required, it's likely that a user defined literal is used as follows:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>For what it's worth, this is likely completely equivalent to:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(42);</div></div><!-- fragment --><p>Obviously, human-readable identifiers are more convenient to use and highly recommended.</p>
<h1><a class="anchor" id="autotoc_md70"></a>
Reflection in a nutshell</h1>
<p>Reflection always starts from real types (users cannot reflect imaginary types and it would not make much sense, we wouldn't be talking about reflection anymore).<br />
To <em>reflect</em> a type, the library provides the <code>reflect</code> function:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>It accepts the type to reflect as a template parameter and an optional identifier as an argument. Identifiers are important because users can retrieve meta types at runtime by searching for them by <em>name</em>. However, there are cases in which users can be interested in adding features to a reflected type so that the reflection system can use it correctly under the hood, but they don't want to allow searching the type by <em>name</em>.<br />
In both cases, the returned value is a factory object to use to continue building the meta type.</p>
<p>A factory is such that all its member functions returns the factory itself. It can be used to extend the reflected type and add the following:</p>
<div class="textblock"><p><code>EnTT</code> is widely used in private and commercial applications. I cannot even mention most of them because of some signatures I put on some documents time ago. Fortunately, there are also people who took the time to implement open source projects based on <code>EnTT</code> and did not hold back when it came to documenting them.</p>
<p>Below an incomplete list of games, applications and articles that can be used as a reference. Where I put the word <em>apparently</em> means that the use of <code>EnTT</code> is documented but the authors didn't make explicit announcements or contacted me directly.</p>
<p>I hope this list can grow much more in the future:</p>
<ul>
<li><em>Constructors</em>. Actual constructors can be assigned to a reflected type by specifying their list of arguments. Free functions (namely, factories) can be used as well, as long as the return type is the expected one. From a client's point of view, nothing changes if a constructor is a free function or an actual constructor.<br />
Use the <code>ctor</code> member function for this purpose:</li>
<li>Games:<ul>
<li><a href="https://minecraft.net/en-us/attribution/">Minecraft</a> by <a href="https://mojang.com/">Mojang</a>: of course, <b>that</b> Minecraft, see the open source attributions page for more details.</li>
<li><a href="https://github.com/LandOfTheRair/core2">Land of the Rair</a>: the new backend of <a href="https://rair.land/">a retro-style MUD</a> for the new age.</li>
<li><a href="https://github.com/openblack/openblack">Openblack</a>: open source reimplementation of the game <em>Black &amp; White</em> (2001).</li>
<li><a href="https://play.google.com/store/apps/details?id=com.gamee.facesmash">Face Smash</a>: a game to play with your face.</li>
<li><a href="https://github.com/Kerndog73/EnTT-Pacman">EnTT Pacman</a>: an example of how to make Pacman with <code>EnTT</code>.</li>
<li><a href="https://github.com/carlfindahl/wacman">Wacman</a>: a pacman clone with OpenGL.</li>
<li><a href="https://github.com/kerndog73/Classic-Tower-Defence">Classic Tower Defence</a>: a tiny little tower defence game featuring a homemade font. <a href="https://indi-kernick.itch.io/classic-tower-defence">Check it out</a>.</li>
<li><a href="https://github.com/Kerndog73/The-Machine">The Machine</a>: a box pushing puzzler with logic gates and other cool stuff. <a href="https://indi-kernick.itch.io/the-machine-web-version">Check it out</a>.</li>
<li><a href="https://github.com/reworks/EnttPong">EnttPong</a>: an example of how to make Pong with <code>EnTT</code>.</li>
<li><a href="https://github.com/gale93/randballs">Randballs</a>: simple <code>SFML</code> and <code>EnTT</code> playground.</li>
<li><a href="https://github.com/Daivuk/tddod">EnTT Tower Defense</a>: a data oriented tower defense example.</li>
<li><a href="https://github.com/vblanco20-1/entt-breakout">EnTT Breakout</a>: simple example of a breakout game, using <code>SDL</code> and <code>EnTT</code>.</li>
<li><a href="https://github.com/MasonRG/ArcadePuzzleGame">Arcade puzzle game with EnTT</a>: arcade puzzle game made in C++ using the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
<li><a href="https://github.com/MasonRG/SnakeGame">Snake with EnTT</a>: simple snake game made in C++ with the <code>SDL2</code> and <code>EnTT</code> libraries.</li>
<li><a href="https://github.com/guillaume-haerinck/imac-tower-defense">Mirrors lasers and robots</a>: a small tower defense game based on mirror orientation.</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs).ctor&lt;int, char&gt;().ctor&lt;&amp;factory&gt;();</div></div><!-- fragment --><ul>
<li><em>Destructors</em>. Free functions can be set as destructors of reflected types. The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.<br />
Use the <code>dtor</code> member function for this purpose:</li>
</li>
<li>Engines and the like:<ul>
<li><a href="https://github.com/flingengine/FlingEngine">Fling Engine</a>: A Vulkan game engine with a focus on data oriented design.</li>
<li><a href="https://teamwisp.github.io/credits/">Apparently</a> <a href="https://teamwisp.github.io/product/">Wisp</a> by <a href="https://teamwisp.github.io/">Team Wisp</a>: an advanced real-time ray tracing renderer built for the demands of video game artists.</li>
<li><a href="https://github.com/DomRe/starlight">starlight</a>: game programming framework using <code>Allegro</code>, <code>Lua</code> and modern C++.</li>
<li><a href="https://github.com/JosiahWI/qub3d-libdeps">Apparently</a> <a href="https://qub3d.org/">Qub3d</a>: because blocks should be open source.</li>
<li><a href="https://github.com/Milerius/shiva">shiva</a>: modern C++ engine with modularity.</li>
<li><a href="https://github.com/novuscore/NovusCore">NovusCore</a>: A modern take on World of Warcraft emulation.</li>
<li><a href="https://github.com/Green-Sky/imgui_entt_entity_editor">ImGui/EnTT editor</a>: A drop-in, single-file entity editor for <code>EnTT</code> that uses <code>ImGui</code> as graphical backend (with <a href="https://github.com/Green-Sky/imgui_entt_entity_editor_demo">demo code</a>).</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs).dtor&lt;&amp;destroy&gt;();</div></div><!-- fragment --><p>A function should neither delete nor explicitly invoke the destructor of a given instance.</p>
<ul>
<li><em>Data members</em>. Both real data members of the underlying type and static and global variables, as well as constants of any kind, can be attached to a meta type. From a client's point of view, all the variables associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>data</code> member function for this purpose:</li>
</li>
<li>Articles and blog posts:<ul>
<li><a href="https://skypjack.github.io/tags/#entt">Some posts</a> on my personal <a href="https://skypjack.github.io/">blog</a> are about <code>EnTT</code>, for those who want to know <b>more</b> on this project.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/06/11/post-ecs-battle-huge.html">Space Battle: Huge edition</a>: huge space battle built entirely from scratch.</li>
<li><a href="https://github.com/vblanco20-1/ECS_SpaceBattle">Space Battle</a>: huge space battle built on <code>UE4</code>.</li>
<li><a href="http://victor.madtriangles.com/code%20experiment/2018/03/25/post-ue4-ecs-battle.html">Experimenting with ECS in UE4</a>: interesting article about <code>UE4</code> and <code>EnTT</code>.</li>
<li><a href="https://forums.unrealengine.com/development-discussion/c-gameplay-programming/1449913-implementing-ecs-architecture-in-ue4-giant-space-battle">Implementing ECS architecture in UE4</a>: giant space battle.</li>
<li><a href="https://leinnan.github.io/blog/conan-adventuressfml-and-entt-in-c.html">Conan Adventures (SFML and EnTT in C++)</a>: create projects in modern C++ using <code>SFML</code>, <code>EnTT</code>, <code>Conan</code> and <code>CMake</code>.</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::static_variable&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::data_member&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;global_variable&gt;(<span class="stringliteral">&quot;global&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta data once created. Users can then access meta data at runtime by searching for them by <em>name</em>.<br />
Data members can be set also by means of a couple of functions, namely a setter and a getter. Setters and getters can be either free functions, member functions or mixed ones, as long as they respect the required signatures.<br />
Refer to the inline documentation for all the details.</p>
<ul>
<li><em>Member functions</em>. Both real member functions of the underlying type and free functions can be attached to a meta type. From a client's point of view, all the functions associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>func</code> member function for this purpose:</li>
</li>
<li>Any Other Business:<ul>
<li>The <a href="https://developers.arcgis.com/arcgis-runtime/">ArcGIS Runtime SDKs</a> by <a href="https://www.esri.com/">Esri</a>: they use <code>EnTT</code> for the internal ECS and the cross platform C++ rendering engine. The SDKs are utilized by a lot of enterprise custom apps, as well as by Esri for its own public applications such as <a href="https://play.google.com/store/apps/details?id=com.esri.explorer">Explorer</a>, <a href="https://play.google.com/store/apps/details?id=com.esri.arcgis.collector">Collector</a> and <a href="https://play.google.com/store/apps/details?id=com.esri.navigator">Navigator</a>.</li>
<li><a href="https://www.linkedin.com/in/skypjack/">Apparently</a> <a href="https://www.nio.io/">NIO</a>: there was a collaboration to make some changes to <code>EnTT</code>, at the time used for internal projects.</li>
<li><a href="https://www.linkedin.com/jobs/view/architekt-c%2B%2B-at-tieto-1219512333/">Apparently</a> <a href="https://www.tieto.com/">Tieto</a>: they published a job post where <code>EnTT</code> was listed on their software stack.</li>
<li><a href="https://github.com/portaloffreedom/godot_entt_example/">Godot meets EnTT</a>: A simple example on how to use <code>EnTT</code> within <a href="https://godotengine.org/"><code>Godot</code></a>.</li>
<li><a href="https://github.com/portaloffreedom/godot_entt_net_example">Godot and GameNetworkingSockets meet EnTT</a>: A simple example on how to use <code>EnTT</code> and <a href="https://github.com/ValveSoftware/GameNetworkingSockets"><code>GameNetworkingSockets</code></a> within <a href="https://godotengine.org/"><code>Godot</code></a>.</li>
<li><a href="https://github.com/mhaemmerle/MatchOneEntt">MatchOneEntt</a>: port of <a href="https://github.com/sschmid/Match-One">Match One</a> for <code>Entitas-CSharp</code>.</li>
<li>GitHub contains also <a href="https://github.com/search?o=desc&amp;q=%22skypjack%2Fentt%22&amp;s=indexed&amp;type=Code">many other examples</a> of use of <code>EnTT</code> from which to take inspiration if interested.</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::static_function&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::member_function&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;free_function&gt;(<span class="stringliteral">&quot;free&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta function once created. Users can then access meta functions at runtime by searching for them by <em>name</em>.</p>
<ul>
<li><em>Base classes</em>. A base class is such that the underlying type is actually derived from it. In this case, the reflection system tracks the relationship and allows for implicit casts at runtime when required.<br />
Use the <code>base</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;derived_type&gt;(<span class="stringliteral">&quot;derived&quot;</span>_hs).base&lt;base_type&gt;();</div></div><!-- fragment --><p>From now on, wherever a <code>base_type</code> is required, an instance of <code>derived_type</code> will also be accepted.</p>
<ul>
<li><em>Conversion functions</em>. Actual types can be converted, this is a fact. Just think of the relationship between a <code>double</code> and an <code>int</code> to see it. Similar to bases, conversion functions allow users to define conversions that will be implicitly performed by the reflection system when required.<br />
Use the <code>conv</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>That's all, everything users need to create meta types and enjoy the reflection system. At first glance it may not seem that much, but users usually learn to appreciate it over time.<br />
Also, do not forget what these few lines hide under the hood: a built-in, non-intrusive and macro-free system for reflection in C++. Features that are definitely worth the price, at least for me.</p>
<h2><a class="anchor" id="autotoc_md71"></a>
Any as in any type</h2>
<p>The reflection system comes with its own meta any type. It may seem redundant since C++17 introduced <code>std::any</code>, but it is not.<br />
In fact, the <em>type</em> returned by an <code>std::any</code> is a const reference to an <code>std::type_info</code>, an implementation defined class that's not something everyone wants to see in a software. Furthermore, the class <code>std::type_info</code> suffers from some design flaws and there is even no way to <em>convert</em> an <code>std::type_info</code> into a meta type, thus linking the two worlds.</p>
<p>A meta any object provides an API similar to that of its most famous counterpart and serves the same purpose of being an opaque container for any type of value.<br />
It minimizes the allocations required, which are almost absent thanks to <em>SBO</em> techniques. In fact, unless users deal with <em>fat types</em> and create instances of them though the reflection system, allocations are at zero.</p>
<p>A meta any object can be created by any other object or as an empty container to initialize later:</p>
<div class="fragment"><div class="line"><span class="comment">// a meta any object that contains an int</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{0};</div><div class="line"></div><div class="line"><span class="comment">// an empty meta any object</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> empty{};</div></div><!-- fragment --><p>It takes the burden of destroying the contained instance when required.<br />
Moreover, it can be used as an opaque container for unmanaged objects if needed:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> value;</div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{std::in_place, value};</div></div><!-- fragment --><p>In this case, the contained instance is never destroyed and users must ensure that the lifetime of the object exceeds that of the container.</p>
<p>A meta any object has a <code>type</code> member function that returns the meta type of the contained value, if any. The member functions <code>try_cast</code>, <code>cast</code> and <code>convert</code> are used to know if the underlying object has a given type as a base or if it can be converted implicitly to it.</p>
<h2><a class="anchor" id="autotoc_md72"></a>
Enjoy the runtime</h2>
<p>Once the web of reflected types has been constructed, it's a matter of using it at runtime where required.<br />
All this has the great merit that, unlike the vast majority of the things present in this library and closely linked to the compile-time, the reflection system stands in fact as a non-intrusive tool for the runtime.</p>
<p>To search for a reflected type there are two options: by type or by <em>name</em>. In both cases, the search can be done by means of the <code>resolve</code> function:</p>
<div class="fragment"><div class="line"><span class="comment">// search for a reflected type by type</span></div><div class="line"><span class="keyword">auto</span> by_type = entt::resolve&lt;my_type&gt;();</div><div class="line"></div><div class="line"><span class="comment">// search for a reflected type by name</span></div><div class="line"><span class="keyword">auto</span> by_name = <a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">entt::resolve</a>(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>There exits also a third overload of the <code>resolve</code> function to use to iterate all the reflected types at once:</p>
<div class="fragment"><div class="line"><a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">resolve</a>([](<span class="keyword">auto</span> type) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>In all cases, the returned value is an instance of <code>meta_type</code>. This type of objects offer an API to know the <em>runtime identifier</em> of the type, to iterate all the meta objects associated with them and even to build or destroy instances of the underlying type.<br />
Refer to the inline documentation for all the details.</p>
<p>The meta objects that compose a meta type are accessed in the following ways:</p>
<ul>
<li><em>Meta constructors</em>. They are accessed by types of arguments:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ctor = entt::resolve&lt;my_type&gt;().ctor&lt;int, char&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_ctor</code> and may be invalid if there is no constructor that accepts the supplied arguments or at least some types from which they are derived or to which they can be converted.<br />
A meta constructor offers an API to know the number of arguments, the expected meta types and to invoke it, therefore to construct a new instance of the underlying type.</p>
<ul>
<li><em>Meta destructor</em>. It's returned by a dedicated function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> dtor = entt::resolve&lt;my_type&gt;().dtor();</div></div><!-- fragment --><p>The returned type is <code>meta_dtor</code> and may be invalid if there is no custom destructor set for the given meta type.<br />
All what a meta destructor has to offer is a way to invoke it on a given instance. Be aware that the result may not be what is expected.</p>
<ul>
<li><em>Meta data</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> data = entt::resolve&lt;my_type&gt;().data(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_data</code> and may be invalid if there is no meta data object associated with the given identifier.<br />
A meta data object offers an API to query the underlying type (ie to know if it's a const or a static one), to get the meta type of the variable and to set or get the contained value.</p>
<ul>
<li><em>Meta functions</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_func</code> and may be invalid if there is no meta function object associated with the given identifier.<br />
A meta function object offers an API to query the underlying type (ie to know if it's a const or a static function), to know the number of arguments, the meta return type and the meta types of the parameters. In addition, a meta function object can be used to invoke the underlying function and then get the return value in the form of meta any object.</p>
<ul>
<li><em>Meta bases</em>. They are accessed through the <em>name</em> of the base types:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> base = entt::resolve&lt;derived_type&gt;().base(<span class="stringliteral">&quot;base&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_base</code> and may be invalid if there is no meta base object associated with the given identifier.<br />
Meta bases aren't meant to be used directly, even though they are freely accessible. They expose only a few methods to use to know the meta type of the base class and to convert a raw pointer between types.</p>
<ul>
<li><em>Meta conversion functions</em>. They are accessed by type:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> conv = entt::resolve&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_conv</code> and may be invalid if there is no meta conversion function associated with the given type.<br />
The meta conversion functions are as thin as the meta bases and with a very similar interface. The sole difference is that they return a newly created instance wrapped in a meta any object when they convert between different types.</p>
<p>All the objects thus obtained as well as the meta types can be explicitly converted to a boolean value to check if they are valid:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs);</div><div class="line"></div><div class="line"><span class="keywordflow">if</span>(func) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Furthermore, all meta objects with the exception of meta destructors can be iterated through an overload that accepts a callback through which to return them. As an example:</p>
<div class="fragment"><div class="line">entt::resolve&lt;my_type&gt;().data([](<span class="keyword">auto</span> data) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>A meta type can also be used to <code>construct</code> or <code>destroy</code> actual instances of the underlying type.<br />
In particular, the <code>construct</code> member function accepts a variable number of arguments and searches for a match. It returns a <code>meta_any</code> object that may or may not be initialized, depending on whether a suitable constructor has been found or not. On the other side, the <code>destroy</code> member function accepts instances of <code>meta_any</code> as well as actual objects by reference and invokes the registered destructor if any.<br />
Be aware that the result of a call to <code>destroy</code> may not be what is expected. The purpose is to give users the ability to free up resources that require special treatment and <b>not</b> to actually destroy instances.</p>
<p>Meta types and meta objects in general contain much more than what is said: a plethora of functions in addition to those listed whose purposes and uses go unfortunately beyond the scope of this document.<br />
I invite anyone interested in the subject to look at the code, experiment and read the official documentation to get the best out of this powerful tool.</p>
<h2><a class="anchor" id="autotoc_md73"></a>
Policies: the more, the less</h2>
<p>Policies are a kind of compile-time directives that can be used when recording reflection information.<br />
Their purpose is to require slightly different behavior than the default in some specific cases. For example, when reading a given data member, its value is returned wrapped in a <code>meta_any</code> object which, by default, makes a copy of it. For large objects or if the caller wants to access the original instance, this behavior isn't desirable. Policies are there to offer a solution to this and other problems.</p>
<p>There are a few alternatives available at the moment:</p>
<ul>
<li>The <em>as-is</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__is__t.html" title="Empty class type used to request the as-is policy. ">entt::as_is_t</a></code>.<br />
This is the default policy. In general, it should never be used explicitly, since it's implicitly selected if no other policy is specified.<br />
In this case, the return values of the functions as well as the properties exposed as data members are always returned by copy in a dedicated wrapper and therefore associated with their original meta types.</li>
<li><p class="startli">The <em>as-void</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__void__t.html" title="Empty class type used to request the as void policy. ">entt::as_void_t</a></code>.<br />
Its purpose is to discard the return value of a meta object, whatever it is, thus making it appear as if its type were <code>void</code>.<br />
If the use with functions is obvious, it must be said that it's also possible to use this policy with constructors and data members. In the first case, the constructor will be invoked but the returned wrapper will actually be empty. In the second case, instead, the property will not be accessible for reading.</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::member_function, entt::as_void_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><ul>
<li><p class="startli">The <em>as-alias</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__alias__t.html" title="Empty class type used to request the as alias policy. ">entt::as_alias_t</a></code><br />
It allows to build wrappers that act as aliases for the objects used to initialize them. Modifying the object contained in the wrapper for which the <em>aliasing</em> was requested will make it possible to directly modify the instance used to initialize the wrapper itself.<br />
This policy works with constructors (for example, when objects are taken from an external container rather than created on demand), data members and functions in general (as long as their return types are lvalue references).</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::data_member, entt::as_alias_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>Some uses are rather trivial, but it's useful to note that there are some less obvious corner cases that can in turn be solved with the use of policies.</p>
<h2><a class="anchor" id="autotoc_md74"></a>
Named constants and enums</h2>
<p>A special mention should be made for constant values and enums. It wouldn't be necessary, but it will help distracted readers.</p>
<p>As mentioned, the <code>data</code> member function can be used to reflect constants of any type among the other things.<br />
This allows users to create meta types for enums that will work exactly like any other meta type built from a class. Similarly, arithmetic types can be enriched with constants of special meaning where required.<br />
Personally, I find it very useful not to export what is the difference between enums and classes in C++ directly in the space of the reflected types.</p>
<p>All the values thus exported will appear to users as if they were constant data members of the reflected types.</p>
<p>Exporting constant values or elements from an enum is as simple as ever:</p>
<div class="fragment"><div class="line">entt::reflect&lt;my_enum&gt;()</div><div class="line"> .data&lt;my_enum::a_value&gt;(<span class="stringliteral">&quot;a_value&quot;</span>_hs)</div><div class="line"> .data&lt;my_enum::another_value&gt;(<span class="stringliteral">&quot;another_value&quot;</span>_hs);</div><div class="line"></div><div class="line">entt::reflect&lt;int&gt;().data&lt;2048&gt;(<span class="stringliteral">&quot;max_int&quot;</span>_hs);</div></div><!-- fragment --><p>It goes without saying that accessing them is trivial as well. It's a matter of doing the following, as with any other data member of a meta type:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = entt::resolve&lt;my_enum&gt;().data(<span class="stringliteral">&quot;a_value&quot;</span>_hs).get({}).cast&lt;my_enum&gt;();</div><div class="line"><span class="keyword">auto</span> max = entt::resolve&lt;int&gt;().data(<span class="stringliteral">&quot;max_int&quot;</span>_hs).get({}).cast&lt;int&gt;();</div></div><!-- fragment --><p>As a side note, remember that all this happens behind the scenes without any allocation because of the small object optimization performed by the meta any class.</p>
<h2><a class="anchor" id="autotoc_md75"></a>
Properties and meta objects</h2>
<p>Sometimes (for example, when it comes to creating an editor) it might be useful to be able to attach properties to the meta objects created. Fortunately, this is possible for most of them.<br />
To attach a property to a meta object, no matter what as long as it supports properties, it is sufficient to provide an object at the time of construction such that <code>std::get&lt;0&gt;</code> and <code>std::get&lt;1&gt;</code> are valid for it. In other terms, the properties are nothing more than key/value pairs users can put in an <code>std::pair</code>. As an example:</p>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs, std::make_pair(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>));</div></div><!-- fragment --><p>The meta objects that support properties offer then a couple of member functions named <code>prop</code> to iterate them at once and to search a specific property by key:</p>
<div class="fragment"><div class="line"><span class="comment">// iterate all the properties of a meta type</span></div><div class="line">entt::resolve&lt;my_type&gt;().prop([](<span class="keyword">auto</span> prop) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div><div class="line"></div><div class="line"><span class="comment">// search for a given property by name</span></div><div class="line"><span class="keyword">auto</span> prop = entt::resolve&lt;my_type&gt;().prop(<span class="stringliteral">&quot;tooltip&quot;</span>_hs);</div></div><!-- fragment --><p>Meta properties are objects having a fairly poor interface, all in all. They only provide the <code>key</code> and the <code>value</code> member functions to be used to retrieve the key and the value contained in the form of meta any objects, respectively.</p>
<h2><a class="anchor" id="autotoc_md76"></a>
Unregister types</h2>
<p>A type registered with the reflection system can also be unregistered. This means unregistering all its data members, member functions, conversion functions and so on. However, the base classes won't be unregistered, since they don't necessarily depend on it. Similarly, implicitly generated types (as an example, the meta types implicitly generated for function parameters when needed) won't be unregistered.</p>
<p>To unregister a type, users can use the <code>unregister</code> function from the global namespace:</p>
<div class="fragment"><div class="line">entt::unregister&lt;my_type&gt;();</div></div><!-- fragment --><p>This function returns a boolean value that is true if the type is actually registered with the reflection system, false otherwise.<br />
The type can be re-registered later with a completely different name and form. </p>
<p>If you know of other resources out there that are about <code>EnTT</code>, feel free to open an issue or a PR and I'll be glad to add them to this page. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
+11 -153
View File
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: runtime reflection system</title>
<title>EnTT: Crash Course: service locator</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -60,162 +60,20 @@ $(function() {
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: runtime reflection system </div> </div>
<div class="title">Crash Course: service locator </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md69"></a>
Introduction</h1>
<p>Reflection (or rather, its lack) is a trending topic in the C++ world and, in the specific case of <code>EnTT</code>, a tool that can unlock a lot of other features. I looked for a third-party library that met my needs on the subject, but I always came across some details that I didn't like: macros, being intrusive, too many allocations. In one word: unsatisfactory.<br />
I finally decided to write a built-in, non-intrusive and macro-free runtime reflection system for <code>EnTT</code>. Maybe I didn't do better than others or maybe yes, time will tell me, but at least I can model this tool around the library to which it belongs and not vice versa.</p>
<p>Usually service locators are tightly bound to the services they expose and it's hard to define a general purpose solution. This template based implementation tries to fill the gap and to get rid of the burden of defining a different specific locator for each application.<br />
This class is tiny, partially unsafe and thus risky to use. Moreover it doesn't fit probably most of the scenarios in which a service locator is required. Look at it as a small tool that can sometimes be useful if users know how to handle it.</p>
<h1><a class="anchor" id="autotoc_md70"></a>
Names and identifiers</h1>
<p>The meta system doesn't force the user to use the tools provided by the library when it comes to working with names and identifiers. It does this by offering an API that works with opaque identifiers that may or may not be generated by means of a hashed string.<br />
This means that users can assign any type of identifier to the meta objects, as long as they are numeric. It doesn't matter if they are generated at runtime, at compile-time or with custom functions.</p>
<p>However, the examples in the following sections are all based on the <code>hashed_string</code> class as provided by this library. Therefore, where an identifier is required, it's likely that a user defined literal is used as follows:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>For what it's worth, this is likely completely equivalent to:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(42);</div></div><!-- fragment --><p>Obviously, human-readable identifiers are more convenient to use and highly recommended.</p>
<h1><a class="anchor" id="autotoc_md71"></a>
Reflection in a nutshell</h1>
<p>Reflection always starts from real types (users cannot reflect imaginary types and it would not make much sense, we wouldn't be talking about reflection anymore).<br />
To <em>reflect</em> a type, the library provides the <code>reflect</code> function:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>It accepts the type to reflect as a template parameter and an optional identifier as an argument. Identifiers are important because users can retrieve meta types at runtime by searching for them by <em>name</em>. However, there are cases in which users can be interested in adding features to a reflected type so that the reflection system can use it correctly under the hood, but they don't want to allow searching the type by <em>name</em>.<br />
In both cases, the returned value is a factory object to use to continue building the meta type.</p>
<p>A factory is such that all its member functions returns the factory itself. It can be used to extend the reflected type and add the following:</p>
<ul>
<li><em>Constructors</em>. Actual constructors can be assigned to a reflected type by specifying their list of arguments. Free functions (namely, factories) can be used as well, as long as the return type is the expected one. From a client's point of view, nothing changes if a constructor is a free function or an actual constructor.<br />
Use the <code>ctor</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs).ctor&lt;int, char&gt;().ctor&lt;&amp;factory&gt;();</div></div><!-- fragment --><ul>
<li><em>Destructors</em>. Free functions can be set as destructors of reflected types. The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.<br />
Use the <code>dtor</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs).dtor&lt;&amp;destroy&gt;();</div></div><!-- fragment --><p>A function should neither delete nor explicitly invoke the destructor of a given instance.</p>
<ul>
<li><em>Data members</em>. Both real data members of the underlying type and static and global variables, as well as constants of any kind, can be attached to a meta type. From a client's point of view, all the variables associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>data</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::static_variable&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::data_member&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;global_variable&gt;(<span class="stringliteral">&quot;global&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta data once created. Users can then access meta data at runtime by searching for them by <em>name</em>.<br />
Data members can be set also by means of a couple of functions, namely a setter and a getter. Setters and getters can be either free functions, member functions or mixed ones, as long as they respect the required signatures.<br />
Refer to the inline documentation for all the details.</p>
<ul>
<li><em>Member functions</em>. Both real member functions of the underlying type and free functions can be attached to a meta type. From a client's point of view, all the functions associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>func</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::static_function&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::member_function&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;free_function&gt;(<span class="stringliteral">&quot;free&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta function once created. Users can then access meta functions at runtime by searching for them by <em>name</em>.</p>
<ul>
<li><em>Base classes</em>. A base class is such that the underlying type is actually derived from it. In this case, the reflection system tracks the relationship and allows for implicit casts at runtime when required.<br />
Use the <code>base</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;derived_type&gt;(<span class="stringliteral">&quot;derived&quot;</span>_hs).base&lt;base_type&gt;();</div></div><!-- fragment --><p>From now on, wherever a <code>base_type</code> is required, an instance of <code>derived_type</code> will also be accepted.</p>
<ul>
<li><em>Conversion functions</em>. Actual types can be converted, this is a fact. Just think of the relationship between a <code>double</code> and an <code>int</code> to see it. Similar to bases, conversion functions allow users to define conversions that will be implicitly performed by the reflection system when required.<br />
Use the <code>conv</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>That's all, everything users need to create meta types and enjoy the reflection system. At first glance it may not seem that much, but users usually learn to appreciate it over time.<br />
Also, do not forget what these few lines hide under the hood: a built-in, non-intrusive and macro-free system for reflection in C++. Features that are definitely worth the price, at least for me.</p>
<h2><a class="anchor" id="autotoc_md72"></a>
Any as in any type</h2>
<p>The reflection system comes with its own meta any type. It may seem redundant since C++17 introduced <code>std::any</code>, but it is not.<br />
In fact, the <em>type</em> returned by an <code>std::any</code> is a const reference to an <code>std::type_info</code>, an implementation defined class that's not something everyone wants to see in a software. Furthermore, the class <code>std::type_info</code> suffers from some design flaws and there is even no way to <em>convert</em> an <code>std::type_info</code> into a meta type, thus linking the two worlds.</p>
<p>A meta any object provides an API similar to that of its most famous counterpart and serves the same purpose of being an opaque container for any type of value.<br />
It minimizes the allocations required, which are almost absent thanks to <em>SBO</em> techniques. In fact, unless users deal with <em>fat types</em> and create instances of them though the reflection system, allocations are at zero.</p>
<p>A meta any object can be created by any other object or as an empty container to initialize later:</p>
<div class="fragment"><div class="line"><span class="comment">// a meta any object that contains an int</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{0};</div><div class="line"></div><div class="line"><span class="comment">// an empty meta any object</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> empty{};</div></div><!-- fragment --><p>It takes the burden of destroying the contained instance when required.<br />
Moreover, it can be used as an opaque container for unmanaged objects if needed:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> value;</div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{<a class="code" href="namespaceentt.html#abb24e649324b83ebcf9dea9c970b1e2d">entt::as_alias</a>, value};</div></div><!-- fragment --><p>In this case, the contained instance is never destroyed and users must ensure that the lifetime of the object exceeds that of the container.</p>
<p>A meta any object has a <code>type</code> member function that returns the meta type of the contained value, if any. The member functions <code>try_cast</code>, <code>cast</code> and <code>convert</code> are used to know if the underlying object has a given type as a base or if it can be converted implicitly to it.</p>
<h2><a class="anchor" id="autotoc_md73"></a>
Enjoy the runtime</h2>
<p>Once the web of reflected types has been constructed, it's a matter of using it at runtime where required.<br />
All this has the great merit that, unlike the vast majority of the things present in this library and closely linked to the compile-time, the reflection system stands in fact as a non-intrusive tool for the runtime.</p>
<p>To search for a reflected type there are two options: by type or by <em>name</em>. In both cases, the search can be done by means of the <code>resolve</code> function:</p>
<div class="fragment"><div class="line"><span class="comment">// search for a reflected type by type</span></div><div class="line"><span class="keyword">auto</span> by_type = entt::resolve&lt;my_type&gt;();</div><div class="line"></div><div class="line"><span class="comment">// search for a reflected type by name</span></div><div class="line"><span class="keyword">auto</span> by_name = <a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">entt::resolve</a>(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>There exits also a third overload of the <code>resolve</code> function to use to iterate all the reflected types at once:</p>
<div class="fragment"><div class="line"><a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">resolve</a>([](<span class="keyword">auto</span> type) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>In all cases, the returned value is an instance of <code>meta_type</code>. This type of objects offer an API to know the <em>runtime identifier</em> of the type, to iterate all the meta objects associated with them and even to build or destroy instances of the underlying type.<br />
Refer to the inline documentation for all the details.</p>
<p>The meta objects that compose a meta type are accessed in the following ways:</p>
<ul>
<li><em>Meta constructors</em>. They are accessed by types of arguments:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ctor = entt::resolve&lt;my_type&gt;().ctor&lt;int, char&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_ctor</code> and may be invalid if there is no constructor that accepts the supplied arguments or at least some types from which they are derived or to which they can be converted.<br />
A meta constructor offers an API to know the number of arguments, the expected meta types and to invoke it, therefore to construct a new instance of the underlying type.</p>
<ul>
<li><em>Meta destructor</em>. It's returned by a dedicated function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> dtor = entt::resolve&lt;my_type&gt;().dtor();</div></div><!-- fragment --><p>The returned type is <code>meta_dtor</code> and may be invalid if there is no custom destructor set for the given meta type.<br />
All what a meta destructor has to offer is a way to invoke it on a given instance. Be aware that the result may not be what is expected.</p>
<ul>
<li><em>Meta data</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> data = entt::resolve&lt;my_type&gt;().data(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_data</code> and may be invalid if there is no meta data object associated with the given identifier.<br />
A meta data object offers an API to query the underlying type (ie to know if it's a const or a static one), to get the meta type of the variable and to set or get the contained value.</p>
<ul>
<li><em>Meta functions</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_func</code> and may be invalid if there is no meta function object associated with the given identifier.<br />
A meta function object offers an API to query the underlying type (ie to know if it's a const or a static function), to know the number of arguments, the meta return type and the meta types of the parameters. In addition, a meta function object can be used to invoke the underlying function and then get the return value in the form of meta any object.</p>
<ul>
<li><em>Meta bases</em>. They are accessed through the <em>name</em> of the base types:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> base = entt::resolve&lt;derived_type&gt;().base(<span class="stringliteral">&quot;base&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_base</code> and may be invalid if there is no meta base object associated with the given identifier.<br />
Meta bases aren't meant to be used directly, even though they are freely accessible. They expose only a few methods to use to know the meta type of the base class and to convert a raw pointer between types.</p>
<ul>
<li><em>Meta conversion functions</em>. They are accessed by type:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> conv = entt::resolve&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_conv</code> and may be invalid if there is no meta conversion function associated with the given type.<br />
The meta conversion functions are as thin as the meta bases and with a very similar interface. The sole difference is that they return a newly created instance wrapped in a meta any object when they convert between different types.</p>
<p>All the objects thus obtained as well as the meta types can be explicitly converted to a boolean value to check if they are valid:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs);</div><div class="line"></div><div class="line"><span class="keywordflow">if</span>(func) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Furthermore, all meta objects with the exception of meta destructors can be iterated through an overload that accepts a callback through which to return them. As an example:</p>
<div class="fragment"><div class="line">entt::resolve&lt;my_type&gt;().data([](<span class="keyword">auto</span> data) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>A meta type can also be used to <code>construct</code> or <code>destroy</code> actual instances of the underlying type.<br />
In particular, the <code>construct</code> member function accepts a variable number of arguments and searches for a match. It returns a <code>meta_any</code> object that may or may not be initialized, depending on whether a suitable constructor has been found or not. On the other side, the <code>destroy</code> member function accepts instances of <code>meta_any</code> as well as actual objects by reference and invokes the registered destructor if any.<br />
Be aware that the result of a call to <code>destroy</code> may not be what is expected. The purpose is to give users the ability to free up resources that require special treatment and <b>not</b> to actually destroy instances.</p>
<p>Meta types and meta objects in general contain much more than what is said: a plethora of functions in addition to those listed whose purposes and uses go unfortunately beyond the scope of this document.<br />
I invite anyone interested in the subject to look at the code, experiment and read the official documentation to get the best out of this powerful tool.</p>
<h2><a class="anchor" id="autotoc_md74"></a>
Policies: the more, the less</h2>
<p>Policies are a kind of compile-time directives that can be used when recording reflection information.<br />
Their purpose is to require slightly different behavior than the default in some specific cases. For example, when reading a given data member, its value is returned wrapped in a <code>meta_any</code> object which, by default, makes a copy of it. For large objects or if the caller wants to access the original instance, this behavior isn't desirable. Policies are there to offer a solution to this and other problems.</p>
<p>There are a few alternatives available at the moment:</p>
<ul>
<li>The <em>as-is</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__is__t.html" title="Empty class type used to request the as-is policy. ">entt::as_is_t</a></code>.<br />
This is the default policy. In general, it should never be used explicitly, since it's implicitly selected if no other policy is specified.<br />
In this case, the return values of the functions as well as the properties exposed as data members are always returned by copy in a dedicated wrapper and therefore associated with their original meta types.</li>
<li><p class="startli">The <em>as-void</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__void__t.html" title="Empty class type used to request the as void policy. ">entt::as_void_t</a></code>.<br />
Its purpose is to discard the return value of a meta object, whatever it is, thus making it appear as if its type were <code>void</code>.<br />
If the use with functions is obvious, it must be said that it's also possible to use this policy with constructors and data members. In the first case, the constructor will be invoked but the returned wrapper will actually be empty. In the second case, instead, the property will not be accessible for reading.</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::member_function, entt::as_void_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><ul>
<li><p class="startli">The <em>as-alias</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__alias__t.html" title="Empty class type used to request the as alias policy. ">entt::as_alias_t</a></code>.<br />
It allows to build wrappers that act as aliases for the objects used to initialize them. Modifying the object contained in the wrapper for which the <em>aliasing</em> was requested will make it possible to directly modify the instance used to initialize the wrapper itself.<br />
This policy works with constructors (for example, when objects are taken from an external container rather than created on demand), data members and functions in general (as long as their return types are lvalue references).</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::data_member, entt::as_alias_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>Some uses are rather trivial, but it's useful to note that there are some less obvious corner cases that can in turn be solved with the use of policies.</p>
<h2><a class="anchor" id="autotoc_md75"></a>
Named constants and enums</h2>
<p>A special mention should be made for constant values and enums. It wouldn't be necessary, but it will help distracted readers.</p>
<p>As mentioned, the <code>data</code> member function can be used to reflect constants of any type among the other things.<br />
This allows users to create meta types for enums that will work exactly like any other meta type built from a class. Similarly, arithmetic types can be enriched with constants of special meaning where required.<br />
Personally, I find it very useful not to export what is the difference between enums and classes in C++ directly in the space of the reflected types.</p>
<p>All the values thus exported will appear to users as if they were constant data members of the reflected types.</p>
<p>Exporting constant values or elements from an enum is as simple as ever:</p>
<div class="fragment"><div class="line">entt::reflect&lt;my_enum&gt;()</div><div class="line"> .data&lt;my_enum::a_value&gt;(<span class="stringliteral">&quot;a_value&quot;</span>_hs)</div><div class="line"> .data&lt;my_enum::another_value&gt;(<span class="stringliteral">&quot;another_value&quot;</span>_hs);</div><div class="line"></div><div class="line">entt::reflect&lt;int&gt;().data&lt;2048&gt;(<span class="stringliteral">&quot;max_int&quot;</span>_hs);</div></div><!-- fragment --><p>It goes without saying that accessing them is trivial as well. It's a matter of doing the following, as with any other data member of a meta type:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = entt::resolve&lt;my_enum&gt;().data(<span class="stringliteral">&quot;a_value&quot;</span>_hs).get({}).cast&lt;my_enum&gt;();</div><div class="line"><span class="keyword">auto</span> max = entt::resolve&lt;int&gt;().data(<span class="stringliteral">&quot;max_int&quot;</span>_hs).get({}).cast&lt;int&gt;();</div></div><!-- fragment --><p>As a side note, remember that all this happens behind the scenes without any allocation because of the small object optimization performed by the meta any class.</p>
<h2><a class="anchor" id="autotoc_md76"></a>
Properties and meta objects</h2>
<p>Sometimes (for example, when it comes to creating an editor) it might be useful to be able to attach properties to the meta objects created. Fortunately, this is possible for most of them.<br />
To attach a property to a meta object, no matter what as long as it supports properties, it is sufficient to provide an object at the time of construction such that <code>std::get&lt;0&gt;</code> and <code>std::get&lt;1&gt;</code> are valid for it. In other terms, the properties are nothing more than key/value pairs users can put in an <code>std::pair</code>. As an example:</p>
<div class="fragment"><div class="line">entt::reflect&lt;my_type&gt;(<span class="stringliteral">&quot;reflected&quot;</span>_hs, std::make_pair(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>));</div></div><!-- fragment --><p>The meta objects that support properties offer then a couple of member functions named <code>prop</code> to iterate them at once and to search a specific property by key:</p>
<div class="fragment"><div class="line"><span class="comment">// iterate all the properties of a meta type</span></div><div class="line">entt::resolve&lt;my_type&gt;().prop([](<span class="keyword">auto</span> prop) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div><div class="line"></div><div class="line"><span class="comment">// search for a given property by name</span></div><div class="line"><span class="keyword">auto</span> prop = entt::resolve&lt;my_type&gt;().prop(<span class="stringliteral">&quot;tooltip&quot;</span>_hs);</div></div><!-- fragment --><p>Meta properties are objects having a fairly poor interface, all in all. They only provide the <code>key</code> and the <code>value</code> member functions to be used to retrieve the key and the value contained in the form of meta any objects, respectively.</p>
<h2><a class="anchor" id="autotoc_md77"></a>
Unregister types</h2>
<p>A type registered with the reflection system can also be unregistered. This means unregistering all its data members, member functions, conversion functions and so on. However, the base classes won't be unregistered, since they don't necessarily depend on it. Similarly, implicitly generated types (as an example, the meta types implicitly generated for function parameters when needed) won't be unregistered.</p>
<p>To unregister a type, users can use the <code>unregister</code> function from the global namespace:</p>
<div class="fragment"><div class="line">entt::unregister&lt;my_type&gt;();</div></div><!-- fragment --><p>This function returns a boolean value that is true if the type is actually registered with the reflection system, false otherwise.<br />
The type can be re-registered later with a completely different name and form. </p>
</div></div><!-- contents -->
Service locator</h1>
<p>The API is straightforward. The basic idea is that services are implemented by means of interfaces and rely on polymorphism.<br />
The locator is instantiated with the base type of the service if any and a concrete implementation is provided along with all the parameters required to initialize it. As an example:</p>
<div class="fragment"><div class="line"><span class="comment">// the service has no base type, a locator is used to treat it as a kind of singleton</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html#a116dc62f5d2a1c65db9d7528c957e91f">entt::service_locator&lt;my_service&gt;::set</a>(params...);</div><div class="line"></div><div class="line"><span class="comment">// sets up an opaque service</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;audio_interface&gt;::set</a>&lt;audio_implementation&gt;(params...);</div><div class="line"></div><div class="line"><span class="comment">// resets (destroys) the service</span></div><div class="line"><a class="code" href="structentt_1_1service__locator.html#a4d655acab54d87058ad41a266830d0e8">entt::service_locator&lt;audio_interface&gt;::reset</a>();</div></div><!-- fragment --><p>The locator can also be queried to know if an active service is currently set and to retrieve it if necessary (either as a pointer or as a reference):</p>
<div class="fragment"><div class="line"><span class="comment">// no service currently set</span></div><div class="line"><span class="keyword">auto</span> empty = <a class="code" href="structentt_1_1service__locator.html#a9265b7273a758003283a79f7a4de6250">entt::service_locator&lt;audio_interface&gt;::empty</a>();</div><div class="line"></div><div class="line"><span class="comment">// gets a (possibly empty) shared pointer to the service ...</span></div><div class="line">std::shared_ptr&lt;audio_interface&gt; ptr = <a class="code" href="structentt_1_1service__locator.html#ab72c1dab3eec4554690a82457894b385">entt::service_locator&lt;audio_interface&gt;::get</a>();</div><div class="line"></div><div class="line"><span class="comment">// ... or a reference, but it&#39;s undefined behaviour if the service isn&#39;t set yet</span></div><div class="line">audio_interface &amp;ref = <a class="code" href="structentt_1_1service__locator.html#ae24d16726620af40371fadeddf5b5e2e">entt::service_locator&lt;audio_interface&gt;::ref</a>();</div></div><!-- fragment --><p>A common use is to wrap the different locators in a container class, creating aliases for the various services:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>locator {</div><div class="line"> <span class="keyword">using</span> camera = <a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;camera_interface&gt;</a>;</div><div class="line"> <span class="keyword">using</span> audio = <a class="code" href="structentt_1_1service__locator.html">entt::service_locator&lt;audio_interface&gt;</a>;</div><div class="line"> <span class="comment">// ...</span></div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="keywordtype">void</span> init() {</div><div class="line"> locator::camera::set&lt;camera_null&gt;();</div><div class="line"> locator::audio::set&lt;audio_implementation&gt;(params...);</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
+251
View File
@@ -0,0 +1,251 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: runtime reflection system</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: runtime reflection system </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md72"></a>
Introduction</h1>
<p>Reflection (or rather, its lack) is a trending topic in the C++ world and, in the specific case of <code>EnTT</code>, a tool that can unlock a lot of other features. I looked for a third-party library that met my needs on the subject, but I always came across some details that I didn't like: macros, being intrusive, too many allocations. In one word: unsatisfactory.<br />
I finally decided to write a built-in, non-intrusive and macro-free runtime reflection system for <code>EnTT</code>. Maybe I didn't do better than others or maybe yes, time will tell me, but at least I can model this tool around the library to which it belongs and not vice versa.</p>
<h1><a class="anchor" id="autotoc_md73"></a>
Names and identifiers</h1>
<p>The meta system doesn't force the user to use the tools provided by the library when it comes to working with names and identifiers. It does this by offering an API that works with opaque identifiers that may or may not be generated by means of a hashed string.<br />
This means that users can assign any type of identifier to the meta objects, as long as they are numeric. It doesn't matter if they are generated at runtime, at compile-time or with custom functions.</p>
<p>However, the examples in the following sections are all based on the <code>hashed_string</code> class as provided by this library. Therefore, where an identifier is required, it's likely that a user defined literal is used as follows:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>For what it's worth, this is likely completely equivalent to:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::meta&lt;my_type&gt;().type(42);</div></div><!-- fragment --><p>Obviously, human-readable identifiers are more convenient to use and highly recommended.</p>
<h1><a class="anchor" id="autotoc_md74"></a>
Reflection in a nutshell</h1>
<p>Reflection always starts from real types (users cannot reflect imaginary types and it would not make much sense, we wouldn't be talking about reflection anymore).<br />
To create a meta node, the library provides the <code>meta</code> function that accepts a type to reflect as a template parameter:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::meta&lt;my_type&gt;();</div></div><!-- fragment --><p>This isn't enough to <em>export</em> the given type and make it visible though.<br />
The returned value is a factory object to use to continue building the meta type. In order to make the type <em>visible</em>, users can assign it an identifier:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> factory = entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>When working with named types, it isn't even necessary to specify the identifier. In fact, it isn't allowed and it will trigger a compilation error.<br />
Identifiers are important because users can retrieve meta types at runtime by searching for them by <em>name</em> other than by type. On the other hand, there are cases in which users can be interested in adding features to a reflected type so that the reflection system can use it correctly under the hood, but they don't want to allow searching the type by <em>name</em>. In this case, it's sufficient not to invoke <code>type</code> and the type will not be searchable <em>by name</em>.</p>
<p>A factory is such that all its member functions returns the factory itself or a decorated version of it. This object can be used to add the following:</p>
<ul>
<li><em>Constructors</em>. Actual constructors can be assigned to a reflected type by specifying their list of arguments. Free functions (namely, factories) can be used as well, as long as the return type is the expected one. From a client's point of view, nothing changes if a constructor is a free function or an actual constructor.<br />
Use the <code>ctor</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().ctor&lt;int, char&gt;().ctor&lt;&amp;factory&gt;();</div></div><!-- fragment --><ul>
<li><em>Destructors</em>. Free functions can be set as destructors of reflected types. The purpose is to give users the ability to free up resources that require special treatment before an object is actually destroyed.<br />
Use the <code>dtor</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().dtor&lt;&amp;destroy&gt;();</div></div><!-- fragment --><p>A function should neither delete nor explicitly invoke the destructor of a given instance.</p>
<ul>
<li><em>Data members</em>. Both real data members of the underlying type and static and global variables, as well as constants of any kind, can be attached to a meta type. From a client's point of view, all the variables associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>data</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;()</div><div class="line"> .data&lt;&amp;my_type::static_variable&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;my_type::data_member&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .data&lt;&amp;global_variable&gt;(<span class="stringliteral">&quot;global&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta data once created. Users can then access meta data at runtime by searching for them by <em>name</em>.<br />
Data members can be set also by means of a couple of functions, namely a setter and a getter. Setters and getters can be either free functions, member functions or mixed ones, as long as they respect the required signatures.<br />
Refer to the inline documentation for all the details.</p>
<ul>
<li><em>Member functions</em>. Both real member functions of the underlying type and free functions can be attached to a meta type. From a client's point of view, all the functions associated with the reflected type will appear as if they were part of the type itself.<br />
Use the <code>func</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;()</div><div class="line"> .func&lt;&amp;my_type::static_function&gt;(<span class="stringliteral">&quot;static&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;my_type::member_function&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .func&lt;&amp;free_function&gt;(<span class="stringliteral">&quot;free&quot;</span>_hs);</div></div><!-- fragment --><p>This function requires as an argument the identifier to give to the meta function once created. Users can then access meta functions at runtime by searching for them by <em>name</em>.</p>
<ul>
<li><em>Base classes</em>. A base class is such that the underlying type is actually derived from it. In this case, the reflection system tracks the relationship and allows for implicit casts at runtime when required.<br />
Use the <code>base</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;derived_type&gt;().base&lt;base_type&gt;();</div></div><!-- fragment --><p>From now on, wherever a <code>base_type</code> is required, an instance of <code>derived_type</code> will also be accepted.</p>
<ul>
<li><em>Conversion functions</em>. Actual types can be converted, this is a fact. Just think of the relationship between a <code>double</code> and an <code>int</code> to see it. Similar to bases, conversion functions allow users to define conversions that will be implicitly performed by the reflection system when required.<br />
Use the <code>conv</code> member function for this purpose:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>That's all, everything users need to create meta types and enjoy the reflection system. At first glance it may not seem that much, but users usually learn to appreciate it over time.<br />
Also, do not forget what these few lines hide under the hood: a built-in, non-intrusive and macro-free system for reflection in C++. Features that are definitely worth the price, at least for me.</p>
<h2><a class="anchor" id="autotoc_md75"></a>
Any as in any type</h2>
<p>The reflection system comes with its own <code>meta_any</code> type. It may seem redundant since C++17 introduced <code>std::any</code>, but it is not.<br />
In fact, the <em>type</em> returned by an <code>std::any</code> is a const reference to an <code>std::type_info</code>, an implementation defined class that's not something everyone wants to see in a software. Furthermore, the class <code>std::type_info</code> suffers from some design flaws and there is even no way to <em>convert</em> an <code>std::type_info</code> into a meta type, thus linking the two worlds.</p>
<p>The class <code>meta_any</code> offers an API similar to that of its most famous counterpart and serves the same purpose of being an opaque container for any type of value.<br />
It minimizes the allocations required, which are almost absent thanks to <em>SBO</em> techniques. In fact, unless users deal with <em>fat types</em> and create instances of them through the reflection system, allocations are at zero.</p>
<p>Creating instances of <code>meta_any</code>, whether empty or from existing objects, is trivial:</p>
<div class="fragment"><div class="line"><span class="comment">// a container for an int</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{0};</div><div class="line"></div><div class="line"><span class="comment">// an empty container</span></div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> empty{};</div></div><!-- fragment --><p>The <code>meta_any</code> class takes also the burden of destroying the contained object when required.<br />
Furthermore, an instance of <code>meta_any</code> is not tied to a specific type. Therefore, the wrapper will be reconfigured by assigning it an object of a different type than the one contained, so as to be able to handle the new instance.</p>
<p>A particularly interesting feature of this class is that it can also be used as an opaque container for unmanaged objects:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> value;</div><div class="line"><a class="code" href="classentt_1_1meta__any.html">entt::meta_any</a> any{std::ref(value)};</div></div><!-- fragment --><p>In other words, whenever <code>meta_any</code> intercepts a <code>reference_wrapper</code>, it acts as a reference to the original instance rather than making a copy of it. The contained object is never destroyed and users must ensure that its lifetime exceeds that of the container.</p>
<p>The <code>meta_any</code> class has also a <code>type</code> member function that returns the meta type of the contained value, if any. The member functions <code>try_cast</code>, <code>cast</code> and <code>convert</code> are used to know if the underlying object has a given type as a base or if it can be converted implicitly to it.</p>
<h2><a class="anchor" id="autotoc_md76"></a>
Enjoy the runtime</h2>
<p>Once the web of reflected types has been constructed, it's a matter of using it at runtime where required.<br />
All this has the great merit that, unlike the vast majority of the things present in this library and closely linked to the compile-time, the reflection system stands in fact as a non-intrusive tool for the runtime.</p>
<p>To search for a reflected type there are two options: by type or by <em>name</em>. In both cases, the search can be done by means of the <code>resolve</code> function:</p>
<div class="fragment"><div class="line"><span class="comment">// search for a reflected type by type</span></div><div class="line"><span class="keyword">auto</span> by_type = entt::resolve&lt;my_type&gt;();</div><div class="line"></div><div class="line"><span class="comment">// search for a reflected type by name</span></div><div class="line"><span class="keyword">auto</span> by_name = <a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">entt::resolve</a>(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs);</div></div><!-- fragment --><p>There exits also a third overload of the <code>resolve</code> function to use to iterate all the reflected types at once:</p>
<div class="fragment"><div class="line"><a class="code" href="namespaceentt.html#a2129cb8668f5dcbc11854be6a4a0b6e5">resolve</a>([](<span class="keyword">auto</span> type) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>In all cases, the returned value is an instance of <code>meta_type</code>. This kind of objects offer an API to know their <em>runtime identifiers</em>, to iterate all the meta objects associated with them and even to build or destroy instances of the underlying type.<br />
Refer to the inline documentation for all the details.</p>
<p>The meta objects that compose a meta type are accessed in the following ways:</p>
<ul>
<li><em>Meta constructors</em>. They are accessed by types of arguments:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ctor = entt::resolve&lt;my_type&gt;().ctor&lt;int, char&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_ctor</code> and may be invalid if there is no constructor that accepts the supplied arguments or at least some types from which they are derived or to which they can be converted.<br />
A meta constructor offers an API to know the number of arguments, the expected meta types and to invoke it, therefore to construct a new instance of the underlying type.</p>
<ul>
<li><em>Meta destructor</em>. It's returned by a dedicated function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> dtor = entt::resolve&lt;my_type&gt;().dtor();</div></div><!-- fragment --><p>The returned type is <code>meta_dtor</code> and may be invalid if there is no custom destructor set for the given meta type.<br />
All what a meta destructor has to offer is a way to invoke it on a given instance. Be aware that the result may not be what is expected.</p>
<ul>
<li><em>Meta data</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> data = entt::resolve&lt;my_type&gt;().data(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_data</code> and may be invalid if there is no meta data object associated with the given identifier.<br />
A meta data object offers an API to query the underlying type (for example, to know if it's a const or a static one), to get the meta type of the variable and to set or get the contained value.</p>
<ul>
<li><em>Meta functions</em>. They are accessed by <em>name</em>:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_func</code> and may be invalid if there is no meta function object associated with the given identifier.<br />
A meta function object offers an API to query the underlying type (for example, to know if it's a const or a static function), to know the number of arguments, the meta return type and the meta types of the parameters. In addition, a meta function object can be used to invoke the underlying function and then get the return value in the form of a <code>meta_any</code> object.</p>
<ul>
<li><em>Meta bases</em>. They are accessed through the <em>name</em> of the base types:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> base = entt::resolve&lt;derived_type&gt;().base(<span class="stringliteral">&quot;base&quot;</span>_hs);</div></div><!-- fragment --><p>The returned type is <code>meta_base</code> and may be invalid if there is no meta base object associated with the given identifier.<br />
Meta bases aren't meant to be used directly, even though they are freely accessible. They expose only a few methods to use to know the meta type of the base class and to convert a raw pointer between types.</p>
<ul>
<li><em>Meta conversion functions</em>. They are accessed by type:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> conv = entt::resolve&lt;double&gt;().conv&lt;int&gt;();</div></div><!-- fragment --><p>The returned type is <code>meta_conv</code> and may be invalid if there is no meta conversion function associated with the given type.<br />
The meta conversion functions are as thin as the meta bases and with a very similar interface. The sole difference is that they return a newly created instance wrapped in a <code>meta_any</code> object when they convert between different types.</p>
<p>All the objects thus obtained as well as the meta types can be explicitly converted to a boolean value to check if they are valid:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> func = entt::resolve&lt;my_type&gt;().func(<span class="stringliteral">&quot;member&quot;</span>_hs); func) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Furthermore, all meta objects with the exception of meta destructors can be iterated through an overload that accepts a callback through which to return them. As an example:</p>
<div class="fragment"><div class="line">entt::resolve&lt;my_type&gt;().data([](<span class="keyword">auto</span> data) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>A meta type can also be used to <code>construct</code> or <code>destroy</code> actual instances of the underlying type.<br />
In particular, the <code>construct</code> member function accepts a variable number of arguments and searches for a match. It returns a <code>meta_any</code> object that may or may not be initialized, depending on whether a suitable constructor has been found or not. On the other side, the <code>destroy</code> member function accepts instances of <code>meta_any</code> as well as actual objects by reference and invokes the registered destructor, if any.<br />
Be aware that the result of a call to <code>destroy</code> may not be what is expected. The purpose is to give users the ability to free up resources that require special treatment and <b>not</b> to actually destroy instances.</p>
<p>Meta types and meta objects in general contain much more than what is said: a plethora of functions in addition to those listed whose purposes and uses go unfortunately beyond the scope of this document.<br />
I invite anyone interested in the subject to look at the code, experiment and read the inline documentation to get the best out of this powerful tool.</p>
<h2><a class="anchor" id="autotoc_md77"></a>
Policies: the more, the less</h2>
<p>Policies are a kind of compile-time directives that can be used when recording reflection information.<br />
Their purpose is to require slightly different behavior than the default in some specific cases. For example, when reading a given data member, its value is returned wrapped in a <code>meta_any</code> object which, by default, makes a copy of it. For large objects or if the caller wants to access the original instance, this behavior isn't desirable. Policies are there to offer a solution to this and other problems.</p>
<p>There are a few alternatives available at the moment:</p>
<ul>
<li>The <em>as-is</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__is__t.html" title="Empty class type used to request the as-is policy. ">entt::as_is_t</a></code>.<br />
This is the default policy. In general, it should never be used explicitly, since it's implicitly selected if no other policy is specified.<br />
In this case, the return values of the functions as well as the properties exposed as data members are always returned by copy in a dedicated wrapper and therefore associated with their original meta types.</li>
<li><p class="startli">The <em>as-void</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__void__t.html" title="Empty class type used to request the as void policy. ">entt::as_void_t</a></code>.<br />
Its purpose is to discard the return value of a meta object, whatever it is, thus making it appear as if its type were <code>void</code>.<br />
If the use with functions is obvious, it must be said that it's also possible to use this policy with constructors and data members. In the first case, the constructor will be invoked but the returned wrapper will actually be empty. In the second case, instead, the property will not be accessible for reading.</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().func&lt;&amp;my_type::member_function, entt::as_void_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><ul>
<li><p class="startli">The <em>as-alias</em> policy, associated with the type <code><a class="el" href="structentt_1_1as__alias__t.html" title="Empty class type used to request the as alias policy. ">entt::as_alias_t</a></code>.<br />
It allows to build wrappers that act as aliases for the objects used to initialize them. Modifying the object contained in the wrapper for which the <em>aliasing</em> was requested will make it possible to directly modify the instance used to initialize the wrapper itself.<br />
This policy works with constructors (for example, when objects are taken from an external container rather than created on demand), data members and functions in general (as long as their return types are lvalue references).</p>
<p class="startli">As an example of use:</p>
</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().data&lt;&amp;my_type::data_member, entt::as_alias_t&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs);</div></div><!-- fragment --><p>Some uses are rather trivial, but it's useful to note that there are some less obvious corner cases that can in turn be solved with the use of policies.</p>
<h2><a class="anchor" id="autotoc_md78"></a>
Named constants and enums</h2>
<p>A special mention should be made for constant values and enums. It wouldn't be necessary, but it will help distracted readers.</p>
<p>As mentioned, the <code>data</code> member function can be used to reflect constants of any type among the other things.<br />
This allows users to create meta types for enums that will work exactly like any other meta type built from a class. Similarly, arithmetic types can be enriched with constants of special meaning where required.<br />
Personally, I find it very useful not to export what is the difference between enums and classes in C++ directly in the space of the reflected types.</p>
<p>All the values thus exported will appear to users as if they were constant data members of the reflected types.</p>
<p>Exporting constant values or elements from an enum is as simple as ever:</p>
<div class="fragment"><div class="line">entt::meta&lt;my_enum&gt;()</div><div class="line"> .data&lt;my_enum::a_value&gt;(<span class="stringliteral">&quot;a_value&quot;</span>_hs)</div><div class="line"> .data&lt;my_enum::another_value&gt;(<span class="stringliteral">&quot;another_value&quot;</span>_hs);</div><div class="line"></div><div class="line">entt::meta&lt;int&gt;().data&lt;2048&gt;(<span class="stringliteral">&quot;max_int&quot;</span>_hs);</div></div><!-- fragment --><p>It goes without saying that accessing them is trivial as well. It's a matter of doing the following, as with any other data member of a meta type:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = entt::resolve&lt;my_enum&gt;().data(<span class="stringliteral">&quot;a_value&quot;</span>_hs).get({}).cast&lt;my_enum&gt;();</div><div class="line"><span class="keyword">auto</span> max = entt::resolve&lt;int&gt;().data(<span class="stringliteral">&quot;max_int&quot;</span>_hs).get({}).cast&lt;int&gt;();</div></div><!-- fragment --><p>As a side note, remember that all this happens behind the scenes without any allocation because of the small object optimization performed by the <code>meta_any</code> class.</p>
<h2><a class="anchor" id="autotoc_md79"></a>
Properties and meta objects</h2>
<p>Sometimes (for example, when it comes to creating an editor) it might be useful to attach properties to the meta objects created. Fortunately, this is possible for most of them.<br />
For the meta objects that support properties, the member functions of the factory used for registering them will return a decorated version of the factory itself. The latter can be used to attach properties to the last created meta object.<br />
Apparently, it's more difficult to say than to do:</p>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs).prop(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>);</div></div><!-- fragment --><p>Properties are always in the key/value form. There are no restrictions on the type of the key or value, as long as they are copy constructible objects.<br />
Multiple formats are supported when it comes to defining a property:</p>
<ul>
<li>Properties as key/value pairs:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs).prop(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>);</div></div><!-- fragment --><ul>
<li>Properties as <code>std::pair</code>s:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs).prop(std::make_pair(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>));</div></div><!-- fragment --><ul>
<li>Key only properties:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs).prop(my_enum::key_only);</div></div><!-- fragment --><ul>
<li>Properties as <code>std::tuple</code>s:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs)</div><div class="line"> .prop(std::make_tuple(std::make_pair(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;message&quot;</span>), my_enum::key_only));</div></div><!-- fragment --><p>A tuple contains one or more properties. All of them are treated individually.</p>
<ul>
<li>Annotations:</li>
</ul>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs).prop(&amp;property_generator);</div></div><!-- fragment --><p>An annotation is an invocable object that returns one or more properties. All of them are treated individually.</p>
<p>It's possible to invoke the <code>prop</code> function several times if needed, one for each property to associate with the last meta object created:</p>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;()</div><div class="line"> .type(<span class="stringliteral">&quot;reflected_type&quot;</span>_hs)</div><div class="line"> .prop(<a class="code" href="classentt_1_1basic__hashed__string.html">entt::hashed_string</a>{<span class="stringliteral">&quot;Name&quot;</span>}, <span class="stringliteral">&quot;Reflected Type&quot;</span>)</div><div class="line"> .data&lt;&amp;my_type::data_member&gt;(<span class="stringliteral">&quot;member&quot;</span>_hs)</div><div class="line"> .prop(std::make_pair(<span class="stringliteral">&quot;tooltip&quot;</span>_hs, <span class="stringliteral">&quot;Member&quot;</span>))</div><div class="line"> .prop(my_enum::a_value, 42);</div></div><!-- fragment --><p>Alternatively, the <code>props</code> function is available to associate several properties at a time. However, in this case properties in the key/value form aren't allowed, since they would be interpreted as two different properties rather than a single one.</p>
<p>The meta objects for which properties are supported are currently the meta types, meta constructors, meta data and meta functions. It's not possible to attach properties to other types of meta objects and the factory returned as a result of their construction won't allow such an operation.</p>
<p>These types offer a couple of member functions named <code>prop</code> to iterate all properties at once or to search a specific property by key:</p>
<div class="fragment"><div class="line"><span class="comment">// iterate all properties of a meta type</span></div><div class="line">entt::resolve&lt;my_type&gt;().prop([](<span class="keyword">auto</span> prop) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div><div class="line"></div><div class="line"><span class="comment">// search for a given property by name</span></div><div class="line"><span class="keyword">auto</span> prop = entt::resolve&lt;my_type&gt;().prop(<span class="stringliteral">&quot;tooltip&quot;</span>_hs);</div></div><!-- fragment --><p>Meta properties are objects having a fairly poor interface, all in all. They only provide the <code>key</code> and the <code>value</code> member functions to be used to retrieve the key and the value contained in the form of <code>meta_any</code> objects, respectively.</p>
<h2><a class="anchor" id="autotoc_md80"></a>
Unregister types</h2>
<p>A type registered with the reflection system can also be unregistered. This means unregistering all its data members, member functions, conversion functions and so on. However, the base classes won't be unregistered, since they don't necessarily depend on it. Similarly, implicitly generated types (as an example, the meta types implicitly generated for function parameters when needed) won't be unregistered.<br />
Roughly speaking, unregistering a type means disconnecting all associated meta objects from it and making its identifier no longer visible. The underlying node will remain available though, as if it were implicitly generated:</p>
<div class="fragment"><div class="line">entt::meta&lt;my_type&gt;().reset();</div></div><!-- fragment --><p>The type can be re-registered later with a completely different name and form. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
-133
View File
@@ -1,133 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: cooperative scheduler</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: cooperative scheduler </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md78"></a>
Introduction</h1>
<p>Sometimes processes are a useful tool to work around the strict definition of a system and introduce logic in a different way, usually without resorting to the introduction of other components.</p>
<p><code>EnTT</code> offers a minimal support to this paradigm by introducing a few classes that users can use to define and execute cooperative processes.</p>
<h1><a class="anchor" id="autotoc_md79"></a>
The process</h1>
<p>A typical process must inherit from the <code>process</code> class template that stays true to the CRTP idiom. Moreover, derived classes must specify what's the intended type for elapsed times.</p>
<p>A process should expose publicly the following member functions whether required (note that it isn't required to define a function unless the derived class wants to <em>override</em> the default behavior):</p>
<ul>
<li><p class="startli"><code>void update(Delta, void *);</code></p>
<p class="startli">It's invoked once per tick until a process is explicitly aborted or it terminates either with or without errors. Even though it's not mandatory to declare this member function, as a rule of thumb each process should at least define it to work properly. The <code>void *</code> parameter is an opaque pointer to user data (if any) forwarded directly to the process during an update.</p>
</li>
<li><p class="startli"><code>void init();</code></p>
<p class="startli">It's invoked when the process joins the running queue of a scheduler. This happens as soon as it's attached to the scheduler if the process is a top level one, otherwise when it replaces its parent if the process is a continuation.</p>
</li>
<li><p class="startli"><code>void succeeded();</code></p>
<p class="startli">It's invoked in case of success, immediately after an update and during the same tick.</p>
</li>
<li><p class="startli"><code>void failed();</code></p>
<p class="startli">It's invoked in case of errors, immediately after an update and during the same tick.</p>
</li>
<li><p class="startli"><code>void aborted();</code></p>
<p class="startli">It's invoked only if a process is explicitly aborted. There is no guarantee that it executes in the same tick, this depends solely on whether the process is aborted immediately or not.</p>
</li>
</ul>
<p>Derived classes can also change the internal state of a process by invoking <code>succeed</code> and <code>fail</code>, as well as <code>pause</code> and <code>unpause</code> the process itself. All these are protected member functions made available to be able to manage the life cycle of a process from a derived class.</p>
<p>Here is a minimal example for the sake of curiosity:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_process: <a class="code" href="classentt_1_1process.html">entt::process</a>&lt;my_process, std::uint32_t&gt; {</div><div class="line"> <span class="keyword">using</span> delta_type = std::uint32_t;</div><div class="line"></div><div class="line"> <span class="keywordtype">void</span> update(delta_type delta, <span class="keywordtype">void</span> *) {</div><div class="line"> remaining -= std::min(remaining, delta);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line"></div><div class="line"> <span class="keywordflow">if</span>(!remaining) {</div><div class="line"> <a class="code" href="classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce">succeed</a>();</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"><span class="keyword">private</span>:</div><div class="line"> delta_type remaining{1000u};</div><div class="line">};</div></div><!-- fragment --><h2><a class="anchor" id="autotoc_md80"></a>
Adaptor</h2>
<p>Lambdas and functors can't be used directly with a scheduler for they are not properly defined processes with managed life cycles.<br />
This class helps in filling the gap and turning lambdas and functors into full featured processes usable by a scheduler.</p>
<p>The function call operator has a signature similar to the one of the <code>update</code> function of a process but for the fact that it receives two extra arguments to call whenever a process is terminated with success or with an error:</p>
<div class="fragment"><div class="line">void(Delta delta, <span class="keywordtype">void</span> *data, <span class="keyword">auto</span> succeed, <span class="keyword">auto</span> fail);</div></div><!-- fragment --><p>Parameters have the following meaning:</p>
<ul>
<li><code>delta</code> is the elapsed time.</li>
<li><code>data</code> is an opaque pointer to user data if any, <code>nullptr</code> otherwise.</li>
<li><code>succeed</code> is a function to call when a process terminates with success.</li>
<li><code>fail</code> is a function to call when a process terminates with errors.</li>
</ul>
<p>Both <code>succeed</code> and <code>fail</code> accept no parameters at all.</p>
<p>Note that usually users shouldn't worry about creating adaptors at all. A scheduler creates them internally each and every time a lambda or a functor is used as a process.</p>
<h1><a class="anchor" id="autotoc_md81"></a>
The scheduler</h1>
<p>A cooperative scheduler runs different processes and helps managing their life cycles.</p>
<p>Each process is invoked once per tick. If it terminates, it's removed automatically from the scheduler and it's never invoked again. Otherwise it's a good candidate to run one more time the next tick.<br />
A process can also have a child. In this case, the parent process is replaced with its child when it terminates and only if it returns with success. In case of errors, both the parent process and its child are discarded. This way, it's easy to create chain of processes to run sequentially.</p>
<p>Using a scheduler is straightforward. To create it, users must provide only the type for the elapsed times and no arguments at all:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1scheduler.html">entt::scheduler&lt;std::uint32_t&gt;</a> scheduler;</div></div><!-- fragment --><p>It has member functions to query its internal data structures, like <code>empty</code> or <code>size</code>, as well as a <code>clear</code> utility to reset it to a clean state:</p>
<div class="fragment"><div class="line"><span class="comment">// checks if there are processes still running</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = scheduler.<a class="code" href="classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb">empty</a>();</div><div class="line"></div><div class="line"><span class="comment">// gets the number of processes still running</span></div><div class="line"><a class="code" href="classentt_1_1scheduler.html#a7b08d5871918b39049c29e4daa62271f">entt::scheduler&lt;std::uint32_t&gt;::size_type</a> size = scheduler.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// resets the scheduler to its initial state and discards all the processes</span></div><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0">clear</a>();</div></div><!-- fragment --><p>To attach a process to a scheduler there are mainly two ways:</p>
<ul>
<li>If the process inherits from the <code>process</code> class template, it's enough to indicate its type and submit all the parameters required to construct it to the <code>attach</code> member function:</li>
</ul>
<div class="fragment"><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3">attach</a>&lt;my_process&gt;(<span class="stringliteral">&quot;foobar&quot;</span>);</div></div><!-- fragment --><ul>
<li>Otherwise, in case of a lambda or a functor, it's enough to provide an instance of the class to the <code>attach</code> member function:</li>
</ul>
<div class="fragment"><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3">attach</a>([](<span class="keyword">auto</span>...){ <span class="comment">/* ... */</span> });</div></div><!-- fragment --><p>In both cases, the return value is an opaque object that offers a <code>then</code> member function to use to create chains of processes to run sequentially.<br />
As a minimal example of use:</p>
<div class="fragment"><div class="line"><span class="comment">// schedules a task in the form of a lambda function</span></div><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a729c83e1983123c642a08cda67e486e3">attach</a>([](<span class="keyword">auto</span> delta, <span class="keywordtype">void</span> *, <span class="keyword">auto</span> succeed, <span class="keyword">auto</span> fail) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">})</div><div class="line"><span class="comment">// appends a child in the form of another lambda function</span></div><div class="line">.then([](<span class="keyword">auto</span> delta, <span class="keywordtype">void</span> *, <span class="keyword">auto</span> succeed, <span class="keyword">auto</span> fail) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">})</div><div class="line"><span class="comment">// appends a child in the form of a process class</span></div><div class="line">.then&lt;my_process&gt;();</div></div><!-- fragment --><p>To update a scheduler and therefore all its processes, the <code>update</code> member function is the way to go:</p>
<div class="fragment"><div class="line"><span class="comment">// updates all the processes, no user data are provided</span></div><div class="line">scheduler.update(delta);</div><div class="line"></div><div class="line"><span class="comment">// updates all the processes and provides them with custom data</span></div><div class="line">scheduler.update(delta, &amp;data);</div></div><!-- fragment --><p>In addition to these functions, the scheduler offers an <code>abort</code> member function that can be used to discard all the running processes at once:</p>
<div class="fragment"><div class="line"><span class="comment">// aborts all the processes abruptly ...</span></div><div class="line">scheduler.abort(<span class="keyword">true</span>);</div><div class="line"></div><div class="line"><span class="comment">// ... or gracefully during the next tick</span></div><div class="line">scheduler.abort();</div></div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+75 -31
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -109,7 +109,7 @@ The Registry, the Entity and the Component</h1>
User defined identifiers can be introduced by means of the <code>ENTT_OPAQUE_TYPE</code> macro if needed.</p>
<p>A registry is used both to construct and to destroy entities:</p>
<div class="fragment"><div class="line"><span class="comment">// constructs a naked entity with no components and returns its identifier</span></div><div class="line"><span class="keyword">auto</span> entity = registry.create();</div><div class="line"></div><div class="line"><span class="comment">// destroys an entity and all its components</span></div><div class="line">registry.destroy(entity);</div></div><!-- fragment --><p>There exists also an overload of the <code>create</code> and <code>destroy</code> member functions that accepts two iterators, that is a range to assign or to destroy. It can be used to create or destroy multiple entities at once:</p>
<div class="fragment"><div class="line"><span class="comment">// destroys all the entities in a range</span></div><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.view&lt;a_component, another_component&gt;();</div><div class="line">registry.destroy(<a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.begin(), <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.end());</div></div><!-- fragment --><p>In both cases, the <code>create</code> member function accepts also a list of default constructible types of components to assign to the entities before to return. It's a faster alternative to the creation and subsequent assignment of components in separate steps.</p>
<div class="fragment"><div class="line"><span class="comment">// destroys all the entities in a range</span></div><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.view&lt;a_component, another_component&gt;();</div><div class="line">registry.destroy(<a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.begin(), <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.end());</div></div><!-- fragment --><p>In both cases, the <code>create</code> member function accepts also a list of default constructible component types to assign to the entities before to return. It's a faster alternative to the creation and subsequent assignment of components in separate steps.</p>
<p>When an entity is destroyed, the registry can freely reuse it internally with a slightly different identifier. In particular, the version of an entity is increased each and every time it's discarded.<br />
In case entity identifiers are stored around, the registry offers all the functionalities required to test them and to get out of them the information they carry:</p>
<div class="fragment"><div class="line"><span class="comment">// returns true if the entity is still valid, false otherwise</span></div><div class="line"><span class="keywordtype">bool</span> b = registry.valid(entity);</div><div class="line"></div><div class="line"><span class="comment">// gets the version contained in the entity identifier</span></div><div class="line"><span class="keyword">auto</span> version = registry.version(entity);</div><div class="line"></div><div class="line"><span class="comment">// gets the actual version for the given entity</span></div><div class="line"><span class="keyword">auto</span> curr = registry.current(entity);</div></div><!-- fragment --><p>Components can be assigned to or removed from entities at any time with a few calls to member functions of the registry. As for the entities, the registry offers also a set of functionalities users can use to work with the components.</p>
@@ -276,11 +276,11 @@ Snapshot: complete vs continuous</h2>
<p>The <code>component</code> member function is a function template the aim of which is to store aside components. The presence of a template parameter list is a consequence of a couple of design choices from the past and in the present:</p>
<ul>
<li>First of all, there is no reason to force a user to serialize all the components at once and most of the times it isn't desiderable. As an example, in case the stuff for the HUD in a game is put into the registry for some reasons, its components can be freely discarded during a serialization step because probably the software already knows how to reconstruct the HUD correctly from scratch.</li>
<li>Furthermore, the registry makes heavy use of <em>type-erasure</em> techniques internally and doesn't know at any time what types of components it contains. Therefore being explicit at the call point is mandatory.</li>
<li>Furthermore, the registry makes heavy use of <em>type-erasure</em> techniques internally and doesn't know at any time what component types it contains. Therefore being explicit at the call point is mandatory.</li>
</ul>
<p>There exists also another version of the <code>component</code> member function that accepts a range of entities to serialize. This version is a bit slower than the other one, mainly because it iterates the range of entities more than once for internal purposes. However, it can be used to filter out those entities that shouldn't be serialized for some reasons.<br />
As an example:</p>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;serialize&gt;();</div><div class="line">output_archive output;</div><div class="line"></div><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215">snapshot</a>().component&lt;a_component, another_component&gt;(output, <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.cbegin(), <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.cend());</div></div><!-- fragment --><p>Note that <code>component</code> stores items along with entities. It means that it works properly without a call to the <code>entities</code> member function.</p>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;serialize&gt;();</div><div class="line">output_archive output;</div><div class="line"></div><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215">snapshot</a>().component&lt;a_component, another_component&gt;(output, <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.cbegin(), <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a>.cend());</div></div><!-- fragment --><p>Note that <code>component</code> stores items along with entities. It means that it works properly without a call to the <code>entities</code> member function.</p>
<p>Once a snapshot is created, there exist mainly two <em>ways</em> to load it: as a whole and in a kind of <em>continuous mode</em>.<br />
The following sections describe both loaders and archives in details.</p>
<h3><a class="anchor" id="autotoc_md30"></a>
@@ -335,7 +335,7 @@ Views and Groups</h1>
The former require that users indicate at compile-time what are the components involved and can make several optimizations because of that. The latter can be constructed at runtime instead and are a bit slower to iterate entities and components.<br />
In both cases, creating and destroying a view isn't expensive at all because views don't have any type of initialization. Moreover, views don't affect any other functionality of the registry and keep memory usage at a minimum.</p>
<p>Groups come in three different flavors: <em>full-owning groups</em>, <em>partial-owning groups</em> and <em>non-owning groups</em>. The main difference between them is in terms of performance.<br />
Groups can literally <em>own</em> one or more types of components. It means that they will be allowed to rearrange pools so as to speed up iterations. Roughly speaking: the more components a group owns, the faster it is to iterate them. On the other side, a given component can belong only to one group, so users have to define groups carefully to get the best out of them.</p>
Groups can literally <em>own</em> one or more component types. It means that they will be allowed to rearrange pools so as to speed up iterations. Roughly speaking: the more components a group owns, the faster it is to iterate them. On the other side, a given component can belong to multiple groups only if they are <em>nested</em>, so users have to define groups carefully to get the best out of them.</p>
<p>Continue reading for more details or refer to the inline documentation.</p>
<h2><a class="anchor" id="autotoc_md35"></a>
Views</h2>
@@ -348,13 +348,13 @@ Views</h2>
Refer to the inline documentation for all the details.</p>
<p>There is no need to store views around for they are extremely cheap to construct, even though they can be copied without problems and reused freely. Views also return newly created and correctly initialized iterators whenever <code>begin</code> or <code>end</code> are invoked.</p>
<p>Views share the way they are created by means of a registry:</p>
<div class="fragment"><div class="line"><span class="comment">// single component view</span></div><div class="line"><span class="keyword">auto</span> single = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position&gt;();</div><div class="line"></div><div class="line"><span class="comment">// multi component view</span></div><div class="line"><span class="keyword">auto</span> multi = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, velocity&gt;();</div></div><!-- fragment --><p>To iterate a view, either use it in a range-for loop:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, velocity&gt;();</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: view) {</div><div class="line"> <span class="comment">// a component at a time ...</span></div><div class="line"> <span class="keyword">auto</span> &amp;position = view.get&lt;position&gt;(entity);</div><div class="line"> <span class="keyword">auto</span> &amp;velocity = view.get&lt;velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ... or multiple components at once</span></div><div class="line"> <span class="keyword">auto</span> &amp;[pos, vel] = view.get&lt;position, velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Or rely on the <code>each</code> member function to iterate entities and get all their components at once:</p>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, velocity&gt;().each([](<span class="keyword">auto</span> entity, <span class="keyword">auto</span> &amp;pos, <span class="keyword">auto</span> &amp;vel) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>The <code>each</code> member function is highly optimized. Unless users want to iterate only entities or get only some of the components, this should be the preferred approach. Note that the entity can also be excluded from the parameter list if not required, but this won't improve performance for multi component views.<br />
<div class="fragment"><div class="line"><span class="comment">// single component view</span></div><div class="line"><span class="keyword">auto</span> single = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position&gt;();</div><div class="line"></div><div class="line"><span class="comment">// multi component view</span></div><div class="line"><span class="keyword">auto</span> multi = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, velocity&gt;();</div></div><!-- fragment --><p>Filtering entities by components is also supported:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, velocity&gt;(entt::exclude&lt;renderable&gt;);</div></div><!-- fragment --><p>To iterate a view, either use it in a range-for loop:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#af2118c00dea16193aee017d1408beb53">view</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, velocity&gt;();</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: view) {</div><div class="line"> <span class="comment">// a component at a time ...</span></div><div class="line"> <span class="keyword">auto</span> &amp;position = view.get&lt;position&gt;(entity);</div><div class="line"> <span class="keyword">auto</span> &amp;velocity = view.get&lt;velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ... or multiple components at once</span></div><div class="line"> <span class="keyword">auto</span> &amp;[pos, vel] = view.get&lt;position, velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Or rely on the <code>each</code> member function to iterate entities and get all their components at once:</p>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, velocity&gt;().each([](<span class="keyword">auto</span> entity, <span class="keyword">auto</span> &amp;pos, <span class="keyword">auto</span> &amp;vel) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>The <code>each</code> member function is highly optimized. Unless users want to iterate only entities or get only some of the components, this should be the preferred approach. Note that the entity can also be excluded from the parameter list if not required, but this won't improve performance for multi component views.<br />
There exists also an alternative version of <code>each</code> named <code>less</code> that works exactly as its counterpart but for the fact that it doesn't return empty components to the caller.</p>
<p>As a side note, when using a single component view, the most common error is to invoke <code>get</code> with the type of the component as a template parameter. This is probably due to the fact that it's required for multi component views:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, <span class="keyword">const</span> velocity&gt;();</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: view) {</div><div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> &amp;vel = view.get&lt;<span class="keyword">const</span> velocity&gt;(entity);</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>However, in case of a single component view, <code>get</code> doesn't accept a template parameter, since it's implicitly defined by the view itself:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;<span class="keyword">const</span> renderable&gt;();</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: view) {</div><div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> &amp;renderable = view.get(entity);</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p><b>Note</b>: prefer the <code>get</code> member function of a view instead of the <code>get</code> member function template of a registry during iterations, if possible. However, keep in mind that it works only with the components of the view itself.</p>
<p>As a side note, in the case of single component views, <code>get</code> accepts but doesn't strictly require a template parameter, since the type is implicitly defined:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;<span class="keyword">const</span> renderable&gt;();</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: view) {</div><div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> &amp;renderable = view.get(entity);</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p><b>Note</b>: prefer the <code>get</code> member function of a view instead of the <code>get</code> member function template of a registry during iterations, if possible. However, keep in mind that it works only with the components of the view itself.</p>
<h2><a class="anchor" id="autotoc_md36"></a>
Runtime views</h2>
<p>Runtime views iterate entities that have at least all the given components in their bags. During construction, these views look at the number of entities available for each component and pick up a reference to the smallest set of candidates in order to speed up iterations.<br />
@@ -367,7 +367,7 @@ Runtime views</h2>
<p><b>Note</b>: runtime views are meant for all those cases where users don't know at compile-time what components to use to iterate entities. This is particularly well suited to plugin systems and mods in general. Where possible, don't use runtime views, as their performance are slightly inferior to those of the other views.</p>
<h2><a class="anchor" id="autotoc_md37"></a>
Groups</h2>
<p>Groups are meant to iterate multiple components at once and offer a faster alternative to views. Roughly speaking, they just play in another league when compared to views.<br />
<p>Groups are meant to iterate multiple components at once and offer a (much) faster alternative to views. Roughly speaking, they just play in another league when compared to views.<br />
Groups overcome the performance of the other tools available but require to get the ownership of components and this sets some constraints on pools. On the other side, groups aren't an automatism that increases memory consumption, affects functionalities and tries to optimize iterations for all the possible combinations of components. Users can decide when to pay for groups and to what extent.<br />
The most interesting aspect of groups is that they fit <em>usage patterns</em>. Other solutions around usually try to optimize everything, because it is known that somewhere within the <em>everything</em> there are also our usage patterns. However this has a cost that isn't negligible, both in terms of performance and memory usage. Ironically, users pay the price also for things they don't want and this isn't something I like much. Even worse, one cannot easily disable such a behavior. Groups work differently instead and are designed to optimize only the real use cases when users find they need to.<br />
Another nice-to-have feature of groups is that they have no impact on memory consumption, put aside full non-owning groups that are pretty rare and should be avoided as long as possible.</p>
@@ -377,7 +377,7 @@ Groups</h2>
Refer to the inline documentation for all the details.</p>
<p>There is no need to store groups around for they are extremely cheap to construct, even though they can be copied without problems and reused freely. A group performs an initialization step the very first time it's requested and this could be quite costly. To avoid it, consider creating the group when no components have been assigned yet. If the registry is empty, preparation is extremely fast. Groups also return newly created and correctly initialized iterators whenever <code>begin</code> or <code>end</code> are invoked.</p>
<p>To iterate groups, either use them in a range-for loop:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5">group</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position&gt;(entt::get&lt;velocity&gt;);</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: group) {</div><div class="line"> <span class="comment">// a component at a time ...</span></div><div class="line"> <span class="keyword">auto</span> &amp;position = group.get&lt;position&gt;(entity);</div><div class="line"> <span class="keyword">auto</span> &amp;velocity = group.get&lt;velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ... or multiple components at once</span></div><div class="line"> <span class="keyword">auto</span> &amp;[pos, vel] = group.get&lt;position, velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Or rely on the <code>each</code> member function to iterate entities and get all their components at once:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespaceentt.html#a010d1bbf234dbca47e6755fc278e36b5">group</a> = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position&gt;(entt::get&lt;velocity&gt;);</div><div class="line"></div><div class="line"><span class="keywordflow">for</span>(<span class="keyword">auto</span> entity: group) {</div><div class="line"> <span class="comment">// a component at a time ...</span></div><div class="line"> <span class="keyword">auto</span> &amp;position = group.<a class="code" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153">get</a>&lt;position&gt;(entity);</div><div class="line"> <span class="keyword">auto</span> &amp;velocity = group.get&lt;velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ... or multiple components at once</span></div><div class="line"> <span class="keyword">auto</span> &amp;[pos, vel] = group.get&lt;position, velocity&gt;(entity);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Or rely on the <code>each</code> member function to iterate entities and get all their components at once:</p>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position&gt;(entt::get&lt;velocity&gt;).each([](<span class="keyword">auto</span> entity, <span class="keyword">auto</span> &amp;pos, <span class="keyword">auto</span> &amp;vel) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>The <code>each</code> member function is highly optimized. Unless users want to iterate only entities, this should be the preferred approach. Note that the entity can also be excluded from the parameter list if not required and it can improve even further the performance during iterations.</p>
<p><b>Note</b>: prefer the <code>get</code> member function of a group instead of the <code>get</code> member function template of a registry during iterations, if possible. However, keep in mind that it works only with the components of the group itself.</p>
<p>Let's go a bit deeper into the different types of groups made available by this library to know how they are constructed and what are the differences between them.</p>
@@ -387,16 +387,14 @@ Full-owning groups</h3>
<p>A full-owning group is created as:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position, velocity&gt;();</div></div><!-- fragment --><p>Filtering entities by components is also supported:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position, velocity&gt;(entt::exclude&lt;renderable&gt;);</div></div><!-- fragment --><p>Once created, the group gets the ownership of all the components specified in the template parameter list and arranges their pools so as to iterate all of them as fast as possible.</p>
<p>Sorting owned components is no longer allowed once the group has been created. However, full-owning groups can be sorted by means of their <code>sort</code> member functions, if required. Sorting a full-owning group affects all the instances of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the underlying data structure).<br />
The elements that aren't part of the group can still be sorted separately for each pool using the <code>sort</code> member function of the registry.</p>
<p>Sorting owned components is no longer allowed once the group has been created. However, full-owning groups can be sorted by means of their <code>sort</code> member functions, if required. Sorting a full-owning group affects all the instances of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the underlying data structure).</p>
<h3><a class="anchor" id="autotoc_md39"></a>
Partial-owning groups</h3>
<p>A partial-owning group works similarly to a full-owning group for the components it owns, but relies on indirection to get components owned by other groups. This isn't as fast as a full-owning group, but it's already much faster than views when there are only one or two free components to retrieve (the most common cases likely). In the worst case, it's not slower than views anyway.</p>
<p>A partial-owning group is created as:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position&gt;(entt::get&lt;velocity&gt;);</div></div><!-- fragment --><p>Filtering entities by components is also supported:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;position&gt;(entt::get&lt;velocity&gt;, entt::exclude&lt;renderable&gt;);</div></div><!-- fragment --><p>Once created, the group gets the ownership of all the components specified in the template parameter list and arranges their pools so as to iterate all of them as fast as possible. The ownership of the types provided via <code><a class="el" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e" title="Variable template for lists of observed components. ">entt::get</a></code> doesn't pass to the group instead.</p>
<p>Sorting owned components is no longer allowed once the group has been created. However, partial-owning groups can be sorted by means of their <code>sort</code> member functions, if required. Sorting a partial-owning group affects all the instances of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the underlying data structure).<br />
Regarding the owned types, the elements that aren't part of the group can still be sorted separately for each pool using the <code>sort</code> member function of the registry.</p>
<p>Sorting owned components is no longer allowed once the group has been created. However, partial-owning groups can be sorted by means of their <code>sort</code> member functions, if required. Sorting a partial-owning group affects all the instances of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the underlying data structure).</p>
<h3><a class="anchor" id="autotoc_md40"></a>
Non-owning groups</h3>
<p>Non-owning groups are usually fast enough, for sure faster than views and well suited for most of the cases. However, they require custom data structures to work properly and they increase memory consumption. As a rule of thumb, users should avoid using non-owning groups, if possible.</p>
@@ -404,18 +402,63 @@ Non-owning groups</h3>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;&gt;(entt::get&lt;position, velocity&gt;);</div></div><!-- fragment --><p>Filtering entities by components is also supported:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> group = registry.<a class="code" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>&lt;&gt;(entt::get&lt;position, velocity&gt;, entt::exclude&lt;renderable&gt;);</div></div><!-- fragment --><p>The group doesn't receive the ownership of any type of component in this case. This type of groups is therefore the least performing in general, but also the only one that can be used in any situation to improve a performance where necessary.</p>
<p>Non-owning groups can be sorted by means of their <code>sort</code> member functions, if required. Sorting a non-owning group affects all the instance of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the set of entities).</p>
<h1><a class="anchor" id="autotoc_md41"></a>
Types: const, non-const and all in between</h1>
<h3><a class="anchor" id="autotoc_md41"></a>
Nested groups</h3>
<p>A type of component cannot be owned by two or more conflicting groups such as:</p>
<ul>
<li><code>registry.group&lt;transform, sprite&gt;()</code>.</li>
<li><code>registry.group&lt;transform, rotation&gt;()</code>.</li>
</ul>
<p>However, the same type can be owned by groups belonging to the same <em>family</em>, also called <em>nested groups</em>, such as:</p>
<ul>
<li><code>registry.group&lt;sprite, transform&gt;()</code>.</li>
<li><code>registry.group&lt;sprite, transform, rotation&gt;()</code>.</li>
</ul>
<p>Fortunately, these are also very common cases if not the most common ones.<br />
This allows users to have the highest possible performance on a greater number of component combinations.</p>
<p>Two nested groups are such that they own at least one type of component and the list of component types involved by one of them is contained entirely in that of the other. More specifically, this applies independently to all component lists used to define a group.<br />
Therefore, the rules for defining whether two or more groups are nested can be summarized as:</p>
<ul>
<li>One of the groups involves one or more additional component types with respect to the other, whether they are owned, observed or excluded.</li>
<li>The list of component types owned by the most restrictive group is the same or contains entirely that of the others. This also applies to the list of observed and excluded components.</li>
</ul>
<p>It means that more nested groups <em>extend</em> the their parents by adding more conditions in the form of new components.</p>
<p>As mentioned, the components don't necessarily have to be all <em>owned</em> so that two groups can be considered nested. In other words, the following definitions are fully valid:</p>
<ul>
<li><code>registry.group&lt;sprite&gt;(<a class="el" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e" title="Variable template for lists of observed components. ">entt::get</a>&lt;renderable&gt;)</code>.</li>
<li><code>registry.group&lt;sprite, transform&gt;(<a class="el" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e" title="Variable template for lists of observed components. ">entt::get</a>&lt;renderable&gt;)</code>.</li>
<li><code>registry.group&lt;sprite, transform&gt;(<a class="el" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e" title="Variable template for lists of observed components. ">entt::get</a>&lt;renderable, rotation&gt;)</code>.</li>
</ul>
<p>Exclusion lists also play their part in this respect. When it comes to defining nested groups, an excluded type of component <code>T</code> is treated as being an observed type <code>not_T</code>. Therefore, these two definitions:</p>
<ul>
<li><code>registry.group&lt;sprite, transform&gt;()</code>.</li>
<li><code>registry.group&lt;sprite, transform&gt;(<a class="el" href="namespaceentt.html#a5b73210cef43c4db35ef8ce477cc38a6" title="Variable template for exclusion lists. ">entt::exclude</a>&lt;rotation&gt;)</code>.</li>
</ul>
<p>Are treated as if users were defining the following groups:</p>
<ul>
<li><code>group&lt;sprite, transform&gt;()</code>.</li>
<li><code>group&lt;sprite, transform&gt;(<a class="el" href="namespaceentt.html#a8c24ecc5ab0055f9f2a4725c95afb29e" title="Variable template for lists of observed components. ">entt::get</a>&lt;not_rotation&gt;)</code>.</li>
</ul>
<p>Where <code>not_rotation</code> is an empty tag present only when <code>rotation</code> is not.</p>
<p>Because of this, to define a new group that is more restrictive than an existing one, it's enough to take the list of component types of the latter and extend it by adding new component types either owned, observed or excluded, without any precautions depending on the case.<br />
The opposite is also true. To define a <em>larger</em> group, it will be enough to take an existing one and remove <em>constraints</em> from it, in whatever form they are expressed.<br />
Note that the greater the number of component types involved by a group, the more restrictive it is.</p>
<p>Despite the extreme flexibility of nested groups, which allow to independently use component types either owned, observed or excluded, the real strength of this tool lies in the possibility of defining a greater number of groups that <b>own</b> the same components, thus offering the best performance in more cases.<br />
In fact, given a list of component types involved by a group, the greater the number of those owned, the greater the performance of the group itself.</p>
<p>As a side note, it's no longer possible to sort all groups when defining nested ones. This is because the most restrictive groups share the elements with the less restrictive ones and ordering the latter would invalidate the former.<br />
However, given a family of nested groups, it's still possible to sort the most restrictive of them. To prevent users from having to remember which of their groups is the most restrictive, they offer the <code>sortable</code> member function to know if their items can be sorted or not.</p>
<h2><a class="anchor" id="autotoc_md42"></a>
Types: const, non-const and all in between</h2>
<p>The <code>registry</code> class offers two overloads when it comes to constructing views and groups: a const version and a non-const one. The former accepts both const and non-const types as template parameters, the latter accepts only const types instead.<br />
It means that views and groups can be constructed also from a const registry and they propagate the constness of the registry to the types involved. As an example:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1basic__view.html">entt::view&lt;const position, const velocity&gt;</a> view = std::as_const(registry).view&lt;<span class="keyword">const</span> position, <span class="keyword">const</span> velocity&gt;();</div></div><!-- fragment --><p>Consider the following definition for a non-const view instead:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1basic__view.html">entt::view&lt;position, const velocity&gt;</a> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, <span class="keyword">const</span> velocity&gt;();</div></div><!-- fragment --><p>In the example above, <code>view</code> can be used to access either read-only or writable <code>position</code> components while <code>velocity</code> components are read-only in all cases.<br />
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1basic__view.html">entt::view&lt;position, const velocity&gt;</a> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, <span class="keyword">const</span> velocity&gt;();</div></div><!-- fragment --><p>In the example above, <code>view</code> can be used to access either read-only or writable <code>position</code> components while <code>velocity</code> components are read-only in all cases.<br />
In other terms, these statements are all valid:</p>
<div class="fragment"><div class="line">position &amp;pos = view.get&lt;position&gt;(entity);</div><div class="line"><span class="keyword">const</span> position &amp;cpos = view.get&lt;<span class="keyword">const</span> position&gt;(entity);</div><div class="line"><span class="keyword">const</span> velocity &amp;cpos = view.get&lt;<span class="keyword">const</span> velocity&gt;(entity);</div><div class="line">std::tuple&lt;position &amp;, const velocity &amp;&gt; tup = view.get&lt;position, <span class="keyword">const</span> velocity&gt;(entity);</div><div class="line">std::tuple&lt;const position &amp;, const velocity &amp;&gt; ctup = view.get&lt;<span class="keyword">const</span> position, <span class="keyword">const</span> velocity&gt;(entity);</div></div><!-- fragment --><p>It's not possible to get non-const references to <code>velocity</code> components from the same view instead and these will result in compilation errors:</p>
<div class="fragment"><div class="line">velocity &amp;cpos = view.get&lt;velocity&gt;(entity);</div><div class="line">std::tuple&lt;position &amp;, velocity &amp;&gt; tup = view.get&lt;position, velocity&gt;(entity);</div><div class="line">std::tuple&lt;const position &amp;, velocity &amp;&gt; ctup = view.get&lt;<span class="keyword">const</span> position, velocity&gt;(entity);</div></div><!-- fragment --><p>Similarly, the <code>each</code> member functions will propagate constness to the type of the components returned during iterations:</p>
<div class="fragment"><div class="line">view.<a class="code" href="classentt_1_1basic__view.html#a1019208022f9a4a35ade26f3f35c097f">each</a>([](<span class="keyword">auto</span> entity, position &amp;pos, <span class="keyword">const</span> velocity &amp;vel) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>Obviously, a caller can still refer to the <code>position</code> components through a const reference because of the rules of the language that fortunately already allow it.</p>
<div class="fragment"><div class="line">view.each([](<span class="keyword">auto</span> entity, position &amp;pos, <span class="keyword">const</span> velocity &amp;vel) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>Obviously, a caller can still refer to the <code>position</code> components through a const reference because of the rules of the language that fortunately already allow it.</p>
<p>The same concepts apply to groups as well.</p>
<h2><a class="anchor" id="autotoc_md42"></a>
<h2><a class="anchor" id="autotoc_md43"></a>
Give me everything</h2>
<p>Views and groups are narrow windows on the entire list of entities. They work by filtering entities according to their components.<br />
In some cases there may be the need to iterate all the entities still in use regardless of their components. The registry offers a specific member function to do that:</p>
@@ -427,7 +470,7 @@ Give me everything</h2>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8">orphans</a>([](<span class="keyword">auto</span> entity) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>To test the <em>orphanity</em> of a single entity, use the member function <code>orphan</code> instead. It accepts a valid entity identifer as an argument and returns true in case the entity is an orphan, false otherwise.</p>
<p>In general, all these functions can result in poor performance.<br />
<code>each</code> is fairly slow because of some checks it performs on each and every entity. For similar reasons, <code>orphans</code> can be even slower. Both functions should not be used frequently to avoid the risk of a performance hit.</p>
<h2><a class="anchor" id="autotoc_md43"></a>
<h2><a class="anchor" id="autotoc_md44"></a>
What is allowed and what is not</h2>
<p>Most of the <em>ECS</em> available out there don't allow to create and destroy entities and components during iterations.<br />
<code>EnTT</code> partially solves the problem with a few limitations:</p>
@@ -437,7 +480,7 @@ What is allowed and what is not</h2>
</ul>
<p>In these cases, iterators aren't invalidated. To be clear, it doesn't mean that also references will continue to be valid.<br />
Consider the following example:</p>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position&gt;([&amp;](<span class="keyword">const</span> <span class="keyword">auto</span> entity, <span class="keyword">auto</span> &amp;pos) {</div><div class="line"> registry.<a class="code" href="classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e">assign</a>&lt;position&gt;(registry.<a class="code" href="classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59">create</a>(), 0., 0.);</div><div class="line"> pos.x = 0.; <span class="comment">// warning: dangling pointer</span></div><div class="line">});</div></div><!-- fragment --><p>The <code>each</code> member function won't break (because iterators aren't invalidated) but there are no guarantees on references. Use a common range-for loop and get components directly from the view or move the creation of components at the end of the function to avoid dangling pointers.</p>
<div class="fragment"><div class="line">registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position&gt;([&amp;](<span class="keyword">const</span> <span class="keyword">auto</span> entity, <span class="keyword">auto</span> &amp;pos) {</div><div class="line"> registry.<a class="code" href="classentt_1_1basic__registry.html#a3deb5b8f14eb1414c92e6ccb2065ce0e">assign</a>&lt;position&gt;(registry.<a class="code" href="classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59">create</a>(), 0., 0.);</div><div class="line"> pos.x = 0.; <span class="comment">// warning: dangling pointer</span></div><div class="line">});</div></div><!-- fragment --><p>The <code>each</code> member function won't break (because iterators aren't invalidated) but there are no guarantees on references. Use a common range-for loop and get components directly from the view or move the creation of components at the end of the function to avoid dangling pointers.</p>
<p>Iterators are invalidated instead and the behavior is undefined if an entity is modified or destroyed and it's not the one currently returned by the iterator nor a newly created one.<br />
To work around it, possible approaches are:</p>
<ul>
@@ -445,7 +488,7 @@ What is allowed and what is not</h2>
<li>Mark entities and components with a proper tag component that indicates they must be purged, then perform a second iteration to clean them up one by one.</li>
</ul>
<p>A notable side effect of this feature is that the number of required allocations is further reduced in most of the cases.</p>
<h3><a class="anchor" id="autotoc_md44"></a>
<h3><a class="anchor" id="autotoc_md45"></a>
More performance, more constraints</h3>
<p>Groups are a (much) faster alternative to views. However, the higher the performance, the greater the constraints on what is allowed and what is not.<br />
In particular, groups add in some rare cases a limitation on the creation of components during iterations. It happens in quite particular cases. Given the nature and the scope of the groups, it isn't something in which it will happen to come across probably, but it's good to know it anyway.</p>
@@ -458,15 +501,16 @@ More performance, more constraints</h3>
</ul>
<p>In other words, the limitation doesn't exist as long as a type is treated as a free type (as an example with multi component views and partial- or non-owning groups) or iterated with its own group, but it can occur if the type is used as a main type to rule on an iteration.<br />
This happens because groups own the pools of their components and organize the data internally to maximize performance. Because of that, full consistency for owned components is guaranteed only when they are iterated as part of their groups or as free types with multi component views and groups in general.</p>
<h1><a class="anchor" id="autotoc_md45"></a>
<h1><a class="anchor" id="autotoc_md46"></a>
Empty type optimization</h1>
<p>An empty type <code>T</code> is such that <code>std::is_empty_v&lt;T&gt;</code> returns true. They are also the same types for which <em>empty base optimization</em> (EBO) is possibile.<br />
<code>EnTT</code> handles these types in a special way, optimizing both in terms of performance and memory usage. However, this also has consequences that are worth mentioning.</p>
<p>When an empty type is detected, it's not instantiated in any case. Therefore, only the entities to which it's assigned are made available. All the iterators as well as the <code>get</code> member functions of the registry, the views and the groups will return temporary objects. Similarly, some functions such as <code>try_get</code> or the raw access to the list of components aren't available for this kind of types.<br />
On the other hand, iterations are faster because only the entities to which the type is assigned are considered. Moreover, less memory is used, since there doesn't exist any instance of the component, no matter how many entities it is assigned to.</p>
<p>For similar reasons, wherever a function type of a listener accepts a component, it cannot be caught by a non-const reference. Capture it by copy or by const reference instead.</p>
<p>More in general, none of the features offered by the library is affected, but for the ones that require to return actual instances.</p>
<h1><a class="anchor" id="autotoc_md46"></a>
<p>More in general, none of the features offered by the library is affected, but for the ones that require to return actual instances.<br />
This optimization can be disabled by defining the <code>ENTT_DISABLE_ETO</code> macro. In this case, the empty types will be treated like all other types, no matter what.</p>
<h1><a class="anchor" id="autotoc_md47"></a>
Multithreading</h1>
<p>In general, the entire registry isn't thread safe as it is. Thread safety isn't something that users should want out of the box for several reasons. Just to mention one of them: performance.<br />
Views, groups and consequently the approach adopted by <code>EnTT</code> are the great exception to the rule. It's true that views, groups and iterators in general aren't thread safe by themselves. Because of this users shouldn't try to iterate a set of components and modify the same set concurrently. However:</p>
@@ -476,15 +520,15 @@ Multithreading</h1>
</ul>
<p>This kind of entity-component systems can be used in single threaded applications as well as along with async stuff or multiple threads. Moreover, typical thread based models for <em>ECS</em> don't require a fully thread safe registry to work. Actually, users can reach the goal with the registry as it is while working with most of the common models.</p>
<p>Because of the few reasons mentioned above and many others not mentioned, users are completely responsible for synchronization whether required. On the other hand, they could get away with it without having to resort to particular expedients.</p>
<h2><a class="anchor" id="autotoc_md47"></a>
<h2><a class="anchor" id="autotoc_md48"></a>
Iterators</h2>
<p>A special mention is needed for the iterators returned by the views and the groups. Most of the time they meet the requirements of random access iterators, in all cases they meet at least the requirements of forward iterators.<br />
In other terms, they are suitable for use with the parallel algorithms of the standard library. If it's not clear, this is a great thing.</p>
<p>As an example, this kind of iterators can be used in combination with <code>std::for_each</code> and <code>std::execution::par</code> to parallelize the visit and therefore the update of the components returned by a view or a group, as long as the constraints previously discussed are respected:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>&lt;position, <span class="keyword">const</span> velocity&gt;();</div><div class="line"></div><div class="line">std::for_each(std::execution::par_unseq, view.<a class="code" href="classentt_1_1basic__view.html#a00d2bb01727273bf40acdf1a57588fc7">begin</a>(), view.<a class="code" href="classentt_1_1basic__view.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a">end</a>(), [&amp;view](<span class="keyword">auto</span> entity) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>This can increase the throughput considerably, even without resorting to who knows what artifacts that are difficult to maintain over time.</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> view = registry.<a class="code" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>&lt;position, <span class="keyword">const</span> velocity&gt;();</div><div class="line"></div><div class="line">std::for_each(std::execution::par_unseq, view.begin(), view.end(), [&amp;view](<span class="keyword">auto</span> entity) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>This can increase the throughput considerably, even without resorting to who knows what artifacts that are difficult to maintain over time.</p>
<p>Unfortunately, because of the limitations of the current revision of the standard, the parallel <code>std::for_each</code> accepts only forward iterators. This means that the iterators provided by the library cannot return proxy objects as references and <b>must</b> return actual reference types instead.<br />
This may change in the future and the iterators will almost certainly return both the entities and a list of references to their components sooner or later. Multi-pass guarantee won't break in any case and the performance should even benefit from it further.</p>
<h1><a class="anchor" id="autotoc_md48"></a>
<h1><a class="anchor" id="autotoc_md49"></a>
Beyond this document</h1>
<p>There are many other features and functions not listed in this document.<br />
<code>EnTT</code> and in particular its ECS part is in continuous development and some things could be forgotten, others could have been omitted on purpose to reduce the size of this file. Unfortunately, some parts may even be outdated and still to be updated.</p>
+6 -6
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -63,11 +63,11 @@ $(function() {
<div class="title">Crash Course: cooperative scheduler </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md79"></a>
<div class="textblock"><h1><a class="anchor" id="autotoc_md82"></a>
Introduction</h1>
<p>Sometimes processes are a useful tool to work around the strict definition of a system and introduce logic in a different way, usually without resorting to the introduction of other components.</p>
<p><code>EnTT</code> offers a minimal support to this paradigm by introducing a few classes that users can use to define and execute cooperative processes.</p>
<h1><a class="anchor" id="autotoc_md80"></a>
<h1><a class="anchor" id="autotoc_md83"></a>
The process</h1>
<p>A typical process must inherit from the <code>process</code> class template that stays true to the CRTP idiom. Moreover, derived classes must specify what's the intended type for elapsed times.</p>
<p>A process should expose publicly the following member functions whether required (note that it isn't required to define a function unless the derived class wants to <em>override</em> the default behavior):</p>
@@ -90,7 +90,7 @@ The process</h1>
</ul>
<p>Derived classes can also change the internal state of a process by invoking <code>succeed</code> and <code>fail</code>, as well as <code>pause</code> and <code>unpause</code> the process itself. All these are protected member functions made available to be able to manage the life cycle of a process from a derived class.</p>
<p>Here is a minimal example for the sake of curiosity:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_process: <a class="code" href="classentt_1_1process.html">entt::process</a>&lt;my_process, std::uint32_t&gt; {</div><div class="line"> <span class="keyword">using</span> delta_type = std::uint32_t;</div><div class="line"></div><div class="line"> <span class="keywordtype">void</span> update(delta_type delta, <span class="keywordtype">void</span> *) {</div><div class="line"> remaining -= std::min(remaining, delta);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line"></div><div class="line"> <span class="keywordflow">if</span>(!remaining) {</div><div class="line"> <a class="code" href="classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce">succeed</a>();</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"><span class="keyword">private</span>:</div><div class="line"> delta_type remaining{1000u};</div><div class="line">};</div></div><!-- fragment --><h2><a class="anchor" id="autotoc_md81"></a>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_process: <a class="code" href="classentt_1_1process.html">entt::process</a>&lt;my_process, std::uint32_t&gt; {</div><div class="line"> <span class="keyword">using</span> delta_type = std::uint32_t;</div><div class="line"></div><div class="line"> <span class="keywordtype">void</span> update(delta_type delta, <span class="keywordtype">void</span> *) {</div><div class="line"> remaining -= std::min(remaining, delta);</div><div class="line"></div><div class="line"> <span class="comment">// ...</span></div><div class="line"></div><div class="line"> <span class="keywordflow">if</span>(!remaining) {</div><div class="line"> <a class="code" href="classentt_1_1process.html#a43d63ba9304654f0209fc32d2c74f4ce">succeed</a>();</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"><span class="keyword">private</span>:</div><div class="line"> delta_type remaining{1000u};</div><div class="line">};</div></div><!-- fragment --><h2><a class="anchor" id="autotoc_md84"></a>
Adaptor</h2>
<p>Lambdas and functors can't be used directly with a scheduler for they are not properly defined processes with managed life cycles.<br />
This class helps in filling the gap and turning lambdas and functors into full featured processes usable by a scheduler.</p>
@@ -104,14 +104,14 @@ Adaptor</h2>
</ul>
<p>Both <code>succeed</code> and <code>fail</code> accept no parameters at all.</p>
<p>Note that usually users shouldn't worry about creating adaptors at all. A scheduler creates them internally each and every time a lambda or a functor is used as a process.</p>
<h1><a class="anchor" id="autotoc_md82"></a>
<h1><a class="anchor" id="autotoc_md85"></a>
The scheduler</h1>
<p>A cooperative scheduler runs different processes and helps managing their life cycles.</p>
<p>Each process is invoked once per tick. If it terminates, it's removed automatically from the scheduler and it's never invoked again. Otherwise it's a good candidate to run one more time the next tick.<br />
A process can also have a child. In this case, the parent process is replaced with its child when it terminates and only if it returns with success. In case of errors, both the parent process and its child are discarded. This way, it's easy to create chain of processes to run sequentially.</p>
<p>Using a scheduler is straightforward. To create it, users must provide only the type for the elapsed times and no arguments at all:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1scheduler.html">entt::scheduler&lt;std::uint32_t&gt;</a> scheduler;</div></div><!-- fragment --><p>It has member functions to query its internal data structures, like <code>empty</code> or <code>size</code>, as well as a <code>clear</code> utility to reset it to a clean state:</p>
<div class="fragment"><div class="line"><span class="comment">// checks if there are processes still running</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = scheduler.<a class="code" href="classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb">empty</a>();</div><div class="line"></div><div class="line"><span class="comment">// gets the number of processes still running</span></div><div class="line"><a class="code" href="classentt_1_1scheduler.html#a7b08d5871918b39049c29e4daa62271f">entt::scheduler&lt;std::uint32_t&gt;::size_type</a> size = scheduler.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// resets the scheduler to its initial state and discards all the processes</span></div><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0">clear</a>();</div></div><!-- fragment --><p>To attach a process to a scheduler there are mainly two ways:</p>
<div class="fragment"><div class="line"><span class="comment">// checks if there are processes still running</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = scheduler.<a class="code" href="classentt_1_1scheduler.html#a817d93653aec6a479b920143bd21edbb">empty</a>();</div><div class="line"></div><div class="line"><span class="comment">// gets the number of processes still running</span></div><div class="line"><a class="code" href="classentt_1_1scheduler.html#afcec47d6ec28a994af2a7097348ce59f">entt::scheduler&lt;std::uint32_t&gt;::size_type</a> size = scheduler.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// resets the scheduler to its initial state and discards all the processes</span></div><div class="line">scheduler.<a class="code" href="classentt_1_1scheduler.html#a5a0f92dbe54b58751237a567e86805e0">clear</a>();</div></div><!-- fragment --><p>To attach a process to a scheduler there are mainly two ways:</p>
<ul>
<li>If the process inherits from the <code>process</code> class template, it's enough to indicate its type and submit all the parameters required to construct it to the <code>attach</code> member function:</li>
</ul>
-123
View File
@@ -1,123 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: resource management</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: resource management </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md83"></a>
Introduction</h1>
<p>Resource management is usually one of the most critical part of a software like a game. Solutions are often tuned to the particular application. There exist several approaches and all of them are perfectly fine as long as they fit the requirements of the piece of software in which they are used.<br />
Examples are loading everything on start, loading on request, predictive loading, and so on.</p>
<p><code>EnTT</code> doesn't pretend to offer a <em>one-fits-all</em> solution for the different cases. Instead, it offers a minimal and perhaps trivial cache that can be useful most of the time during prototyping and sometimes even in a production environment.<br />
For those interested in the subject, the plan is to improve it considerably over time in terms of performance, memory usage and functionalities. Hoping to make it, of course, one step at a time.</p>
<h1><a class="anchor" id="autotoc_md84"></a>
The resource, the loader and the cache</h1>
<p>There are three main actors in the model: the resource, the loader and the cache.</p>
<p>The <em>resource</em> is whatever users want it to be. An image, a video, an audio, whatever. There are no limits.<br />
As a minimal example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_resource { <span class="keyword">const</span> <span class="keywordtype">int</span> value; };</div></div><!-- fragment --><p>A <em>loader</em> is a class the aim of which is to load a specific resource. It has to inherit directly from the dedicated base class as in the following example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader final: <a class="code" href="classentt_1_1resource__loader.html">entt::resource_loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">};</div></div><!-- fragment --><p>Where <code>my_resource</code> is the type of resources it creates.<br />
A resource loader must also expose a public const member function named <code>load</code> that accepts a variable number of arguments and returns a shared pointer to a resource.<br />
As an example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader: <a class="code" href="classentt_1_1resource__loader.html">entt::resource_loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> std::shared_ptr&lt;my_resource&gt; load(<span class="keywordtype">int</span> value)<span class="keyword"> const </span>{</div><div class="line"> <span class="comment">// ...</span></div><div class="line"> <span class="keywordflow">return</span> std::shared_ptr&lt;my_resource&gt;(<span class="keyword">new</span> my_resource{ value });</div><div class="line"> }</div><div class="line">};</div></div><!-- fragment --><p>In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.<br />
As a side note, base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.</p>
<p>Finally, a cache is a specialization of a class template tailored to a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">using</span> my_resource_cache = <a class="code" href="classentt_1_1resource__cache.html">entt::resource_cache&lt;my_resource&gt;</a>;</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_resource_cache cache{};</div></div><!-- fragment --><p>The idea is to create different caches for different types of resources and to manage each one independently in the most appropriate way.<br />
As a (very) trivial example, audio tracks can survive in most of the scenes of an application while meshes can be associated with a single scene and then discarded when users leave it.</p>
<p>A cache offers a set of basic functionalities to query its internal state and to <em>organize</em> it:</p>
<div class="fragment"><div class="line"><span class="comment">// gets the number of resources managed by a cache</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> size = cache.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// checks if a cache contains at least a valid resource</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = cache.empty();</div><div class="line"></div><div class="line"><span class="comment">// clears a cache and discards its content</span></div><div class="line">cache.clear();</div></div><!-- fragment --><p>Besides these member functions, a cache contains what is needed to load, use and discard resources of the given type.<br />
Before to explore this part of the interface, it makes sense to mention how resources are identified. The type of the identifiers to use is defined as:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1resource__cache.html#af16f00f17580fb3219a1d7a737b8b512">entt::resource_cache&lt;resource&gt;::resource_type</a></div></div><!-- fragment --><p>Where <code>resource_type</code> is an alias for <code><a class="el" href="classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd" title="Unsigned integer type. ">entt::hashed_string::hash_type</a></code>. Therefore, resource identifiers are created explicitly as in the following example:</p>
<div class="fragment"><div class="line">constexpr <span class="keyword">auto</span> identifier = <a class="code" href="classentt_1_1resource__cache.html#af16f00f17580fb3219a1d7a737b8b512">entt::resource_cache&lt;resource&gt;::resource_type</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>_hs};</div><div class="line"><span class="comment">// this is equivalent to the following</span></div><div class="line">constexpr <span class="keyword">auto</span> hs = <a class="code" href="classentt_1_1basic__hashed__string.html">entt::hashed_string</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>};</div></div><!-- fragment --><p>The class <code>hashed_string</code> is described in a dedicated section, so I won't go in details here.</p>
<p>Resources are loaded and thus stored in a cache through the <code>load</code> member function. It accepts the loader to use as a template parameter, the resource identifier and the parameters used to construct the resource as arguments:</p>
<div class="fragment"><div class="line"><span class="comment">// uses the identifier declared above</span></div><div class="line">cache.load&lt;my_loader&gt;(identifier, 0);</div><div class="line"></div><div class="line"><span class="comment">// uses a const char * directly as an identifier</span></div><div class="line">cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>The function returns a handle to the resource, whether it already exists or is loaded. In case the loader returns an invalid pointer, the handle is invalid as well and therefore it can be easily used with an <code>if</code> statement:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Before trying to load a resource, the <code>contains</code> member function can be used to know if a cache already contains a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> exists = cache.contains(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>There exists also a member function to use to force a reload of an already existing resource if needed:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.reload&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>As above, the function returns a handle to the resource that is invalid in case of errors. The <code>reload</code> member function is a kind of alias of the following snippet:</p>
<div class="fragment"><div class="line">cache.discard(identifier);</div><div class="line">cache.load&lt;my_loader&gt;(identifier, 42);</div></div><!-- fragment --><p>Where the <code>discard</code> member function is used to get rid of a resource if loaded. In case the cache doesn't contain a resource for the given identifier, <code>discard</code> does nothing and returns immediately.</p>
<p>So far, so good. Resources are finally loaded and stored within the cache.<br />
They are returned to users in the form of handles. To get one of them later on:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.handle(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>The idea behind a handle is the same of the flyweight pattern. In other terms, resources aren't copied around. Instead, instances are shared between handles. Users of a resource own a handle that guarantees that a resource isn't destroyed until all the handles are destroyed, even if the resource itself is removed from the cache.<br />
Handles are tiny objects both movable and copyable. They return the contained resource as a const reference on request:</p>
<ul>
<li>By means of the <code>get</code> member function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle.get();</div></div><!-- fragment --><ul>
<li>Using the proper cast operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle;</div></div><!-- fragment --><ul>
<li>Through the dereference operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = *handle;</div></div><!-- fragment --><p>The resource can also be accessed directly using the arrow operator if required:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = handle-&gt;value;</div></div><!-- fragment --><p>To test if a handle is still valid, the cast operator to <code>bool</code> allows users to use it in a guard:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Finally, in case there is the need to load a resource and thus to get a handle without storing the resource itself in the cache, users can rely on the <code>temp</code> member function template.<br />
The declaration is similar to that of <code>load</code>, a (possibly invalid) handle for the resource is returned also in this case:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.temp&lt;my_loader&gt;(42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Do not forget to test the handle for validity. Otherwise, getting a reference to the resource it points may result in undefined behavior. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
-123
View File
@@ -1,123 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: resource management</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: resource management </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md84"></a>
Introduction</h1>
<p>Resource management is usually one of the most critical part of a software like a game. Solutions are often tuned to the particular application. There exist several approaches and all of them are perfectly fine as long as they fit the requirements of the piece of software in which they are used.<br />
Examples are loading everything on start, loading on request, predictive loading, and so on.</p>
<p><code>EnTT</code> doesn't pretend to offer a <em>one-fits-all</em> solution for the different cases. Instead, it offers a minimal and perhaps trivial cache that can be useful most of the time during prototyping and sometimes even in a production environment.<br />
For those interested in the subject, the plan is to improve it considerably over time in terms of performance, memory usage and functionalities. Hoping to make it, of course, one step at a time.</p>
<h1><a class="anchor" id="autotoc_md85"></a>
The resource, the loader and the cache</h1>
<p>There are three main actors in the model: the resource, the loader and the cache.</p>
<p>The <em>resource</em> is whatever users want it to be. An image, a video, an audio, whatever. There are no limits.<br />
As a minimal example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_resource { <span class="keyword">const</span> <span class="keywordtype">int</span> value; };</div></div><!-- fragment --><p>A <em>loader</em> is a class the aim of which is to load a specific resource. It has to inherit directly from the dedicated base class as in the following example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader final: <a class="code" href="classentt_1_1resource__loader.html">entt::resource_loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">};</div></div><!-- fragment --><p>Where <code>my_resource</code> is the type of resources it creates.<br />
A resource loader must also expose a public const member function named <code>load</code> that accepts a variable number of arguments and returns a shared pointer to a resource.<br />
As an example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader: <a class="code" href="classentt_1_1resource__loader.html">entt::resource_loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> std::shared_ptr&lt;my_resource&gt; load(<span class="keywordtype">int</span> value)<span class="keyword"> const </span>{</div><div class="line"> <span class="comment">// ...</span></div><div class="line"> <span class="keywordflow">return</span> std::shared_ptr&lt;my_resource&gt;(<span class="keyword">new</span> my_resource{ value });</div><div class="line"> }</div><div class="line">};</div></div><!-- fragment --><p>In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.<br />
As a side note, base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.</p>
<p>Finally, a cache is a specialization of a class template tailored to a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">using</span> my_resource_cache = <a class="code" href="classentt_1_1resource__cache.html">entt::resource_cache&lt;my_resource&gt;</a>;</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_resource_cache cache{};</div></div><!-- fragment --><p>The idea is to create different caches for different types of resources and to manage each one independently in the most appropriate way.<br />
As a (very) trivial example, audio tracks can survive in most of the scenes of an application while meshes can be associated with a single scene and then discarded when users leave it.</p>
<p>A cache offers a set of basic functionalities to query its internal state and to <em>organize</em> it:</p>
<div class="fragment"><div class="line"><span class="comment">// gets the number of resources managed by a cache</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> size = cache.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// checks if a cache contains at least a valid resource</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = cache.empty();</div><div class="line"></div><div class="line"><span class="comment">// clears a cache and discards its content</span></div><div class="line">cache.clear();</div></div><!-- fragment --><p>Besides these member functions, a cache contains what is needed to load, use and discard resources of the given type.<br />
Before to explore this part of the interface, it makes sense to mention how resources are identified. The type of the identifiers to use is defined as:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1resource__cache.html#af16f00f17580fb3219a1d7a737b8b512">entt::resource_cache&lt;resource&gt;::resource_type</a></div></div><!-- fragment --><p>Where <code>resource_type</code> is an alias for <code><a class="el" href="classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd" title="Unsigned integer type. ">entt::hashed_string::hash_type</a></code>. Therefore, resource identifiers are created explicitly as in the following example:</p>
<div class="fragment"><div class="line">constexpr <span class="keyword">auto</span> identifier = <a class="code" href="classentt_1_1resource__cache.html#af16f00f17580fb3219a1d7a737b8b512">entt::resource_cache&lt;resource&gt;::resource_type</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>_hs};</div><div class="line"><span class="comment">// this is equivalent to the following</span></div><div class="line">constexpr <span class="keyword">auto</span> hs = <a class="code" href="classentt_1_1basic__hashed__string.html">entt::hashed_string</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>};</div></div><!-- fragment --><p>The class <code>hashed_string</code> is described in a dedicated section, so I won't go in details here.</p>
<p>Resources are loaded and thus stored in a cache through the <code>load</code> member function. It accepts the loader to use as a template parameter, the resource identifier and the parameters used to construct the resource as arguments:</p>
<div class="fragment"><div class="line"><span class="comment">// uses the identifier declared above</span></div><div class="line">cache.load&lt;my_loader&gt;(identifier, 0);</div><div class="line"></div><div class="line"><span class="comment">// uses a const char * directly as an identifier</span></div><div class="line">cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>The function returns a handle to the resource, whether it already exists or is loaded. In case the loader returns an invalid pointer, the handle is invalid as well and therefore it can be easily used with an <code>if</code> statement:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Before trying to load a resource, the <code>contains</code> member function can be used to know if a cache already contains a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> exists = cache.contains(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>There exists also a member function to use to force a reload of an already existing resource if needed:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.reload&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>As above, the function returns a handle to the resource that is invalid in case of errors. The <code>reload</code> member function is a kind of alias of the following snippet:</p>
<div class="fragment"><div class="line">cache.discard(identifier);</div><div class="line">cache.load&lt;my_loader&gt;(identifier, 42);</div></div><!-- fragment --><p>Where the <code>discard</code> member function is used to get rid of a resource if loaded. In case the cache doesn't contain a resource for the given identifier, <code>discard</code> does nothing and returns immediately.</p>
<p>So far, so good. Resources are finally loaded and stored within the cache.<br />
They are returned to users in the form of handles. To get one of them later on:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.handle(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>The idea behind a handle is the same of the flyweight pattern. In other terms, resources aren't copied around. Instead, instances are shared between handles. Users of a resource own a handle that guarantees that a resource isn't destroyed until all the handles are destroyed, even if the resource itself is removed from the cache.<br />
Handles are tiny objects both movable and copyable. They return the contained resource as a const reference on request:</p>
<ul>
<li>By means of the <code>get</code> member function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle.get();</div></div><!-- fragment --><ul>
<li>Using the proper cast operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle;</div></div><!-- fragment --><ul>
<li>Through the dereference operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = *handle;</div></div><!-- fragment --><p>The resource can also be accessed directly using the arrow operator if required:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = handle-&gt;value;</div></div><!-- fragment --><p>To test if a handle is still valid, the cast operator to <code>bool</code> allows users to use it in a guard:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Finally, in case there is the need to load a resource and thus to get a handle without storing the resource itself in the cache, users can rely on the <code>temp</code> member function template.<br />
The declaration is similar to that of <code>load</code>, a (possibly invalid) handle for the resource is returned also in this case:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.temp&lt;my_loader&gt;(42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Do not forget to test the handle for validity. Otherwise, getting a reference to the resource it points may result in undefined behavior. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+45 -79
View File
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Crash Course: events, signals and everything in between</title>
<title>EnTT: Crash Course: resource management</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -60,92 +60,58 @@ $(function() {
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Crash Course: events, signals and everything in between </div> </div>
<div class="title">Crash Course: resource management </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md87"></a>
Introduction</h1>
<p>Signals are usually a core part of games and software architectures in general.<br />
Roughly speaking, they help to decouple the various parts of a system while allowing them to communicate with each other somehow.</p>
<p>The so called _modern C++_ comes with a tool that can be useful in these terms, the <code>std::function</code>. As an example, it can be used to create delegates.<br />
However, there is no guarantee that an <code>std::function</code> does not perform allocations under the hood and this could be problematic sometimes. Furthermore, it solves a problem but may not adapt well to other requirements that may arise from time to time.</p>
<p>In case that the flexibility and power of an <code>std::function</code> isn't required or if the price to pay for them is too high,<code>EnTT</code> offers a complete set of lightweight classes to solve the same and many other problems.</p>
<p>Resource management is usually one of the most critical part of a software like a game. Solutions are often tuned to the particular application. There exist several approaches and all of them are perfectly fine as long as they fit the requirements of the piece of software in which they are used.<br />
Examples are loading everything on start, loading on request, predictive loading, and so on.</p>
<p><code>EnTT</code> doesn't pretend to offer a <em>one-fits-all</em> solution for the different cases. Instead, it offers a minimal and perhaps trivial cache that can be useful most of the time during prototyping and sometimes even in a production environment.<br />
For those interested in the subject, the plan is to improve it considerably over time in terms of performance, memory usage and functionalities. Hoping to make it, of course, one step at a time.</p>
<h1><a class="anchor" id="autotoc_md88"></a>
Delegate</h1>
<p>A delegate can be used as a general purpose invoker with no memory overhead for free functions and members provided along with an instance on which to invoke them.<br />
It does not claim to be a drop-in replacement for an <code>std::function</code>, so do not expect to use it whenever an <code>std::function</code> fits well. That said, it's most likely even a better fit than an <code>std::function</code> in a lot of cases, so expect to use it quite a lot anyway.</p>
<p>The interface is trivial. It offers a default constructor to create empty delegates:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1delegate.html">entt::delegate&lt;int(int)&gt;</a> <a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>{};</div></div><!-- fragment --><p>All what is needed to create an instance is to specify the type of the function the delegate will <em>contain</em>, that is the signature of the free function or the member one wants to assign to it.</p>
<p>Attempting to use an empty delegate by invoking its function call operator results in undefined behavior or most likely a crash. Before to use a delegate, it must be initialized.<br />
There exists a bunch of overloads of the <code>connect</code> member function to do that. As an example of use:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> f(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i; }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>my_struct {</div><div class="line"> <span class="keywordtype">int</span> f(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;i) { <span class="keywordflow">return</span> i }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// bind a free function to the delegate</span></div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;f&gt;();</div><div class="line"></div><div class="line"><span class="comment">// bind a member function to the delegate</span></div><div class="line">my_struct instance;</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;my_struct::f&gt;(instance);</div></div><!-- fragment --><p>The delegate class accepts also data members, if needed. In this case, the function type of the delegate is such that the parameter list is empty and the value of the data member is at least convertible to the return type.</p>
<p>Free functions having type equivalent to <code>void(T &amp;, args...)</code> are accepted as well. In this case, <code>T &amp;</code> is considered a payload and the function will receive it back every time it's invoked. In other terms, this works just fine with the above definition:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g(<span class="keyword">const</span> <span class="keywordtype">char</span> &amp;c, <span class="keywordtype">int</span> i) { <span class="comment">/* ... */</span> }</div><div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span> c = <span class="charliteral">&#39;c&#39;</span>;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;g&gt;(c);</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>The function <code>g</code> will be invoked with a reference to <code>c</code> and <code>42</code>. However, the function type of the delegate is still <code>void(int)</code>. This is also the signature of its function call operator.</p>
<p>Another interesting aspect of the delegate class is that it accepts also functions with a list of parameters that is shorter than that of the function type used to specialize the delegate itself.<br />
The following code is therefore perfectly valid:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g() { <span class="comment">/* ... */</span> }</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;g&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>Where the function type of the delegate is <code>void(int)</code> as above. It goes without saying that the extra arguments are silently discarded internally.<br />
v This is a nice-to-have feature in a lot of cases, as an example when the <code>delegate</code> class is used as a building block of a signal-slot system.</p>
<p>To create and initialize a delegate at once, there are a few specialized constructors. Because of the rules of the language, the listener is provided by means of the <code><a class="el" href="namespaceentt.html#af1e73acd6f3d892955819677dc2664b7" title="Constant of type connect_arg_t used to disambiguate calls. ">entt::connect_arg</a></code> variable template:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1delegate.html">entt::delegate&lt;int(int)&gt;</a> func{entt::connect_arg&lt;&amp;f&gt;};</div></div><!-- fragment --><p>Aside <code>connect</code>, a <code>disconnect</code> counterpart isn't provided. Instead, there exists a <code>reset</code> member function to use to clear a delegate.<br />
To know if a delegate is empty, it can be used explicitly in every conditional statement:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(delegate) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Finally, to invoke a delegate, the function call operator is the way to go as already shown in the examples above:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ret = <a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>In all cases, the listeners don't have to strictly follow the signature of the delegate. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given result type, everything works just fine.</p>
<h1><a class="anchor" id="autotoc_md89"></a>
Signals</h1>
<p>Signal handlers work with references to classes, function pointers and pointers to members. Listeners can be any kind of objects and users are in charge of connecting and disconnecting them from a signal to avoid crashes due to different lifetimes. On the other side, performance shouldn't be affected that much by the presence of such a signal handler.<br />
Signals make use of delegates internally and therefore they undergo the same rules and offer similar functionalities. It may be a good idea to consult the documentation of the <code>delegate</code> class for further information.</p>
<p>A signal handler can be used as a private data member without exposing any <em>publish</em> functionality to the clients of a class. The basic idea is to impose a clear separation between the signal itself and the <code>sink</code> class, that is a tool to be used to connect and disconnect listeners on the fly.</p>
<p>The API of a signal handler is straightforward. The most important thing is that it comes in two forms: with and without a collector. In case a signal is provided with a collector, all the values returned by the listeners can be literally <em>collected</em> and used later by the caller. Otherwise it works just like a plain signal that emits events from time to time.<br />
To create instances of signal handlers it is sufficient to provide the type of function to which they refer:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1sigh.html">entt::sigh&lt;void(int, char)&gt;</a> signal;</div></div><!-- fragment --><p>Signals offer all the basic functionalities required to know how many listeners they contain (<code>size</code>) or if they contain at least a listener (<code>empty</code>), as well as a function to use to swap handlers (<code>swap</code>).</p>
<p>Besides them, there are member functions to use both to connect and disconnect listeners in all their forms by means of a sink:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> foo(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> bar(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><a class="code" href="classentt_1_1sink.html">entt::sink</a> <a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>{signal};</div><div class="line">listener instance;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;foo&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;listener::bar&gt;(instance);</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="comment">// disconnects a free function</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;foo&gt;();</div><div class="line"></div><div class="line"><span class="comment">// disconnect a member function of an instance</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;listener::bar&gt;(instance);</div><div class="line"></div><div class="line"><span class="comment">// disconnect all the member functions of an instance, if any</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect(instance);</div><div class="line"></div><div class="line"><span class="comment">// discards all the listeners at once</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect();</div></div><!-- fragment --><p>As shown above, the listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.<br />
The <code>connect</code> member function returns by default a <code>connection</code> object to be used as an alternative to break a connection by means of its <code>release</code> member function. A <code>scoped_connection</code> can also be created from a connection. In this case, the link is broken automatically as soon as the object goes out of scope.</p>
<p>Once listeners are attached (or even if there are no listeners at all), events and data in general can be published through a signal by means of the <code>publish</code> member function:</p>
<div class="fragment"><div class="line">signal.publish(42, <span class="charliteral">&#39;c&#39;</span>);</div></div><!-- fragment --><p>To collect data, the <code>collect</code> member function should be used instead. Below is a minimal example to show how to use it:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> f() { <span class="keywordflow">return</span> 0; }</div><div class="line"><span class="keywordtype">int</span> g() { <span class="keywordflow">return</span> 1; }</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><a class="code" href="classentt_1_1sigh.html">entt::sigh&lt;int()&gt;</a> signal;</div><div class="line"><a class="code" href="classentt_1_1sink.html">entt::sink</a> <a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>{signal};</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;f&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;g&gt;();</div><div class="line"></div><div class="line">std::vector&lt;int&gt; vec{};</div><div class="line">signal.collect([&amp;vec](<span class="keywordtype">int</span> value) { vec.push_back(value); });</div><div class="line"></div><div class="line">assert(vec[0] == 0);</div><div class="line">assert(vec[1] == 1);</div></div><!-- fragment --><p>A collector must expose a function operator that accepts as an argument a type to which the return type of the listeners can be converted. Moreover, it can optionally return a boolean value that is true to stop collecting data, false otherwise. This way one can avoid calling all the listeners in case it isn't necessary.<br />
Functors can also be used in place of a lambda. Since the collector is copied when invoking the <code>collect</code> member function, <code>std::ref</code> is the way to go in this case:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_collector {</div><div class="line"> std::vector&lt;int&gt; vec{};</div><div class="line"></div><div class="line"> <span class="keywordtype">bool</span> operator()(<span class="keywordtype">int</span> v) noexcept {</div><div class="line"> vec.push_back(v);</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_collector <a class="code" href="namespaceentt.html#aea8b073b774362fe800d9cce3542927a">collector</a>;</div><div class="line">signal.collect(std::ref(collector));</div></div><!-- fragment --><h1><a class="anchor" id="autotoc_md90"></a>
Event dispatcher</h1>
<p>The event dispatcher class is designed so as to be used in a loop. It allows users both to trigger immediate events or to queue events to be published all together once per tick.<br />
This class shares part of its API with the one of the signal handler, but it doesn't require that all the types of events are specified when declared:</p>
<div class="fragment"><div class="line"><span class="comment">// define a general purpose dispatcher</span></div><div class="line"><a class="code" href="classentt_1_1dispatcher.html">entt::dispatcher</a> dispatcher{};</div></div><!-- fragment --><p>In order to register an instance of a class to a dispatcher, its type must expose one or more member functions the arguments of which are such that <code>const E &amp;</code> can be converted to them for each type of event <code>E</code>, no matter what the return value is.<br />
The name of the member function aimed to receive the event must be provided to the <code>connect</code> member function of the sink in charge for the specific event:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>an_event { <span class="keywordtype">int</span> value; };</div><div class="line"><span class="keyword">struct </span>another_event {};</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> receive(<span class="keyword">const</span> an_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line"> <span class="keywordtype">void</span> method(<span class="keyword">const</span> another_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">listener listener;</div><div class="line">dispatcher.sink&lt;an_event&gt;().connect&lt;&amp;listener::receive&gt;(listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().connect&lt;&amp;listener::method&gt;(listener);</div></div><!-- fragment --><p>The <code>disconnect</code> member function follows the same pattern and can be used to remove one listener at a time or all of them at once:</p>
<div class="fragment"><div class="line">dispatcher.sink&lt;an_event&gt;().disconnect&lt;&amp;listener::receive&gt;(listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().disconnect(listener);</div></div><!-- fragment --><p>The <code>trigger</code> member function serves the purpose of sending an immediate event to all the listeners registered so far. It offers a convenient approach that relieves users from having to create the event itself. Instead, it's enough to specify the type of event and provide all the parameters required to construct it.<br />
The resource, the loader and the cache</h1>
<p>There are three main actors in the model: the resource, the loader and the cache.</p>
<p>The <em>resource</em> is whatever users want it to be. An image, a video, an audio, whatever. There are no limits.<br />
As a minimal example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_resource { <span class="keyword">const</span> <span class="keywordtype">int</span> value; };</div></div><!-- fragment --><p>A <em>loader</em> is a class the aim of which is to load a specific resource. It has to inherit directly from the dedicated base class as in the following example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader final: <a class="code" href="classentt_1_1loader.html">entt::loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">};</div></div><!-- fragment --><p>Where <code>my_resource</code> is the type of resources it creates.<br />
A resource loader must also expose a public const member function named <code>load</code> that accepts a variable number of arguments and returns a shared pointer to a resource.<br />
As an example:</p>
<div class="fragment"><div class="line">dispatcher.trigger&lt;an_event&gt;(42);</div><div class="line">dispatcher.trigger&lt;another_event&gt;();</div></div><!-- fragment --><p>Listeners are invoked immediately, order of execution isn't guaranteed. This method can be used to push around urgent messages like an <em>is terminating</em> notification on a mobile app.</p>
<p>On the other hand, the <code>enqueue</code> member function queues messages together and allows to maintain control over the moment they are sent to listeners. The signature of this method is more or less the same of <code>trigger</code>:</p>
<div class="fragment"><div class="line">dispatcher.enqueue&lt;an_event&gt;(42);</div><div class="line">dispatcher.enqueue&lt;another_event&gt;();</div></div><!-- fragment --><p>Events are stored aside until the <code>update</code> member function is invoked, then all the messages that are still pending are sent to the listeners at once:</p>
<div class="fragment"><div class="line"><span class="comment">// emits all the events of the given type at once</span></div><div class="line">dispatcher.update&lt;my_event&gt;();</div><div class="line"></div><div class="line"><span class="comment">// emits all the events queued so far at once</span></div><div class="line">dispatcher.update();</div></div><!-- fragment --><p>This way users can embed the dispatcher in a loop and literally dispatch events once per tick to their systems.</p>
<h1><a class="anchor" id="autotoc_md91"></a>
Event emitter</h1>
<p>A general purpose event emitter thought mainly for those cases where it comes to working with asynchronous stuff.<br />
Originally designed to fit the requirements of <a href="https://github.com/skypjack/uvw"><code>uvw</code></a> (a wrapper for <code>libuv</code> written in modern C++), it was adapted later to be included in this library.</p>
<p>To create a custom emitter type, derived classes must inherit directly from the base class as:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_emitter: emitter&lt;my_emitter&gt; {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>The full list of accepted types of events isn't required. Handlers are created internally on the fly and thus each type of event is accepted by default.</p>
<p>Whenever an event is published, an emitter provides the listeners with a reference to itself along with a const reference to the event. Therefore listeners have an handy way to work with it without incurring in the need of capturing a reference to the emitter itself.<br />
In addition, an opaque object is returned each time a connection is established between an emitter and a listener, allowing the caller to disconnect them at a later time.<br />
The opaque object used to handle connections is both movable and copyable. On the other side, an event emitter is movable but not copyable by default.</p>
<p>To create new instances of an emitter, no arguments are required:</p>
<div class="fragment"><div class="line">my_emitter emitter{};</div></div><!-- fragment --><p>Listeners must be movable and callable objects (free functions, lambdas, functors, <code>std::function</code>s, whatever) whose function type is:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> Event &amp;, my_emitter &amp;)</div></div><!-- fragment --><p>Where <code>Event</code> is the type of event they want to listen.<br />
There are two ways to attach a listener to an event emitter that differ slightly from each other:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_loader: <a class="code" href="classentt_1_1loader.html">entt::loader</a>&lt;my_loader, my_resource&gt; {</div><div class="line"> std::shared_ptr&lt;my_resource&gt; load(<span class="keywordtype">int</span> value)<span class="keyword"> const </span>{</div><div class="line"> <span class="comment">// ...</span></div><div class="line"> <span class="keywordflow">return</span> std::shared_ptr&lt;my_resource&gt;(<span class="keyword">new</span> my_resource{ value });</div><div class="line"> }</div><div class="line">};</div></div><!-- fragment --><p>In general, resource loaders should not have a state or retain data of any type. They should let the cache manage their resources instead.<br />
As a side note, base class and CRTP idiom aren't strictly required with the current implementation. One could argue that a cache can easily work with loaders of any type. However, future changes won't be breaking ones by forcing the use of a base class today and that's why the model is already in its place.</p>
<p>Finally, a cache is a specialization of a class template tailored to a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">using</span> my_cache = <a class="code" href="structentt_1_1cache.html">entt::cache&lt;my_resource&gt;</a>;</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_cache cache{};</div></div><!-- fragment --><p>The idea is to create different caches for different types of resources and to manage each one independently in the most appropriate way.<br />
As a (very) trivial example, audio tracks can survive in most of the scenes of an application while meshes can be associated with a single scene and then discarded when users leave it.</p>
<p>A cache offers a set of basic functionalities to query its internal state and to <em>organize</em> it:</p>
<div class="fragment"><div class="line"><span class="comment">// gets the number of resources managed by a cache</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> size = cache.<a class="code" href="classentt_1_1scheduler.html#ab0c473e6d4733bdb78f3dc26147de4ad">size</a>();</div><div class="line"></div><div class="line"><span class="comment">// checks if a cache contains at least a valid resource</span></div><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> empty = cache.empty();</div><div class="line"></div><div class="line"><span class="comment">// clears a cache and discards its content</span></div><div class="line">cache.clear();</div></div><!-- fragment --><p>Besides these member functions, a cache contains what is needed to load, use and discard resources of the given type.<br />
Before to explore this part of the interface, it makes sense to mention how resources are identified. The type of the identifiers to use is defined as:</p>
<div class="fragment"><div class="line"><a class="code" href="structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639">entt::cache&lt;resource&gt;::id_type</a></div></div><!-- fragment --><p>Where <code>id_type</code> is an alias for <code><a class="el" href="classentt_1_1basic__hashed__string.html#a7ee7dca5383cf4507949dc1261ca5efd" title="Unsigned integer type. ">entt::hashed_string::hash_type</a></code>. Therefore, resource identifiers are created explicitly as in the following example:</p>
<div class="fragment"><div class="line">constexpr <span class="keyword">auto</span> identifier = <a class="code" href="structentt_1_1cache.html#a1baf9a66880b54284abb9a492229c639">entt::cache&lt;resource&gt;::id_type</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>_hs};</div><div class="line"><span class="comment">// this is equivalent to the following</span></div><div class="line">constexpr <span class="keyword">auto</span> hs = <a class="code" href="classentt_1_1basic__hashed__string.html">entt::hashed_string</a>{<span class="stringliteral">&quot;my/resource/identifier&quot;</span>};</div></div><!-- fragment --><p>The class <code>hashed_string</code> is described in a dedicated section, so I won't go in details here.</p>
<p>Resources are loaded and thus stored in a cache through the <code>load</code> member function. It accepts the loader to use as a template parameter, the resource identifier and the parameters used to construct the resource as arguments:</p>
<div class="fragment"><div class="line"><span class="comment">// uses the identifier declared above</span></div><div class="line">cache.load&lt;my_loader&gt;(identifier, 0);</div><div class="line"></div><div class="line"><span class="comment">// uses a const char * directly as an identifier</span></div><div class="line">cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>The function returns a handle to the resource, whether it already exists or is loaded. In case the loader returns an invalid pointer, the handle is invalid as well and therefore it can be easily used with an <code>if</code> statement:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.load&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Before trying to load a resource, the <code>contains</code> member function can be used to know if a cache already contains a specific resource:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> exists = cache.contains(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>There exists also a member function to use to force a reload of an already existing resource if needed:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.reload&lt;my_loader&gt;(<span class="stringliteral">&quot;another/identifier&quot;</span>_hs, 42);</div></div><!-- fragment --><p>As above, the function returns a handle to the resource that is invalid in case of errors. The <code>reload</code> member function is a kind of alias of the following snippet:</p>
<div class="fragment"><div class="line">cache.discard(identifier);</div><div class="line">cache.load&lt;my_loader&gt;(identifier, 42);</div></div><!-- fragment --><p>Where the <code>discard</code> member function is used to get rid of a resource if loaded. In case the cache doesn't contain a resource for the given identifier, <code>discard</code> does nothing and returns immediately.</p>
<p>So far, so good. Resources are finally loaded and stored within the cache.<br />
They are returned to users in the form of handles. To get one of them later on:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> handle = cache.handle(<span class="stringliteral">&quot;my/identifier&quot;</span>_hs);</div></div><!-- fragment --><p>The idea behind a handle is the same of the flyweight pattern. In other terms, resources aren't copied around. Instead, instances are shared between handles. Users of a resource own a handle that guarantees that a resource isn't destroyed until all the handles are destroyed, even if the resource itself is removed from the cache.<br />
Handles are tiny objects both movable and copyable. They return the contained resource as a const reference on request:</p>
<ul>
<li>To register a long-lived listener, use the <code>on</code> member function. It is meant to register a listener designed to be invoked more than once for the given event type.<br />
As an example:</li>
<li>By means of the <code>get</code> member function:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> conn = emitter.on&lt;my_event&gt;([](<span class="keyword">const</span> my_event &amp;event, my_emitter &amp;emitter) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.</p>
<ul>
<li>To register a short-lived listener, use the <code>once</code> member function. It is meant to register a listener designed to be invoked only once for the given event type. The listener is automatically disconnected after the first invocation.<br />
As an example:</li>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle.get();</div></div><!-- fragment --><ul>
<li>Using the proper cast operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">auto</span> conn = emitter.once&lt;my_event&gt;([](<span class="keyword">const</span> my_event &amp;event, my_emitter &amp;emitter) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">});</div></div><!-- fragment --><p>The connection object can be freely discarded. Otherwise, it can be used later to disconnect the listener if required.</p>
<p>In both cases, the connection object can be used with the <code>erase</code> member function:</p>
<div class="fragment"><div class="line">emitter.erase(conn);</div></div><!-- fragment --><p>There are also two member functions to use either to disconnect all the listeners for a given type of event or to clear the emitter:</p>
<div class="fragment"><div class="line"><span class="comment">// removes all the listener for the specific event</span></div><div class="line">emitter.clear&lt;my_event&gt;();</div><div class="line"></div><div class="line"><span class="comment">// removes all the listeners registered so far</span></div><div class="line">emitter.clear();</div></div><!-- fragment --><p>To send an event to all the listeners that are interested in it, the <code>publish</code> member function offers a convenient approach that relieves users from having to create the event:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_event { <span class="keywordtype">int</span> i; };</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">emitter.publish&lt;my_event&gt;(42);</div></div><!-- fragment --><p>Finally, the <code>empty</code> member function tests if there exists at least either a listener registered with the event emitter or to a given type of event:</p>
<div class="fragment"><div class="line"><span class="keywordtype">bool</span> empty;</div><div class="line"></div><div class="line"><span class="comment">// checks if there is any listener registered for the specific event</span></div><div class="line">empty = emitter.empty&lt;my_event&gt;();</div><div class="line"></div><div class="line"><span class="comment">// checks it there are listeners registered with the event emitter</span></div><div class="line">empty = emitter.empty();</div></div><!-- fragment --><p>In general, the event emitter is a handy tool when the derived classes <em>wrap</em> asynchronous operations, because it introduces a <em>nice-to-have</em> model based on events and listeners that kindly hides the complexity behind the scenes. However it is not limited to such uses. </p>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = handle;</div></div><!-- fragment --><ul>
<li>Through the dereference operator:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> &amp;resource = *handle;</div></div><!-- fragment --><p>The resource can also be accessed directly using the arrow operator if required:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> value = handle-&gt;value;</div></div><!-- fragment --><p>To test if a handle is still valid, the cast operator to <code>bool</code> allows users to use it in a guard:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Finally, in case there is the need to load a resource and thus to get a handle without storing the resource itself in the cache, users can rely on the <code>temp</code> member function template.<br />
The declaration is similar to that of <code>load</code>, a (possibly invalid) handle for the resource is returned also in this case:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(<span class="keyword">auto</span> handle = cache.temp&lt;my_loader&gt;(42); handle) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Do not forget to test the handle for validity. Otherwise, getting a reference to the resource it points may result in undefined behavior. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
+20 -19
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.0</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -63,62 +63,63 @@ $(function() {
<div class="title">Crash Course: events, signals and everything in between </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="autotoc_md86"></a>
<div class="textblock"><h1><a class="anchor" id="autotoc_md90"></a>
Introduction</h1>
<p>Signals are usually a core part of games and software architectures in general.<br />
Roughly speaking, they help to decouple the various parts of a system while allowing them to communicate with each other somehow.</p>
<p>The so called _modern C++_ comes with a tool that can be useful in these terms, the <code>std::function</code>. As an example, it can be used to create delegates.<br />
However, there is no guarantee that an <code>std::function</code> does not perform allocations under the hood and this could be problematic sometimes. Furthermore, it solves a problem but may not adapt well to other requirements that may arise from time to time.</p>
<p>In case that the flexibility and power of an <code>std::function</code> isn't required or if the price to pay for them is too high,<code>EnTT</code> offers a complete set of lightweight classes to solve the same and many other problems.</p>
<h1><a class="anchor" id="autotoc_md87"></a>
<h1><a class="anchor" id="autotoc_md91"></a>
Delegate</h1>
<p>A delegate can be used as a general purpose invoker with no memory overhead for free functions and members provided along with an instance on which to invoke them.<br />
It does not claim to be a drop-in replacement for an <code>std::function</code>, so do not expect to use it whenever an <code>std::function</code> fits well. That said, it's most likely even a better fit than an <code>std::function</code> in a lot of cases, so expect to use it quite a lot anyway.</p>
<p>The interface is trivial. It offers a default constructor to create empty delegates:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1delegate.html">entt::delegate&lt;int(int)&gt;</a> <a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>{};</div></div><!-- fragment --><p>All what is needed to create an instance is to specify the type of the function the delegate will <em>contain</em>, that is the signature of the free function or the member one wants to assign to it.</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1delegate.html">entt::delegate&lt;int(int)&gt;</a> <a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>{};</div></div><!-- fragment --><p>All what is needed to create an instance is to specify the type of the function the delegate will <em>contain</em>, that is the signature of the free function or the member one wants to assign to it.</p>
<p>Attempting to use an empty delegate by invoking its function call operator results in undefined behavior or most likely a crash. Before to use a delegate, it must be initialized.<br />
There exists a bunch of overloads of the <code>connect</code> member function to do that. As an example of use:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> f(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i; }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>my_struct {</div><div class="line"> <span class="keywordtype">int</span> f(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;i) { <span class="keywordflow">return</span> i }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// bind a free function to the delegate</span></div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;f&gt;();</div><div class="line"></div><div class="line"><span class="comment">// bind a member function to the delegate</span></div><div class="line">my_struct instance;</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;my_struct::f&gt;(&amp;instance);</div></div><!-- fragment --><p>The delegate class accepts also data members, if needed. In this case, the function type of the delegate is such that the parameter list is empty and the value of the data member is at least convertible to the return type.</p>
<p>Free functions having type equivalent to <code>void(T *, args...)</code> are accepted as well. In this case, <code>T *</code> is considered a payload and the function will receive it back every time it's invoked. In other terms, this works just fine with the above definition:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g(<span class="keyword">const</span> <span class="keywordtype">char</span> *c, <span class="keywordtype">int</span> i) { <span class="comment">/* ... */</span> }</div><div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span> c = <span class="charliteral">&#39;c&#39;</span>;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;g&gt;(&amp;c);</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>The function <code>g</code> will be invoked with a pointer to <code>c</code> and <code>42</code>. However, the function type of the delegate is still <code>void(int)</code>. This is also the signature of its function call operator.</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> f(<span class="keywordtype">int</span> i) { <span class="keywordflow">return</span> i; }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>my_struct {</div><div class="line"> <span class="keywordtype">int</span> f(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;i) { <span class="keywordflow">return</span> i }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// bind a free function to the delegate</span></div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>.connect&lt;&amp;f&gt;();</div><div class="line"></div><div class="line"><span class="comment">// bind a member function to the delegate</span></div><div class="line">my_struct instance;</div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>.connect&lt;&amp;my_struct::f&gt;(instance);</div></div><!-- fragment --><p>The delegate class accepts also data members, if needed. In this case, the function type of the delegate is such that the parameter list is empty and the value of the data member is at least convertible to the return type.</p>
<p>Free functions having type equivalent to <code>void(T &amp;, args...)</code> are accepted as well. In this case, <code>T &amp;</code> is considered a payload and the function will receive it back every time it's invoked. In other terms, this works just fine with the above definition:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g(<span class="keyword">const</span> <span class="keywordtype">char</span> &amp;c, <span class="keywordtype">int</span> i) { <span class="comment">/* ... */</span> }</div><div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span> c = <span class="charliteral">&#39;c&#39;</span>;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>.connect&lt;&amp;g&gt;(c);</div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>(42);</div></div><!-- fragment --><p>The function <code>g</code> will be invoked with a reference to <code>c</code> and <code>42</code>. However, the function type of the delegate is still <code>void(int)</code>. This is also the signature of its function call operator.</p>
<p>Another interesting aspect of the delegate class is that it accepts also functions with a list of parameters that is shorter than that of the function type used to specialize the delegate itself.<br />
The following code is therefore perfectly valid:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g() { <span class="comment">/* ... */</span> }</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>.connect&lt;&amp;g&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>Where the function type of the delegate is <code>void(int)</code> as above. It goes without saying that the extra arguments are silently discarded internally.<br />
<div class="fragment"><div class="line"><span class="keywordtype">void</span> g() { <span class="comment">/* ... */</span> }</div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>.connect&lt;&amp;g&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>(42);</div></div><!-- fragment --><p>Where the function type of the delegate is <code>void(int)</code> as above. It goes without saying that the extra arguments are silently discarded internally.<br />
v This is a nice-to-have feature in a lot of cases, as an example when the <code>delegate</code> class is used as a building block of a signal-slot system.</p>
<p>To create and initialize a delegate at once, there are a few specialized constructors. Because of the rules of the language, the listener is provided by means of the <code><a class="el" href="namespaceentt.html#af1e73acd6f3d892955819677dc2664b7" title="Constant of type connect_arg_t used to disambiguate calls. ">entt::connect_arg</a></code> variable template:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1delegate.html">entt::delegate&lt;int(int)&gt;</a> func{entt::connect_arg&lt;&amp;f&gt;};</div></div><!-- fragment --><p>Aside <code>connect</code>, a <code>disconnect</code> counterpart isn't provided. Instead, there exists a <code>reset</code> member function to use to clear a delegate.<br />
To know if a delegate is empty, it can be used explicitly in every conditional statement:</p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>(delegate) {</div><div class="line"> <span class="comment">// ...</span></div><div class="line">}</div></div><!-- fragment --><p>Finally, to invoke a delegate, the function call operator is the way to go as already shown in the examples above:</p>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ret = <a class="code" href="namespaceentt.html#aeda304d14f286ffcb1d872a6ef526745">delegate</a>(42);</div></div><!-- fragment --><p>In all cases, the listeners don't have to strictly follow the signature of the delegate. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given result type, everything works just fine.</p>
<h1><a class="anchor" id="autotoc_md88"></a>
<div class="fragment"><div class="line"><span class="keyword">auto</span> ret = <a class="code" href="namespaceentt.html#a464a269b63d8c76395b0c54f33d3d6fb">delegate</a>(42);</div></div><!-- fragment --><p>In all cases, the listeners don't have to strictly follow the signature of the delegate. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given result type, everything works just fine.</p>
<h1><a class="anchor" id="autotoc_md92"></a>
Signals</h1>
<p>Signal handlers work with naked pointers, function pointers and pointers to members. Listeners can be any kind of objects and users are in charge of connecting and disconnecting them from a signal to avoid crashes due to different lifetimes. On the other side, performance shouldn't be affected that much by the presence of such a signal handler.<br />
<p>Signal handlers work with references to classes, function pointers and pointers to members. Listeners can be any kind of objects and users are in charge of connecting and disconnecting them from a signal to avoid crashes due to different lifetimes. On the other side, performance shouldn't be affected that much by the presence of such a signal handler.<br />
Signals make use of delegates internally and therefore they undergo the same rules and offer similar functionalities. It may be a good idea to consult the documentation of the <code>delegate</code> class for further information.</p>
<p>A signal handler can be used as a private data member without exposing any <em>publish</em> functionality to the clients of a class. The basic idea is to impose a clear separation between the signal itself and the <code>sink</code> class, that is a tool to be used to connect and disconnect listeners on the fly.</p>
<p>The API of a signal handler is straightforward. The most important thing is that it comes in two forms: with and without a collector. In case a signal is provided with a collector, all the values returned by the listeners can be literally <em>collected</em> and used later by the caller. Otherwise it works just like a plain signal that emits events from time to time.<br />
<p>The API of a signal handler is straightforward. If a collector is supplied to the signal when something is published, all the values returned by the listeners can be literally <em>collected</em> and used later by the caller. Otherwise, the class works just like a plain signal that emits events from time to time.<br />
To create instances of signal handlers it is sufficient to provide the type of function to which they refer:</p>
<div class="fragment"><div class="line"><a class="code" href="classentt_1_1sigh.html">entt::sigh&lt;void(int, char)&gt;</a> signal;</div></div><!-- fragment --><p>Signals offer all the basic functionalities required to know how many listeners they contain (<code>size</code>) or if they contain at least a listener (<code>empty</code>), as well as a function to use to swap handlers (<code>swap</code>).</p>
<p>Besides them, there are member functions to use both to connect and disconnect listeners in all their forms by means of a sink:</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> foo(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> bar(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><a class="code" href="classentt_1_1sink.html">entt::sink</a> <a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>{signal};</div><div class="line">listener instance;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;foo&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;listener::bar&gt;(&amp;instance);</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="comment">// disconnects a free function</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;foo&gt;();</div><div class="line"></div><div class="line"><span class="comment">// disconnect a member function of an instance</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;listener::bar&gt;(&amp;instance);</div><div class="line"></div><div class="line"><span class="comment">// disconnect all the member functions of an instance, if any</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect(&amp;instance);</div><div class="line"></div><div class="line"><span class="comment">// discards all the listeners at once</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect();</div></div><!-- fragment --><p>As shown above, the listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.<br />
The <code>connect</code> member function returns by default a <code>connection</code> object to be used as an alternative to break a connection by means of its <code>release</code> member function. A <code>scoped_connection</code> can also be created from a connection. In this case, the link is broken automatically as soon as the object goes out of scope.</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> foo(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> bar(<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;, <span class="keywordtype">char</span>) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><a class="code" href="classentt_1_1sink.html">entt::sink</a> <a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>{signal};</div><div class="line">listener instance;</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;foo&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;listener::bar&gt;(instance);</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="comment">// disconnects a free function</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;foo&gt;();</div><div class="line"></div><div class="line"><span class="comment">// disconnect a member function of an instance</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect&lt;&amp;listener::bar&gt;(instance);</div><div class="line"></div><div class="line"><span class="comment">// disconnect all the member functions of an instance, if any</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect(instance);</div><div class="line"></div><div class="line"><span class="comment">// discards all the listeners at once</span></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.disconnect();</div></div><!-- fragment --><p>As shown above, the listeners don't have to strictly follow the signature of the signal. As long as a listener can be invoked with the given arguments to yield a result that is convertible to the given return type, everything works just fine.<br />
It's also possible to connect a listener before other listeners already contained by the signal. The <code>before</code> function returns a <code>sink</code> object correctly initialized for the purpose that can be used to connect one or more listeners in order and in the desired position:</p>
<div class="fragment"><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.before&lt;&amp;foo&gt;().connect&lt;&amp;listener::bar&gt;(instance);</div></div><!-- fragment --><p>In all cases, the <code>connect</code> member function returns by default a <code>connection</code> object to be used as an alternative to break a connection by means of its <code>release</code> member function. A <code>scoped_connection</code> can also be created from a connection. In this case, the link is broken automatically as soon as the object goes out of scope.</p>
<p>Once listeners are attached (or even if there are no listeners at all), events and data in general can be published through a signal by means of the <code>publish</code> member function:</p>
<div class="fragment"><div class="line">signal.publish(42, <span class="charliteral">&#39;c&#39;</span>);</div></div><!-- fragment --><p>To collect data, the <code>collect</code> member function should be used instead. Below is a minimal example to show how to use it:</p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> f() { <span class="keywordflow">return</span> 0; }</div><div class="line"><span class="keywordtype">int</span> g() { <span class="keywordflow">return</span> 1; }</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><a class="code" href="classentt_1_1sigh.html">entt::sigh&lt;int()&gt;</a> signal;</div><div class="line"><a class="code" href="classentt_1_1sink.html">entt::sink</a> <a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>{signal};</div><div class="line"></div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;f&gt;();</div><div class="line"><a class="code" href="namespaceentt.html#a5f3f083c1335549a9cdfcfeb7779332d">sink</a>.connect&lt;&amp;g&gt;();</div><div class="line"></div><div class="line">std::vector&lt;int&gt; vec{};</div><div class="line">signal.collect([&amp;vec](<span class="keywordtype">int</span> value) { vec.push_back(value); });</div><div class="line"></div><div class="line">assert(vec[0] == 0);</div><div class="line">assert(vec[1] == 1);</div></div><!-- fragment --><p>A collector must expose a function operator that accepts as an argument a type to which the return type of the listeners can be converted. Moreover, it can optionally return a boolean value that is true to stop collecting data, false otherwise. This way one can avoid calling all the listeners in case it isn't necessary.<br />
Functors can also be used in place of a lambda. Since the collector is copied when invoking the <code>collect</code> member function, <code>std::ref</code> is the way to go in this case:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_collector {</div><div class="line"> std::vector&lt;int&gt; vec{};</div><div class="line"></div><div class="line"> <span class="keywordtype">bool</span> operator()(<span class="keywordtype">int</span> v) noexcept {</div><div class="line"> vec.push_back(v);</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_collector <a class="code" href="namespaceentt.html#aea8b073b774362fe800d9cce3542927a">collector</a>;</div><div class="line">signal.collect(std::ref(collector));</div></div><!-- fragment --><h1><a class="anchor" id="autotoc_md89"></a>
<div class="fragment"><div class="line"><span class="keyword">struct </span>my_collector {</div><div class="line"> std::vector&lt;int&gt; vec{};</div><div class="line"></div><div class="line"> <span class="keywordtype">bool</span> operator()(<span class="keywordtype">int</span> v) noexcept {</div><div class="line"> vec.push_back(v);</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">my_collector <a class="code" href="namespaceentt.html#aea8b073b774362fe800d9cce3542927a">collector</a>;</div><div class="line">signal.collect(std::ref(collector));</div></div><!-- fragment --><h1><a class="anchor" id="autotoc_md93"></a>
Event dispatcher</h1>
<p>The event dispatcher class is designed so as to be used in a loop. It allows users both to trigger immediate events or to queue events to be published all together once per tick.<br />
This class shares part of its API with the one of the signal handler, but it doesn't require that all the types of events are specified when declared:</p>
<div class="fragment"><div class="line"><span class="comment">// define a general purpose dispatcher that works with naked pointers</span></div><div class="line"><a class="code" href="classentt_1_1dispatcher.html">entt::dispatcher</a> dispatcher{};</div></div><!-- fragment --><p>In order to register an instance of a class to a dispatcher, its type must expose one or more member functions the arguments of which are such that <code>const E &amp;</code> can be converted to them for each type of event <code>E</code>, no matter what the return value is.<br />
<div class="fragment"><div class="line"><span class="comment">// define a general purpose dispatcher</span></div><div class="line"><a class="code" href="classentt_1_1dispatcher.html">entt::dispatcher</a> dispatcher{};</div></div><!-- fragment --><p>In order to register an instance of a class to a dispatcher, its type must expose one or more member functions the arguments of which are such that <code>const E &amp;</code> can be converted to them for each type of event <code>E</code>, no matter what the return value is.<br />
The name of the member function aimed to receive the event must be provided to the <code>connect</code> member function of the sink in charge for the specific event:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>an_event { <span class="keywordtype">int</span> value; };</div><div class="line"><span class="keyword">struct </span>another_event {};</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> receive(<span class="keyword">const</span> an_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line"> <span class="keywordtype">void</span> method(<span class="keyword">const</span> another_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">listener listener;</div><div class="line">dispatcher.sink&lt;an_event&gt;().connect&lt;&amp;listener::receive&gt;(&amp;listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().connect&lt;&amp;listener::method&gt;(&amp;listener);</div></div><!-- fragment --><p>The <code>disconnect</code> member function follows the same pattern and can be used to remove one listener at a time or all of them at once:</p>
<div class="fragment"><div class="line">dispatcher.sink&lt;an_event&gt;().disconnect&lt;&amp;listener::receive&gt;(&amp;listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().<a class="code" href="namespaceentt.html#a71889edeeb1f03ecc2b47d183465384c">disconnect</a>(&amp;listener);</div></div><!-- fragment --><p>The <code>trigger</code> member function serves the purpose of sending an immediate event to all the listeners registered so far. It offers a convenient approach that relieves users from having to create the event itself. Instead, it's enough to specify the type of event and provide all the parameters required to construct it.<br />
<div class="fragment"><div class="line"><span class="keyword">struct </span>an_event { <span class="keywordtype">int</span> value; };</div><div class="line"><span class="keyword">struct </span>another_event {};</div><div class="line"></div><div class="line"><span class="keyword">struct </span>listener {</div><div class="line"> <span class="keywordtype">void</span> receive(<span class="keyword">const</span> an_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line"> <span class="keywordtype">void</span> method(<span class="keyword">const</span> another_event &amp;) { <span class="comment">/* ... */</span> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line">listener listener;</div><div class="line">dispatcher.sink&lt;an_event&gt;().connect&lt;&amp;listener::receive&gt;(listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().connect&lt;&amp;listener::method&gt;(listener);</div></div><!-- fragment --><p>The <code>disconnect</code> member function follows the same pattern and can be used to remove one listener at a time or all of them at once:</p>
<div class="fragment"><div class="line">dispatcher.sink&lt;an_event&gt;().disconnect&lt;&amp;listener::receive&gt;(listener);</div><div class="line">dispatcher.sink&lt;another_event&gt;().disconnect(listener);</div></div><!-- fragment --><p>The <code>trigger</code> member function serves the purpose of sending an immediate event to all the listeners registered so far. It offers a convenient approach that relieves users from having to create the event itself. Instead, it's enough to specify the type of event and provide all the parameters required to construct it.<br />
As an example:</p>
<div class="fragment"><div class="line">dispatcher.trigger&lt;an_event&gt;(42);</div><div class="line">dispatcher.trigger&lt;another_event&gt;();</div></div><!-- fragment --><p>Listeners are invoked immediately, order of execution isn't guaranteed. This method can be used to push around urgent messages like an <em>is terminating</em> notification on a mobile app.</p>
<p>On the other hand, the <code>enqueue</code> member function queues messages together and allows to maintain control over the moment they are sent to listeners. The signature of this method is more or less the same of <code>trigger</code>:</p>
<div class="fragment"><div class="line">dispatcher.enqueue&lt;an_event&gt;(42);</div><div class="line">dispatcher.enqueue&lt;another_event&gt;();</div></div><!-- fragment --><p>Events are stored aside until the <code>update</code> member function is invoked, then all the messages that are still pending are sent to the listeners at once:</p>
<div class="fragment"><div class="line"><span class="comment">// emits all the events of the given type at once</span></div><div class="line">dispatcher.update&lt;my_event&gt;();</div><div class="line"></div><div class="line"><span class="comment">// emits all the events queued so far at once</span></div><div class="line">dispatcher.update();</div></div><!-- fragment --><p>This way users can embed the dispatcher in a loop and literally dispatch events once per tick to their systems.</p>
<h1><a class="anchor" id="autotoc_md90"></a>
<h1><a class="anchor" id="autotoc_md94"></a>
Event emitter</h1>
<p>A general purpose event emitter thought mainly for those cases where it comes to working with asynchronous stuff.<br />
Originally designed to fit the requirements of <a href="https://github.com/skypjack/uvw"><code>uvw</code></a> (a wrapper for <code>libuv</code> written in modern C++), it was adapted later to be included in this library.</p>
+19 -18
View File
File diff suppressed because one or more lines are too long
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+10 -10
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -136,7 +136,7 @@ class entt::basic_continuous_loader&lt; Entity &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00050">50</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00045">45</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a18d87fd5fc80f062ae27b90ef3232bd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18d87fd5fc80f062ae27b90ef3232bd8">&#9670;&nbsp;</a></span>basic_continuous_loader()</h2>
@@ -172,7 +172,7 @@ template&lt;typename Entity &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00441">441</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00455">455</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -236,7 +236,7 @@ template&lt;typename... Component, typename Archive , typename... Type, typename
</dl>
<dl class="section return"><dt>Returns</dt><dd>A non-const reference to this loader. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00503">503</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00517">517</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -284,7 +284,7 @@ template&lt;typename Archive &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A non-const reference to this loader. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00478">478</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00492">492</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -332,7 +332,7 @@ template&lt;typename Archive &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A non-const reference to this loader. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00462">462</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00476">476</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -371,7 +371,7 @@ template&lt;typename Entity &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if <code>entity</code> is managed by the loader, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00562">562</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00576">576</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -410,7 +410,7 @@ template&lt;typename Entity &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The local identifier if any, the null entity otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00571">571</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00585">585</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -475,7 +475,7 @@ template&lt;typename Entity &gt; </div>
This functions helps to identify and destroy those entities.</p>
<dl class="section return"><dt>Returns</dt><dd>A non-const reference to this loader. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00549">549</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00563">563</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -508,7 +508,7 @@ template&lt;typename Entity &gt; </div>
<p>Users should invoke this member function after restoring each snapshot, unless they know exactly what they are doing.</p>
<dl class="section return"><dt>Returns</dt><dd>A non-const reference to this loader. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00517">517</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00531">531</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -79,7 +79,7 @@ class entt::basic_group&lt;... &gt;</h3>
<p>Group. </p>
<p>Primary template isn't defined on purpose. All the specializations give a compile-time error, but for a few reasonable cases. </p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00026">26</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00025">25</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a></li>
</ul>
@@ -1,961 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt; Class Template Reference</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_86b01ab83965ad65f5c8dea9ea3cb0b2.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Non-owning group.
<a href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="group_8hpp_source.html">group.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a2ad800efd688e78cecd185a74d3ea2c4"><td class="memItemLeft" align="right" valign="top"><a id="a2ad800efd688e78cecd185a74d3ea2c4"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a></td></tr>
<tr class="memdesc:a2ad800efd688e78cecd185a74d3ea2c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a2ad800efd688e78cecd185a74d3ea2c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc8c436572ac36eaa56a21aff22bad58"><td class="memItemLeft" align="right" valign="top"><a id="abc8c436572ac36eaa56a21aff22bad58"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a></td></tr>
<tr class="memdesc:abc8c436572ac36eaa56a21aff22bad58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:abc8c436572ac36eaa56a21aff22bad58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab031f21c3d6b5afc6979ee22299d217d"><td class="memItemLeft" align="right" valign="top"><a id="ab031f21c3d6b5afc6979ee22299d217d"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a></td></tr>
<tr class="memdesc:ab031f21c3d6b5afc6979ee22299d217d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:ab031f21c3d6b5afc6979ee22299d217d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a91eb89434fd97aa7877a06c0acf64772"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a91eb89434fd97aa7877a06c0acf64772"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a91eb89434fd97aa7877a06c0acf64772">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a91eb89434fd97aa7877a06c0acf64772"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of existing components of the given type. <a href="#a91eb89434fd97aa7877a06c0acf64772">More...</a><br /></td></tr>
<tr class="separator:a91eb89434fd97aa7877a06c0acf64772"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff7aac214e65a27e968bf9d3100e4d51"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aff7aac214e65a27e968bf9d3100e4d51">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aff7aac214e65a27e968bf9d3100e4d51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of entities that have the given components. <a href="#aff7aac214e65a27e968bf9d3100e4d51">More...</a><br /></td></tr>
<tr class="separator:aff7aac214e65a27e968bf9d3100e4d51"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91f95cb9ccf140578e71ebb4b11e997a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a91f95cb9ccf140578e71ebb4b11e997a">capacity</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a91f95cb9ccf140578e71ebb4b11e997a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of elements that a group has currently allocated space for. <a href="#a91f95cb9ccf140578e71ebb4b11e997a">More...</a><br /></td></tr>
<tr class="separator:a91f95cb9ccf140578e71ebb4b11e997a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe8371a0d1992074a63a853cb6dd81c7"><td class="memItemLeft" align="right" valign="top"><a id="abe8371a0d1992074a63a853cb6dd81c7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abe8371a0d1992074a63a853cb6dd81c7">shrink_to_fit</a> ()</td></tr>
<tr class="memdesc:abe8371a0d1992074a63a853cb6dd81c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Requests the removal of unused capacity. <br /></td></tr>
<tr class="separator:abe8371a0d1992074a63a853cb6dd81c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a079b38c587ad9af5a3fe3da5f91cdc85"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a079b38c587ad9af5a3fe3da5f91cdc85"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a079b38c587ad9af5a3fe3da5f91cdc85">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a079b38c587ad9af5a3fe3da5f91cdc85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the pool of a given component is empty. <a href="#a079b38c587ad9af5a3fe3da5f91cdc85">More...</a><br /></td></tr>
<tr class="separator:a079b38c587ad9af5a3fe3da5f91cdc85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2dfa3de0faf46c5ff8d0e6502880212"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae2dfa3de0faf46c5ff8d0e6502880212">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae2dfa3de0faf46c5ff8d0e6502880212"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group is empty. <a href="#ae2dfa3de0faf46c5ff8d0e6502880212">More...</a><br /></td></tr>
<tr class="separator:ae2dfa3de0faf46c5ff8d0e6502880212"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40e5fcc3317f3a30dcb9ddff33580af0"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a40e5fcc3317f3a30dcb9ddff33580af0"><td class="memTemplItemLeft" align="right" valign="top">Component *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a40e5fcc3317f3a30dcb9ddff33580af0">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a40e5fcc3317f3a30dcb9ddff33580af0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#a40e5fcc3317f3a30dcb9ddff33580af0">More...</a><br /></td></tr>
<tr class="separator:a40e5fcc3317f3a30dcb9ddff33580af0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45617bf54343e78e7757e5407766bde0"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a45617bf54343e78e7757e5407766bde0"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a45617bf54343e78e7757e5407766bde0">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a45617bf54343e78e7757e5407766bde0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities of a given pool. <a href="#a45617bf54343e78e7757e5407766bde0">More...</a><br /></td></tr>
<tr class="separator:a45617bf54343e78e7757e5407766bde0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0379ae19b355744b5845b4979f540a7"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae0379ae19b355744b5845b4979f540a7">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae0379ae19b355744b5845b4979f540a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities. <a href="#ae0379ae19b355744b5845b4979f540a7">More...</a><br /></td></tr>
<tr class="separator:ae0379ae19b355744b5845b4979f540a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8586e583284a89492e391639366e39a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae8586e583284a89492e391639366e39a">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae8586e583284a89492e391639366e39a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given components. <a href="#ae8586e583284a89492e391639366e39a">More...</a><br /></td></tr>
<tr class="separator:ae8586e583284a89492e391639366e39a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab564e70851b338dfd9e41d34fb52964b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab564e70851b338dfd9e41d34fb52964b">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ab564e70851b338dfd9e41d34fb52964b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given components. <a href="#ab564e70851b338dfd9e41d34fb52964b">More...</a><br /></td></tr>
<tr class="separator:ab564e70851b338dfd9e41d34fb52964b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a401b6a484d089d152b20e52a2b60a776"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a401b6a484d089d152b20e52a2b60a776">find</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a401b6a484d089d152b20e52a2b60a776"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#a401b6a484d089d152b20e52a2b60a776">More...</a><br /></td></tr>
<tr class="separator:a401b6a484d089d152b20e52a2b60a776"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f801b988585a43f9b106390a6dfea30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2f801b988585a43f9b106390a6dfea30">operator[]</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> pos) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a2f801b988585a43f9b106390a6dfea30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the identifier that occupies the given position. <a href="#a2f801b988585a43f9b106390a6dfea30">More...</a><br /></td></tr>
<tr class="separator:a2f801b988585a43f9b106390a6dfea30"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4feba81c48d3cbe40eab1306ba462c23"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a4feba81c48d3cbe40eab1306ba462c23">contains</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a4feba81c48d3cbe40eab1306ba462c23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a group contains an entity. <a href="#a4feba81c48d3cbe40eab1306ba462c23">More...</a><br /></td></tr>
<tr class="separator:a4feba81c48d3cbe40eab1306ba462c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa39d992100e4b79a3dee02f5dfb4f169"><td class="memTemplParams" colspan="2">template&lt;typename... Component&gt; </td></tr>
<tr class="memitem:aa39d992100e4b79a3dee02f5dfb4f169"><td class="memTemplItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aa39d992100e4b79a3dee02f5dfb4f169">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa39d992100e4b79a3dee02f5dfb4f169"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the components assigned to the given entity. <a href="#aa39d992100e4b79a3dee02f5dfb4f169">More...</a><br /></td></tr>
<tr class="separator:aa39d992100e4b79a3dee02f5dfb4f169"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba391a4533926202b366523db19ac4fb"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:aba391a4533926202b366523db19ac4fb"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aba391a4533926202b366523db19ac4fb">each</a> (Func func) const</td></tr>
<tr class="memdesc:aba391a4533926202b366523db19ac4fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#aba391a4533926202b366523db19ac4fb">More...</a><br /></td></tr>
<tr class="separator:aba391a4533926202b366523db19ac4fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a097d67cc543e98b67199c99d8c507eb1"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a097d67cc543e98b67199c99d8c507eb1"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a097d67cc543e98b67199c99d8c507eb1">less</a> (Func func) const</td></tr>
<tr class="memdesc:a097d67cc543e98b67199c99d8c507eb1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a097d67cc543e98b67199c99d8c507eb1">More...</a><br /></td></tr>
<tr class="separator:a097d67cc543e98b67199c99d8c507eb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ab2882c61c6f33b4f205e57b8a5ae55"><td class="memTemplParams" colspan="2">template&lt;typename... Component, typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:a0ab2882c61c6f33b4f205e57b8a5ae55"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a0ab2882c61c6f33b4f205e57b8a5ae55">sort</a> (Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a0ab2882c61c6f33b4f205e57b8a5ae55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort a group according to the given comparison function. <a href="#a0ab2882c61c6f33b4f205e57b8a5ae55">More...</a><br /></td></tr>
<tr class="separator:a0ab2882c61c6f33b4f205e57b8a5ae55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9517a18e4fc769215548e4a5fc6416f"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:aa9517a18e4fc769215548e4a5fc6416f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aa9517a18e4fc769215548e4a5fc6416f">sort</a> () const</td></tr>
<tr class="memdesc:aa9517a18e4fc769215548e4a5fc6416f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort the shared pool of entities according to the given component. <a href="#aa9517a18e4fc769215548e4a5fc6416f">More...</a><br /></td></tr>
<tr class="separator:aa9517a18e4fc769215548e4a5fc6416f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create groups. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename... Exclude, typename Get, typename... Other&gt;<br />
class entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</h3>
<p>Non-owning group. </p>
<p>A non-owning group returns all the entities and only the entities that have at least the given components. Moreover, it's guaranteed that the entity list is tightly packed in memory for fast iterations.<br />
In general, non-owning groups don't stay true to the order of any set of components unless users explicitly sort them.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
<li>New instances of the given components are created and assigned to entities.</li>
<li>The entity currently pointed is modified (as an example, if one of the given components is removed from the entity to which the iterator points).</li>
<li>The entity currently pointed is destroyed.</li>
</ul>
<p>In all the other cases, modifying the pools of the given components in any way invalidates all the iterators and using them results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Groups share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by all the groups.<br />
Moreover, sorting a non-owning group affects all the instance of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the set of entities).</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Lifetime of a group must overcome the one of the registry that generated it. In any other case, attempting to use a group results in undefined behavior.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits. ">entt_traits</a> for more details). </td></tr>
<tr><td class="paramname">Exclude</td><td>Types of components used to filter the group. </td></tr>
<tr><td class="paramname">Get</td><td>Type of component observed by the group. </td></tr>
<tr><td class="paramname">Other</td><td>Other types of components observed by the group. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00070">70</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ae8586e583284a89492e391639366e39a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8586e583284a89492e391639366e39a">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the first entity that has the given components. </p>
<p>The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab564e70851b338dfd9e41d34fb52964b" title="Returns an iterator that is past the last entity that has the given components. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00221">221</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a91f95cb9ccf140578e71ebb4b11e997a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91f95cb9ccf140578e71ebb4b11e997a">&#9670;&nbsp;</a></span>capacity()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::capacity </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of elements that a group has currently allocated space for. </p>
<dl class="section return"><dt>Returns</dt><dd>Capacity of the group. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00125">125</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a4feba81c48d3cbe40eab1306ba462c23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4feba81c48d3cbe40eab1306ba462c23">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if a group contains an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00269">269</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a45617bf54343e78e7757e5407766bde0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45617bf54343e78e7757e5407766bde0">&#9670;&nbsp;</a></span>data() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities of a given pool. </p>
<p>The returned pointer is such that range <code>[data&lt;Component&gt;(), data&lt;Component&gt;() + size&lt;Component&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00187">187</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ae0379ae19b355744b5845b4979f540a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0379ae19b355744b5845b4979f540a7">&#9670;&nbsp;</a></span>data() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities. </p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a45617bf54343e78e7757e5407766bde0" title="Direct access to the list of entities of a given pool. ">data()</a>, <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a45617bf54343e78e7757e5407766bde0" title="Direct access to the list of entities of a given pool. ">data()</a> + <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a91eb89434fd97aa7877a06c0acf64772" title="Returns the number of existing components of the given type. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00203">203</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aba391a4533926202b366523db19ac4fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba391a4533926202b366523db19ac4fb">&#9670;&nbsp;</a></span>each()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>, Get &amp;, Other &amp;...);</div><div class="line">void(Get &amp;, Other &amp;...);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00325">325</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a079b38c587ad9af5a3fe3da5f91cdc85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a079b38c587ad9af5a3fe3da5f91cdc85">&#9670;&nbsp;</a></span>empty() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the pool of a given component is empty. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the pool of the given component is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00141">141</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ae2dfa3de0faf46c5ff8d0e6502880212"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2dfa3de0faf46c5ff8d0e6502880212">&#9670;&nbsp;</a></span>empty() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the group is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the group is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00149">149</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ab564e70851b338dfd9e41d34fb52964b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab564e70851b338dfd9e41d34fb52964b">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator that is past the last entity that has the given components. </p>
<p>The returned iterator points to the entity following the last entity that has the given components. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00240">240</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a401b6a484d089d152b20e52a2b60a776"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a401b6a484d089d152b20e52a2b60a776">&#9670;&nbsp;</a></span>find()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::find </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00250">250</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aa39d992100e4b79a3dee02f5dfb4f169"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa39d992100e4b79a3dee02f5dfb4f169">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the components assigned to the given entity. </p>
<p>Prefer this function instead of <code><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df" title="Returns references to the given components for an entity. ">registry::get</a></code> during iterations. It has far better performance than its companion function.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the group doesn't contain the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Types of components to get. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00291">291</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a097d67cc543e98b67199c99d8c507eb1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a097d67cc543e98b67199c99d8c507eb1">&#9670;&nbsp;</a></span>less()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aba391a4533926202b366523db19ac4fb" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00350">350</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a2f801b988585a43f9b106390a6dfea30"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f801b988585a43f9b106390a6dfea30">&#9670;&nbsp;</a></span>operator[]()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::operator[] </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a>&#160;</td>
<td class="paramname"><em>pos</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the identifier that occupies the given position. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pos</td><td>Position of the element to return. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The identifier that occupies the given position. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00260">260</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a40e5fcc3317f3a30dcb9ddff33580af0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40e5fcc3317f3a30dcb9ddff33580af0">&#9670;&nbsp;</a></span>raw()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Component* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::raw </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of components of a given pool. </p>
<p>The returned pointer is such that range <code>[raw&lt;Component&gt;(), raw&lt;Component&gt;() + size&lt;Component&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the components. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00168">168</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a91eb89434fd97aa7877a06c0acf64772"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91eb89434fd97aa7877a06c0acf64772">&#9670;&nbsp;</a></span>size() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of existing components of the given type. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component of which to return the size. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of existing components of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00108">108</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aff7aac214e65a27e968bf9d3100e4d51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff7aac214e65a27e968bf9d3100e4d51">&#9670;&nbsp;</a></span>size() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00116">116</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a0ab2882c61c6f33b4f205e57b8a5ae55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ab2882c61c6f33b4f205e57b8a5ae55">&#9670;&nbsp;</a></span>sort() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename... Component, typename Compare , typename Sort = std_sort, typename... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::sort </td>
<td>(</td>
<td class="paramtype">Compare&#160;</td>
<td class="paramname"><em>compare</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Sort&#160;</td>
<td class="paramname"><em>algo</em> = <code>Sort{}</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sort a group according to the given comparison function. </p>
<p>Sort the group so that iterating it with a couple of iterators returns entities and components in the expected order. See <code>begin</code> and <code>end</code> for more details.</p>
<p>The comparison function object must return <code>true</code> if the first element is <em>less</em> than the second one, <code>false</code> otherwise. The signature of the comparison function should be equivalent to one of the following:</p>
<div class="fragment"><div class="line">bool(std::tuple&lt;Component &amp;...&gt;, std::tuple&lt;Component &amp;...&gt;);</div><div class="line">bool(<span class="keyword">const</span> Component &amp;..., <span class="keyword">const</span> Component &amp;...);</div><div class="line">bool(<span class="keyword">const</span> Entity, <span class="keyword">const</span> Entity);</div></div><!-- fragment --><p>Where <code>Component</code> are such that they are iterated by the group.<br />
Moreover, the comparison function object shall induce a <em>strict weak ordering</em> on the values.</p>
<p>The sort function oject must offer a member function template <code>operator()</code> that accepts three arguments:</p>
<ul>
<li>An iterator to the first element of the range to sort.</li>
<li>An iterator past the last element of the range to sort.</li>
<li>A comparison function to use to compare the elements.</li>
</ul>
<p>The comparison function object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.</p>
<dl class="section note"><dt>Note</dt><dd>Attempting to iterate elements using a raw pointer returned by a call to either <code>data</code> or <code>raw</code> gives no guarantees on the order, even though <code>sort</code> has been invoked.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Optional types of components to compare. </td></tr>
<tr><td class="paramname">Compare</td><td>Type of comparison function object. </td></tr>
<tr><td class="paramname">Sort</td><td>Type of sort function object. </td></tr>
<tr><td class="paramname">Args</td><td>Types of arguments to forward to the sort function object. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">compare</td><td>A valid comparison function object. </td></tr>
<tr><td class="paramname">algo</td><td>A valid sort function object. </td></tr>
<tr><td class="paramname">args</td><td>Arguments to forward to the sort function object, if any. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00402">402</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aa9517a18e4fc769215548e4a5fc6416f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9517a18e4fc769215548e4a5fc6416f">&#9670;&nbsp;</a></span>sort() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename Get , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get, Other... &gt; &gt;::sort </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sort the shared pool of entities according to the given component. </p>
<p>Non-owning groups of the same type share with the registry a pool of entities with its own order that doesn't depend on the order of any pool of components. Users can order the underlying data structure so that it respects the order of the pool of the given component.</p>
<dl class="section note"><dt>Note</dt><dd>The shared pool of entities and thus its order is affected by the changes to each and every pool that it tracks. Therefore changes to those pools can quickly ruin the order imposed to the pool of entities shared between the non-owning groups.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component to use to impose the order. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00431">431</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="group_8hpp_source.html">group.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -1,101 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aa1d827213526124152a3fc216b4cd1f2">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ac2bfb8fc2f9838b6b0ee97ffe6411451">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#af2ee75730230b79357f97af7a16d6a4f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a36cd8e12087222d425bae24782cd329c">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a243b8825b3fddfb01613a4b342fa7258">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ad4d04e99bd95d23a6c734a0decb9db35">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aa3e0ef8c5709efafcea2f1402f15fbc7">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a719eecdcefdddaf1fff02817f154e878">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a687a671d42bc9ce62efca7d8ef6b992d">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a7a330f92775e23242e95c6382aab4e2c">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a134fb533be3e15cbdbe2951965d3890d">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aadb0ddddb0d5610ed8fc9fe1d2347074">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a48caa1f53c1e8065f66d1200c89ea26c">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a51da2e97c1e2cf52d12533e6fb49dd5b">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ad106f13e2ed368fd2022d08a725fc056">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a89b1dd1fdde4ea5c63f2c267f696a62e">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -102,13 +102,10 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:acf74917323f67e0b81b1253cc42308e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:acf74917323f67e0b81b1253cc42308e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of entities that have the given components. <a href="#acf74917323f67e0b81b1253cc42308e9">More...</a><br /></td></tr>
<tr class="separator:acf74917323f67e0b81b1253cc42308e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="memTemplParams" colspan="2">template&lt;typename... Component&gt; </td></tr>
<tr class="memitem:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the pool of a given component is empty. <a href="#adb2cd73ac05ceb1f81c97abbf8768b31">More...</a><br /></td></tr>
<tr class="memdesc:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group or the pools of the given components are empty. <a href="#adb2cd73ac05ceb1f81c97abbf8768b31">More...</a><br /></td></tr>
<tr class="separator:adb2cd73ac05ceb1f81c97abbf8768b31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a5015a0bd9284e054f343954b011db8"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a6a5015a0bd9284e054f343954b011db8">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a6a5015a0bd9284e054f343954b011db8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group is empty. <a href="#a6a5015a0bd9284e054f343954b011db8">More...</a><br /></td></tr>
<tr class="separator:a6a5015a0bd9284e054f343954b011db8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a945850dca5e5d13ae5be53eaf863ac38"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a945850dca5e5d13ae5be53eaf863ac38"><td class="memTemplItemLeft" align="right" valign="top">Component *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a945850dca5e5d13ae5be53eaf863ac38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#a945850dca5e5d13ae5be53eaf863ac38">More...</a><br /></td></tr>
@@ -194,7 +191,7 @@ class entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00487">487</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00483">483</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="acc9327669866ff8d39c4a6e6d2bd2333"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc9327669866ff8d39c4a6e6d2bd2333">&#9670;&nbsp;</a></span>begin()</h2>
@@ -226,7 +223,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00643">643</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00636">636</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -265,7 +262,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00691">691</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00684">684</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -308,7 +305,7 @@ template&lt;typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00609">609</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00602">602</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -342,7 +339,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00625">625</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00618">618</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -391,19 +388,19 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00747">747</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00740">740</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="adb2cd73ac05ceb1f81c97abbf8768b31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb2cd73ac05ceb1f81c97abbf8768b31">&#9670;&nbsp;</a></span>empty() <span class="overload">[1/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#adb2cd73ac05ceb1f81c97abbf8768b31">&#9670;&nbsp;</a></span>empty()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename... Owned&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
template&lt;typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -422,48 +419,16 @@ template&lt;typename Component &gt; </div>
</table>
</div><div class="memdoc">
<p>Checks whether the pool of a given component is empty. </p>
<p>Checks whether the group or the pools of the given components are empty. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
<tr><td class="paramname">Component</td><td>Types of components in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the pool of the given component is empty, false otherwise. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group or the pools of the given components are empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00557">557</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a6a5015a0bd9284e054f343954b011db8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a5015a0bd9284e054f343954b011db8">&#9670;&nbsp;</a></span>empty() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename... Owned&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned... &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the group is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the group is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00565">565</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00554">554</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -497,7 +462,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00662">662</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00655">655</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -536,7 +501,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00672">672</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00665">665</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -586,7 +551,7 @@ template&lt;typename... Component&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00713">713</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00706">706</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -635,7 +600,7 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00772">772</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00765">765</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -674,7 +639,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
</dl>
<dl class="section return"><dt>Returns</dt><dd>The identifier that occupies the given position. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00682">682</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00675">675</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -717,7 +682,7 @@ template&lt;typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00587">587</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00580">580</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -757,7 +722,7 @@ template&lt;typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of existing components of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00538">538</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00534">534</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -789,7 +754,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
<p>Returns the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00546">546</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00542">542</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -848,7 +813,6 @@ template&lt;typename... Component, typename Compare , typename Sort = std_sort,
<li>An iterator past the last element of the range to sort.</li>
<li>A comparison function to use to compare the elements.</li>
</ul>
<p>The comparison function object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.</p>
<dl class="section note"><dt>Note</dt><dd>Attempting to iterate elements using a raw pointer returned by a call to either <code>data</code> or <code>raw</code> gives no guarantees on the order, even though <code>sort</code> has been invoked.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
@@ -868,7 +832,7 @@ template&lt;typename... Component, typename Compare , typename Sort = std_sort,
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00834">834</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00823">823</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -900,7 +864,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get, typename...
<p>Checks whether the group can be sorted. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the group can be sorted, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00782">782</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00775">775</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -1,884 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt; Class Template Reference</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_0b1abda5dc7d1ded50c881833d0ec6d4.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Owning group.
<a href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="group_8hpp_source.html">group.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a07626b2b8812a92fab71516fcb10ea02"><td class="memItemLeft" align="right" valign="top"><a id="a07626b2b8812a92fab71516fcb10ea02"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a></td></tr>
<tr class="memdesc:a07626b2b8812a92fab71516fcb10ea02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a07626b2b8812a92fab71516fcb10ea02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45b6abe751bc3aef843c391c34145203"><td class="memItemLeft" align="right" valign="top"><a id="a45b6abe751bc3aef843c391c34145203"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a></td></tr>
<tr class="memdesc:a45b6abe751bc3aef843c391c34145203"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a45b6abe751bc3aef843c391c34145203"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fa8e37f166d1898cfb0b32a02033548"><td class="memItemLeft" align="right" valign="top"><a id="a2fa8e37f166d1898cfb0b32a02033548"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a></td></tr>
<tr class="memdesc:a2fa8e37f166d1898cfb0b32a02033548"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:a2fa8e37f166d1898cfb0b32a02033548"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a51da2e97c1e2cf52d12533e6fb49dd5b"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a51da2e97c1e2cf52d12533e6fb49dd5b"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a51da2e97c1e2cf52d12533e6fb49dd5b">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a51da2e97c1e2cf52d12533e6fb49dd5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of existing components of the given type. <a href="#a51da2e97c1e2cf52d12533e6fb49dd5b">More...</a><br /></td></tr>
<tr class="separator:a51da2e97c1e2cf52d12533e6fb49dd5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad106f13e2ed368fd2022d08a725fc056"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ad106f13e2ed368fd2022d08a725fc056">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ad106f13e2ed368fd2022d08a725fc056"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of entities that have the given components. <a href="#ad106f13e2ed368fd2022d08a725fc056">More...</a><br /></td></tr>
<tr class="separator:ad106f13e2ed368fd2022d08a725fc056"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4d04e99bd95d23a6c734a0decb9db35"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:ad4d04e99bd95d23a6c734a0decb9db35"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ad4d04e99bd95d23a6c734a0decb9db35">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ad4d04e99bd95d23a6c734a0decb9db35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the pool of a given component is empty. <a href="#ad4d04e99bd95d23a6c734a0decb9db35">More...</a><br /></td></tr>
<tr class="separator:ad4d04e99bd95d23a6c734a0decb9db35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3e0ef8c5709efafcea2f1402f15fbc7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aa3e0ef8c5709efafcea2f1402f15fbc7">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa3e0ef8c5709efafcea2f1402f15fbc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group is empty. <a href="#aa3e0ef8c5709efafcea2f1402f15fbc7">More...</a><br /></td></tr>
<tr class="separator:aa3e0ef8c5709efafcea2f1402f15fbc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a48caa1f53c1e8065f66d1200c89ea26c"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a48caa1f53c1e8065f66d1200c89ea26c"><td class="memTemplItemLeft" align="right" valign="top">Component *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a48caa1f53c1e8065f66d1200c89ea26c">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a48caa1f53c1e8065f66d1200c89ea26c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#a48caa1f53c1e8065f66d1200c89ea26c">More...</a><br /></td></tr>
<tr class="separator:a48caa1f53c1e8065f66d1200c89ea26c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2ee75730230b79357f97af7a16d6a4f"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:af2ee75730230b79357f97af7a16d6a4f"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#af2ee75730230b79357f97af7a16d6a4f">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af2ee75730230b79357f97af7a16d6a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities of a given pool. <a href="#af2ee75730230b79357f97af7a16d6a4f">More...</a><br /></td></tr>
<tr class="separator:af2ee75730230b79357f97af7a16d6a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36cd8e12087222d425bae24782cd329c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a36cd8e12087222d425bae24782cd329c">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a36cd8e12087222d425bae24782cd329c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities. <a href="#a36cd8e12087222d425bae24782cd329c">More...</a><br /></td></tr>
<tr class="separator:a36cd8e12087222d425bae24782cd329c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1d827213526124152a3fc216b4cd1f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aa1d827213526124152a3fc216b4cd1f2">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa1d827213526124152a3fc216b4cd1f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given components. <a href="#aa1d827213526124152a3fc216b4cd1f2">More...</a><br /></td></tr>
<tr class="separator:aa1d827213526124152a3fc216b4cd1f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a719eecdcefdddaf1fff02817f154e878"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a719eecdcefdddaf1fff02817f154e878">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a719eecdcefdddaf1fff02817f154e878"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given components. <a href="#a719eecdcefdddaf1fff02817f154e878">More...</a><br /></td></tr>
<tr class="separator:a719eecdcefdddaf1fff02817f154e878"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a687a671d42bc9ce62efca7d8ef6b992d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a687a671d42bc9ce62efca7d8ef6b992d">find</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a687a671d42bc9ce62efca7d8ef6b992d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#a687a671d42bc9ce62efca7d8ef6b992d">More...</a><br /></td></tr>
<tr class="separator:a687a671d42bc9ce62efca7d8ef6b992d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadb0ddddb0d5610ed8fc9fe1d2347074"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#aadb0ddddb0d5610ed8fc9fe1d2347074">operator[]</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a> pos) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aadb0ddddb0d5610ed8fc9fe1d2347074"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the identifier that occupies the given position. <a href="#aadb0ddddb0d5610ed8fc9fe1d2347074">More...</a><br /></td></tr>
<tr class="separator:aadb0ddddb0d5610ed8fc9fe1d2347074"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2bfb8fc2f9838b6b0ee97ffe6411451"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#ac2bfb8fc2f9838b6b0ee97ffe6411451">contains</a> (const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ac2bfb8fc2f9838b6b0ee97ffe6411451"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a group contains an entity. <a href="#ac2bfb8fc2f9838b6b0ee97ffe6411451">More...</a><br /></td></tr>
<tr class="separator:ac2bfb8fc2f9838b6b0ee97ffe6411451"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a330f92775e23242e95c6382aab4e2c"><td class="memTemplParams" colspan="2">template&lt;typename... Component&gt; </td></tr>
<tr class="memitem:a7a330f92775e23242e95c6382aab4e2c"><td class="memTemplItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a7a330f92775e23242e95c6382aab4e2c">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a7a330f92775e23242e95c6382aab4e2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the components assigned to the given entity. <a href="#a7a330f92775e23242e95c6382aab4e2c">More...</a><br /></td></tr>
<tr class="separator:a7a330f92775e23242e95c6382aab4e2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a243b8825b3fddfb01613a4b342fa7258"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a243b8825b3fddfb01613a4b342fa7258"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a243b8825b3fddfb01613a4b342fa7258">each</a> (Func func) const</td></tr>
<tr class="memdesc:a243b8825b3fddfb01613a4b342fa7258"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a243b8825b3fddfb01613a4b342fa7258">More...</a><br /></td></tr>
<tr class="separator:a243b8825b3fddfb01613a4b342fa7258"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a134fb533be3e15cbdbe2951965d3890d"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a134fb533be3e15cbdbe2951965d3890d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a134fb533be3e15cbdbe2951965d3890d">less</a> (Func func) const</td></tr>
<tr class="memdesc:a134fb533be3e15cbdbe2951965d3890d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a134fb533be3e15cbdbe2951965d3890d">More...</a><br /></td></tr>
<tr class="separator:a134fb533be3e15cbdbe2951965d3890d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89b1dd1fdde4ea5c63f2c267f696a62e"><td class="memTemplParams" colspan="2">template&lt;typename... Component, typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:a89b1dd1fdde4ea5c63f2c267f696a62e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a89b1dd1fdde4ea5c63f2c267f696a62e">sort</a> (Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a89b1dd1fdde4ea5c63f2c267f696a62e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort a group according to the given comparison function. <a href="#a89b1dd1fdde4ea5c63f2c267f696a62e">More...</a><br /></td></tr>
<tr class="separator:a89b1dd1fdde4ea5c63f2c267f696a62e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create groups. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename... Exclude, typename... Get, typename Owned, typename... Other&gt;<br />
class entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned, Other... &gt;</h3>
<p>Owning group. </p>
<p>Owning groups return all the entities and only the entities that have at least the given components. Moreover:</p>
<ul>
<li>It's guaranteed that the entity list is tightly packed in memory for fast iterations.</li>
<li>It's guaranteed that the lists of owned components are tightly packed in memory for even faster iterations and to allow direct access.</li>
<li>They stay true to the order of the owned components and all the owned components have the same order in memory.</li>
</ul>
<p>The more types of components are owned by a group, the faster it is to iterate them.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
<li>New instances of the given components are created and assigned to entities.</li>
<li>The entity currently pointed is modified (as an example, if one of the given components is removed from the entity to which the iterator points).</li>
<li>The entity currently pointed is destroyed.</li>
</ul>
<p>In all the other cases, modifying the pools of the given components in any way invalidates all the iterators and using them results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Groups share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by all the groups. Moreover, sorting an owning group affects all the instance of the same group (it means that users don't have to call <code>sort</code> on each instance to sort all of them because they share the underlying data structure).</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Lifetime of a group must overcome the one of the registry that generated it. In any other case, attempting to use a group results in undefined behavior.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits. ">entt_traits</a> for more details). </td></tr>
<tr><td class="paramname">Exclude</td><td>Types of components used to filter the group. </td></tr>
<tr><td class="paramname">Get</td><td>Types of components observed by the group. </td></tr>
<tr><td class="paramname">Owned</td><td>Type of component owned by the group. </td></tr>
<tr><td class="paramname">Other</td><td>Other types of components owned by the group. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00490">490</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="aa1d827213526124152a3fc216b4cd1f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa1d827213526124152a3fc216b4cd1f2">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the first entity that has the given components. </p>
<p>The returned iterator points to the first entity that has the given components. If the group is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a719eecdcefdddaf1fff02817f154e878" title="Returns an iterator that is past the last entity that has the given components. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00645">645</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ac2bfb8fc2f9838b6b0ee97ffe6411451"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2bfb8fc2f9838b6b0ee97ffe6411451">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if a group contains an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00693">693</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="af2ee75730230b79357f97af7a16d6a4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af2ee75730230b79357f97af7a16d6a4f">&#9670;&nbsp;</a></span>data() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities of a given pool. </p>
<p>The returned pointer is such that range <code>[data&lt;Component&gt;(), data&lt;Component&gt;() + size&lt;Component&gt;()]</code> is always a valid range, even if the container is empty.<br />
Moreover, in case the group owns the given component, the range <code>[data&lt;Component&gt;(), data&lt;Component&gt;() + <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a51da2e97c1e2cf52d12533e6fb49dd5b" title="Returns the number of existing components of the given type. ">size()</a>]</code> is such that it contains the entities that are part of the group itself.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00611">611</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a36cd8e12087222d425bae24782cd329c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36cd8e12087222d425bae24782cd329c">&#9670;&nbsp;</a></span>data() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities. </p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#af2ee75730230b79357f97af7a16d6a4f" title="Direct access to the list of entities of a given pool. ">data()</a>, <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#af2ee75730230b79357f97af7a16d6a4f" title="Direct access to the list of entities of a given pool. ">data()</a> + <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a51da2e97c1e2cf52d12533e6fb49dd5b" title="Returns the number of existing components of the given type. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00627">627</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a243b8825b3fddfb01613a4b342fa7258"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a243b8825b3fddfb01613a4b342fa7258">&#9670;&nbsp;</a></span>each()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>, Owned &amp;, Other &amp;..., Get &amp;...);</div><div class="line">void(Owned &amp;, Other &amp;..., Get &amp;...);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00749">749</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ad4d04e99bd95d23a6c734a0decb9db35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4d04e99bd95d23a6c734a0decb9db35">&#9670;&nbsp;</a></span>empty() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the pool of a given component is empty. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the pool of the given component is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00559">559</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aa3e0ef8c5709efafcea2f1402f15fbc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3e0ef8c5709efafcea2f1402f15fbc7">&#9670;&nbsp;</a></span>empty() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the group is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the group is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00567">567</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a719eecdcefdddaf1fff02817f154e878"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a719eecdcefdddaf1fff02817f154e878">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator that is past the last entity that has the given components. </p>
<p>The returned iterator points to the entity following the last entity that has the given components. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00664">664</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a687a671d42bc9ce62efca7d8ef6b992d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a687a671d42bc9ce62efca7d8ef6b992d">&#9670;&nbsp;</a></span>find()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a2fa8e37f166d1898cfb0b32a02033548">iterator_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::find </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00674">674</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a7a330f92775e23242e95c6382aab4e2c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a330f92775e23242e95c6382aab4e2c">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the components assigned to the given entity. </p>
<p>Prefer this function instead of <code><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df" title="Returns references to the given components for an entity. ">registry::get</a></code> during iterations. It has far better performance than its companion function.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the group results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the group doesn't contain the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Types of components to get. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00715">715</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a134fb533be3e15cbdbe2951965d3890d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a134fb533be3e15cbdbe2951965d3890d">&#9670;&nbsp;</a></span>less()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a243b8825b3fddfb01613a4b342fa7258" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00774">774</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="aadb0ddddb0d5610ed8fc9fe1d2347074"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aadb0ddddb0d5610ed8fc9fe1d2347074">&#9670;&nbsp;</a></span>operator[]()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a07626b2b8812a92fab71516fcb10ea02">entity_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::operator[] </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a>&#160;</td>
<td class="paramname"><em>pos</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the identifier that occupies the given position. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pos</td><td>Position of the element to return. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The identifier that occupies the given position. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00684">684</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a48caa1f53c1e8065f66d1200c89ea26c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a48caa1f53c1e8065f66d1200c89ea26c">&#9670;&nbsp;</a></span>raw()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Component* <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::raw </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of components of a given pool. </p>
<p>The returned pointer is such that range <code>[raw&lt;Component&gt;(), raw&lt;Component&gt;() + size&lt;Component&gt;()]</code> is always a valid range, even if the container is empty.<br />
Moreover, in case the group owns the given component, the range <code>[raw&lt;Component&gt;(), raw&lt;Component&gt;() + <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a51da2e97c1e2cf52d12533e6fb49dd5b" title="Returns the number of existing components of the given type. ">size()</a>]</code> is such that it contains the instances that are part of the group itself.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the components. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00589">589</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a51da2e97c1e2cf52d12533e6fb49dd5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51da2e97c1e2cf52d12533e6fb49dd5b">&#9670;&nbsp;</a></span>size() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of existing components of the given type. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component of which to return the size. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of existing components of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00540">540</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="ad106f13e2ed368fd2022d08a725fc056"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad106f13e2ed368fd2022d08a725fc056">&#9670;&nbsp;</a></span>size() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_54ca6466fcd0506388705164ba2d896f.html#a45b6abe751bc3aef843c391c34145203">size_type</a> <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00548">548</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a89b1dd1fdde4ea5c63f2c267f696a62e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89b1dd1fdde4ea5c63f2c267f696a62e">&#9670;&nbsp;</a></span>sort()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get, typename Owned , typename... Other&gt; </div>
<div class="memtemplate">
template&lt;typename... Component, typename Compare , typename Sort = std_sort, typename... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt;, Owned, Other... &gt;::sort </td>
<td>(</td>
<td class="paramtype">Compare&#160;</td>
<td class="paramname"><em>compare</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Sort&#160;</td>
<td class="paramname"><em>algo</em> = <code>Sort{}</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Sort a group according to the given comparison function. </p>
<p>Sort the group so that iterating it with a couple of iterators returns entities and components in the expected order. See <code>begin</code> and <code>end</code> for more details.</p>
<p>The comparison function object must return <code>true</code> if the first element is <em>less</em> than the second one, <code>false</code> otherwise. The signature of the comparison function should be equivalent to one of the following:</p>
<div class="fragment"><div class="line">bool(std::tuple&lt;Component &amp;...&gt;, std::tuple&lt;Component &amp;...&gt;);</div><div class="line">bool(<span class="keyword">const</span> Component &amp;, <span class="keyword">const</span> Component &amp;);</div><div class="line">bool(<span class="keyword">const</span> Entity, <span class="keyword">const</span> Entity);</div></div><!-- fragment --><p>Where <code>Component</code> are either owned types or not but still such that they are iterated by the group.<br />
Moreover, the comparison function object shall induce a <em>strict weak ordering</em> on the values.</p>
<p>The sort function oject must offer a member function template <code>operator()</code> that accepts three arguments:</p>
<ul>
<li>An iterator to the first element of the range to sort.</li>
<li>An iterator past the last element of the range to sort.</li>
<li>A comparison function to use to compare the elements.</li>
</ul>
<p>The comparison function object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.</p>
<dl class="section note"><dt>Note</dt><dd>Attempting to iterate elements using a raw pointer returned by a call to either <code>data</code> or <code>raw</code> gives no guarantees on the order, even though <code>sort</code> has been invoked.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Optional types of components to compare. </td></tr>
<tr><td class="paramname">Compare</td><td>Type of comparison function object. </td></tr>
<tr><td class="paramname">Sort</td><td>Type of sort function object. </td></tr>
<tr><td class="paramname">Args</td><td>Types of arguments to forward to the sort function object. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">compare</td><td>A valid comparison function object. </td></tr>
<tr><td class="paramname">algo</td><td>A valid sort function object. </td></tr>
<tr><td class="paramname">args</td><td>Arguments to forward to the sort function object, if any. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00828">828</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="group_8hpp_source.html">group.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -1,104 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae8586e583284a89492e391639366e39a">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a91f95cb9ccf140578e71ebb4b11e997a">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a4feba81c48d3cbe40eab1306ba462c23">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a45617bf54343e78e7757e5407766bde0">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae0379ae19b355744b5845b4979f540a7">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aba391a4533926202b366523db19ac4fb">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a079b38c587ad9af5a3fe3da5f91cdc85">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ae2dfa3de0faf46c5ff8d0e6502880212">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab564e70851b338dfd9e41d34fb52964b">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2ad800efd688e78cecd185a74d3ea2c4">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a401b6a484d089d152b20e52a2b60a776">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aa39d992100e4b79a3dee02f5dfb4f169">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#ab031f21c3d6b5afc6979ee22299d217d">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a097d67cc543e98b67199c99d8c507eb1">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a2f801b988585a43f9b106390a6dfea30">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a40e5fcc3317f3a30dcb9ddff33580af0">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abe8371a0d1992074a63a853cb6dd81c7">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a91eb89434fd97aa7877a06c0acf64772">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aff7aac214e65a27e968bf9d3100e4d51">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#abc8c436572ac36eaa56a21aff22bad58">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#a0ab2882c61c6f33b4f205e57b8a5ae55">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html#aa9517a18e4fc769215548e4a5fc6416f">sort</a>() const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_00_01Other_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get, Other... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -78,21 +78,20 @@ $(function() {
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6ce0cb9d71aee58db0b1bc7fc8dacfe0">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#afb66d4717f6b9e4a19c586eb522544b7">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a570955dab379090129a528bf15dbff3a">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598">sort</a>() const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ace576f925639c740718a5c67cdaf443a">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abd2668a2f5cd24eeb4fe5b20f8001e33">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abc62bcf057442361bf5560d570bad011">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9f4ca1f67341a3a3e1397fb0e61ca662">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a8b74d17f862c35fad975a557de40590f">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a2728847f1d565d445bb5c1a995f5115e">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ad90a0721069352d895191a6c49240e38">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a18fb71cb9621491caf569cf20c99fe3c">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#ac8aabc32d123bfa0bc10db289aafff7a">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#abdaf90d7a55b932927cfcb6a14cb3068">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a75f3809337978fb02cb31b3155f00dbd">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a9970a9683d86e9cc664e01144803d598">sort</a>() const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
@@ -109,13 +109,10 @@ Public Member Functions</h2></td></tr>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a6cc71def601dfb3a1c224b74a5c91da5">shrink_to_fit</a> ()</td></tr>
<tr class="memdesc:a6cc71def601dfb3a1c224b74a5c91da5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Requests the removal of unused capacity. <br /></td></tr>
<tr class="separator:a6cc71def601dfb3a1c224b74a5c91da5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="memTemplParams" colspan="2">template&lt;typename... Component&gt; </td></tr>
<tr class="memitem:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a3cd0ed624125b56cf2dacd9b06d6fff6">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the pool of a given component is empty. <a href="#a3cd0ed624125b56cf2dacd9b06d6fff6">More...</a><br /></td></tr>
<tr class="memdesc:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group or the pools of the given components are empty. <a href="#a3cd0ed624125b56cf2dacd9b06d6fff6">More...</a><br /></td></tr>
<tr class="separator:a3cd0ed624125b56cf2dacd9b06d6fff6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a570955dab379090129a528bf15dbff3a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a570955dab379090129a528bf15dbff3a">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a570955dab379090129a528bf15dbff3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the group is empty. <a href="#a570955dab379090129a528bf15dbff3a">More...</a><br /></td></tr>
<tr class="separator:a570955dab379090129a528bf15dbff3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5be80cb2fc104116469c1fa65b992149"><td class="memTemplParams" colspan="2">template&lt;typename Component &gt; </td></tr>
<tr class="memitem:a5be80cb2fc104116469c1fa65b992149"><td class="memTemplItemLeft" align="right" valign="top">Component *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_8_8_8_01_4_01_4.html#a5be80cb2fc104116469c1fa65b992149">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a5be80cb2fc104116469c1fa65b992149"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#a5be80cb2fc104116469c1fa65b992149">More...</a><br /></td></tr>
@@ -229,7 +226,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00220">220</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00217">217</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -300,7 +297,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00268">268</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00265">265</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -342,7 +339,7 @@ template&lt;typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00186">186</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00183">183</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -376,7 +373,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the group in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00202">202</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00199">199</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -425,19 +422,19 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00324">324</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00321">321</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a3cd0ed624125b56cf2dacd9b06d6fff6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cd0ed624125b56cf2dacd9b06d6fff6">&#9670;&nbsp;</a></span>empty() <span class="overload">[1/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3cd0ed624125b56cf2dacd9b06d6fff6">&#9670;&nbsp;</a></span>empty()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
<div class="memtemplate">
template&lt;typename Component &gt; </div>
template&lt;typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -456,48 +453,16 @@ template&lt;typename Component &gt; </div>
</table>
</div><div class="memdoc">
<p>Checks whether the pool of a given component is empty. </p>
<p>Checks whether the group or the pools of the given components are empty. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Component</td><td>Type of component in which one is interested. </td></tr>
<tr><td class="paramname">Component</td><td>Types of components in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the pool of the given component is empty, false otherwise. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>True if the group or the pools of the given components are empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00140">140</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
<a id="a570955dab379090129a528bf15dbff3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a570955dab379090129a528bf15dbff3a">&#9670;&nbsp;</a></span>empty() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__group.html">entt::basic_group</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, <a class="el" href="structentt_1_1get__t.html">get_t</a>&lt; Get... &gt; &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the group is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the group is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00148">148</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00141">141</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -531,7 +496,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00239">239</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00236">236</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -570,7 +535,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00249">249</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00246">246</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -620,7 +585,7 @@ template&lt;typename... Component&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00290">290</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00287">287</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -669,7 +634,7 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00349">349</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00346">346</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -708,7 +673,7 @@ template&lt;typename Entity , typename... Exclude, typename... Get&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The identifier that occupies the given position. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00259">259</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00256">256</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -750,7 +715,7 @@ template&lt;typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00167">167</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00164">164</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -881,7 +846,6 @@ template&lt;typename... Component, typename Compare , typename Sort = std_sort,
<li>An iterator past the last element of the range to sort.</li>
<li>A comparison function to use to compare the elements.</li>
</ul>
<p>The comparison function object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.</p>
<dl class="section note"><dt>Note</dt><dd>Attempting to iterate elements using a raw pointer returned by a call to either <code>data</code> or <code>raw</code> gives no guarantees on the order, even though <code>sort</code> has been invoked.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
@@ -901,7 +865,7 @@ template&lt;typename... Component, typename Compare , typename Sort = std_sort,
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00400">400</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00393">393</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -942,7 +906,7 @@ template&lt;typename Component &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00429">429</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="group_8hpp_source.html#l00425">425</a> of file <a class="el" href="group_8hpp_source.html">group.hpp</a>.</p>
</div>
</div>
@@ -77,20 +77,19 @@ $(function() {
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a50c2cb5276b7784011db9e937f31ada2">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#abd465a5a0743b54cac72bf0d9163b7f4">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#adb2cd73ac05ceb1f81c97abbf8768b31">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a6a5015a0bd9284e054f343954b011db8">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3">sortable</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a9f29253a8f7a4cf2972b1b073bcdf3b2">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ac46b1e783b4e723442366071f9f23fce">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a65394766edeb7e6aad42fc7a387dacb8">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a8d76ebfec56ed423b41f7837325f1153">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a90bde6cba7ff622e3ebfa898b3f8a9c1">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acc243830b7c8020cfa6a1a75814f3656">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ad3f79a1e2f300011eeb9b3420e56fccc">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a945850dca5e5d13ae5be53eaf863ac38">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#ab1600321e1a656bb9cda64e7254821ac">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#acf74917323f67e0b81b1253cc42308e9">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a1c83478c5db4749a31a4fb638901a153">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a86ae2163fd9b2999ff2faba740a9af05">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html#a0ecc1d294fd7fcfc47c38110beb3b5b3">sortable</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__group_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01get__t_3_01Get_1aada3a14110654dc27700c17c9c2396.html">entt::basic_group&lt; Entity, exclude_t&lt; Exclude... &gt;, get_t&lt; Get... &gt;, Owned... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+11 -11
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -188,7 +188,7 @@ class entt::basic_observer&lt; Entity &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00030">30</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00029">29</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a2290c465994e6af15f1fe7b35541ffbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2290c465994e6af15f1fe7b35541ffbd">&#9670;&nbsp;</a></span>basic_observer()</h2>
@@ -242,7 +242,7 @@ template&lt;typename... Matcher&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00281">281</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00285">285</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -276,7 +276,7 @@ template&lt;typename Entity &gt; </div>
<p>The returned iterator points to the first entity of the observer. If the container is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__observer.html#afe16c233c8795aa7341d61cf86c1d2d7" title="Returns an iterator that is past the last entity of the observer. ">end()</a></code>.</p>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity of the observer. </dd></dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00365">365</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00369">369</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -332,7 +332,7 @@ template&lt;typename... Matcher&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00310">310</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00314">314</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -366,7 +366,7 @@ template&lt;typename Entity &gt; </div>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the observer in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00353">353</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00357">357</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -414,7 +414,7 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00403">403</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00407">407</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -462,7 +462,7 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00423">423</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00427">427</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -494,7 +494,7 @@ template&lt;typename Entity &gt; </div>
<p>Checks whether an observer is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the observer is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00337">337</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00341">341</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -527,7 +527,7 @@ template&lt;typename Entity &gt; </div>
<p>The returned iterator points to the entity following the last entity of the observer. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity of the observer. </dd></dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00379">379</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00383">383</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
@@ -621,7 +621,7 @@ template&lt;typename Entity &gt; </div>
<p>Returns the number of elements in an observer. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of elements. </dd></dl>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00329">329</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="observer_8hpp_source.html#l00333">333</a> of file <a class="el" href="observer_8hpp_source.html">observer.hpp</a>.</p>
</div>
</div>
-107
View File
@@ -1,107 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__prototype.html">basic_prototype</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_prototype&lt; Entity &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a0a5c5313d46f5f52977e7fc3fe93d865">assign</a>(registry_type &amp;other, const entity_type dst) const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a6062b4ed6fcf6053ea748b235db47807">assign</a>(const entity_type dst) const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#ad8cc32084b579a727669e8f0e7b600a9">assign_or_replace</a>(registry_type &amp;other, const entity_type dst) const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a2884b160480a2e26acefd0d47316c26d">assign_or_replace</a>(const entity_type dst) const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a3eca09d9203b3ad97d6663e0bf5bb2f8">backend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#ac6cdd27694a8e9e2bdb576ffca098e1b">backend</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#acffae325962a54170176025d67d38a80">basic_prototype</a>(registry_type &amp;ref)</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a1592ff421e77a624830cb965c6f52110">basic_prototype</a>(basic_prototype &amp;&amp;other)</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a6f96bf09702ed9b2d911c1d08ff5b0b1">create</a>(registry_type &amp;other) const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#adb90842d165a76693de962f2cb7444e4">create</a>() const</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a0a8606dc36496d42f6188acdad4906f3">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#ac030e38aaa91c32530493a97a64fe1af">get</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a803649bd8fde6e3adad5c99dd118186a">get</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a6d4f9ce06a07f9b40ec714b13428326c">has</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a463e0d4a93ce396a069bd181c59ba6e2">operator()</a>(registry_type &amp;other, const entity_type dst) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a081d19f1dbb870c85f2bb215422700c1">operator()</a>(const entity_type dst) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a8e47d98dbba3929f3edfe682975db846">operator()</a>(registry_type &amp;other) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#afa55befc754adbf67d25ebae7aed6a75">operator()</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a24a5c455ba9368897c959f722496fa54">operator=</a>(basic_prototype &amp;&amp;other)</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#aa7b03fff67dee5898849c971bc341962">registry_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#afb3ed35c2b2edcca53a618116208ca94">set</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a01d3afe0260e80974f24c1d36b5fbccc">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a26c239c2d51cda5c0f5ff398d6a67f8c">try_get</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a59e50d3b0aabb00952322a72bdaa5c69">try_get</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a05230038ddbafaca4d5da09dfb247186">unset</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html#a1181e970dc90a33b823210d33af819d5">~basic_prototype</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__prototype.html">entt::basic_prototype&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+41 -42
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -80,8 +80,8 @@ $(function() {
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ad846f4b2f0097d33af598747df1a2365">clone</a>(exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a32d0bb4c8ad63d78c8ae455dfeb02c59">create</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3dc6b7ace48533c41cf0fb28a4b0a36c">create</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a99ca005120e888a9b9a56b24cf81c81c">create</a>(entity_type src, basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a228ba2f80cdc26aada138b3973b64fdf">create</a>(It first, It last, entity_type src, basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a9e5762d177eff276d66b10a7ed89c59f">create</a>(entity_type src, const basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a90e546bffd4d75460cfd18e4f0fc624d">create</a>(It first, It last, entity_type src, const basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ac53dddfa495bb678debd98ecc2720e6d">ctx</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#af887e7939d4b09c4634bcb24e817170b">ctx</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a16f2019558eb620c5054dc8f2e312b9e">ctx_or_set</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -91,31 +91,29 @@ $(function() {
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a6c163dcc335da90e727e2f40e67973b7">destroy</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a86d2b035f54225d82548e8f03de28754">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#af78aafdf9439c8535a2652b258a3720b">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a980aa529b3be187c4403730efc6479c0">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b">entity</a>(const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df">get</a>([[maybe_unused]] const entity_type entity) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac">get</a>([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7">get_or_assign</a>(const entity_type entity, Args &amp;&amp;... args) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a">group</a>(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7">group</a>(exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c">group</a>(exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead">has</a>(const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3">loader</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a">on_construct</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf">on_destroy</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a">on_replace</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59">operator=</a>(basic_registry &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551">orphan</a>(const entity_type entity) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8">orphans</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a6685b760dd15f8a1976c2d30f852789d">owned</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9">raw</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24">remove</a>(const entity_type entity)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661">replace</a>(const entity_type entity, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a97677776c466a310547be1fdfdf84ff9">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a5d07b2e0105da47d25ceef530d91bb8b">entity</a>(const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a7df39ef4ca62af9540f593dfb5550138">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df">get</a>([[maybe_unused]] const entity_type entity) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aed5e3029a1134f1bb87617d0e99f89ac">get</a>([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a20a14f97c1684c5aaeeba13ba40a3ad7">get_or_assign</a>(const entity_type entity, Args &amp;&amp;... args) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a616819fed68c4a7ad1d37b941b005fc3">group</a>(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a886142ed67a5a4a3a7114569c0a0f74a">group</a>(get_t&lt; Get... &gt;, exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ad8a3da35761199f663293d1b30a33bc7">group</a>(exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a33979dba930ff03181b63866a712944c">group</a>(exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a22f516140a0fb811552f82910d95fead">has</a>(const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3d1400403d03bc6e3e5fd9dfe60c5dd3">loader</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a3784cae09a1a72a861c4ccd1e76db86a">on_construct</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2a4af2fe256e5609282686b427f0ebcf">on_destroy</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a23857b92dfe141d7fd60c450fd14507a">on_replace</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a70f7acd3a0e9a8dc4ef7e85172f93a59">operator=</a>(basic_registry &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a10f5e61d4cabab9e9c1e87edc30de551">orphan</a>(const entity_type entity) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ae337ceb77e75c10c73ffa671e09bfff8">orphans</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aad398e6279c6bbee2068b94c74bf83d6">prepare</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aa0aa5dd120230aecd3b41474acbaecd2">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a79751d793fe0f28e8f0e163e46638cb9">raw</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a44f5eac6fa4d1999a121f55e67a36c24">remove</a>(const entity_type entity)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a0411735fcddcc942613463c5401dd661">replace</a>(const entity_type entity, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a632adf32f7b23f1dae8bf4f8800a0bbe">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a95dd0483f9839dfbce8af5ed120b94c2">reset</a>(const entity_type entity)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ac5b546f2508b2a10a6f1d8c77db12837">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a38a7c3696f749d0e873374086c3c0f88">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -124,23 +122,24 @@ $(function() {
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a63aa387e557553d61483a58807cd785e">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#abb5713726f7b5c4b67a0271a64bedd2f">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#afdfc12e1ffa6bac72c2de9af7e91f44e">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a19addadd1c414778261e7c1ed67eee76">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a6a44260f861a699f1353097391c51636">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ad6ab9182dd41bc02ddfc0c3c8195a215">snapshot</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a38ac2a883e3d881c6ae5a05a0252b7ae">sort</a>(Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2907f89b80fb692b16727e5e67a91c5d">sort</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2ceeec2ded0a6f90700d7cb23651ae86">stomp</a>(const entity_type dst, const entity_type src, basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a9df266f13e791541e12b054e3614e045">stomp</a>(It first, It last, const entity_type src, basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5">try_ctx</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89">try_ctx</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809">try_get</a>([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371">try_get</a>([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1">type</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd">unset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73">valid</a>(const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e">version</a>(const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ab2ea1df9f827924f2ecba67921bf4845">view</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a1a2ffab3b15bb205ceef86b8d8b3fdcb">view</a>() const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aeda3c0666945065d160ed58905b07888">sortable</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a99434b531cbdf6e04be282c92d8d47b0">stomp</a>(const entity_type dst, const entity_type src, const basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ae4518841df584574580f178dc0f3db39">stomp</a>(It first, It last, const entity_type src, const basic_registry &amp;other, exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a33650f5792414c71ef00c3bcaca3f1d5">try_ctx</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a4182d11d18ec7873562c2842a332ac89">try_ctx</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a25c4412448ddcbfe1290f72498ae7809">try_get</a>([[maybe_unused]] const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a2c3ba909a2f845601a5b873c6bdd8371">try_get</a>([[maybe_unused]] const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a478113cca30db07fa56a557d535e09c1">type</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aaa23b74e76b1749bb510a86e9d31b9cd">unset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ac7d145b7adb8ca486c49cfd44aebea73">valid</a>(const entity_type entity) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#a75f09d82b0cd6305ea7422d60162704e">version</a>(const entity_type entity) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aae2197c81e29459bbe3fa7984656a2b6">version_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#ab3765405b005571fae24401dc13f039b">view</a>(exclude_t&lt; Exclude... &gt;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__registry.html#aedb9b044141a3f700a1e547def00b768">view</a>(exclude_t&lt; Exclude... &gt;={}) const</td><td class="entry"><a class="el" href="classentt_1_1basic__registry.html">entt::basic_registry&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
File diff suppressed because it is too large Load Diff
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+8 -8
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -147,7 +147,7 @@ class entt::basic_runtime_view&lt; Entity &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00022">22</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00021">21</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="af47b1aff2d44990f17c9740cf24a2670"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af47b1aff2d44990f17c9740cf24a2670">&#9670;&nbsp;</a></span>begin()</h2>
@@ -179,7 +179,7 @@ template&lt;typename Entity &gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00180">180</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00179">179</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
@@ -218,7 +218,7 @@ template&lt;typename Entity &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00223">223</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00222">222</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
@@ -266,7 +266,7 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00245">245</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00244">244</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
@@ -298,7 +298,7 @@ template&lt;typename Entity &gt; </div>
<p>Checks if the view is definitely empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the view is definitely empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00162">162</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00161">161</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
@@ -332,7 +332,7 @@ template&lt;typename Entity &gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00207">207</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00206">206</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
@@ -364,7 +364,7 @@ template&lt;typename Entity &gt; </div>
<p>Estimates the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Estimated number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00154">154</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00153">153</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+3 -3
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -124,7 +124,7 @@ class entt::basic_snapshot&lt; Entity &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00042">42</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00037">37</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a59cf70d5b7730d388f3a63845e8faede"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59cf70d5b7730d388f3a63845e8faede">&#9670;&nbsp;</a></span>component() <span class="overload">[1/2]</span></h2>
@@ -239,7 +239,7 @@ template&lt;typename... Component, typename Archive , typename It &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An object of this type to continue creating the snapshot. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00175">175</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00157">157</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+6 -6
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -123,7 +123,7 @@ class entt::basic_snapshot_loader&lt; Entity &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00046">46</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00041">41</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="af7352e091c3421432cc2ef77010a0a2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7352e091c3421432cc2ef77010a0a2d">&#9670;&nbsp;</a></span>component()</h2>
@@ -170,7 +170,7 @@ template&lt;typename... Component, typename Archive &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A valid loader to continue restoring data. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00302">302</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00284">284</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -218,7 +218,7 @@ template&lt;typename Archive &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A valid loader to continue restoring data. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00282">282</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00264">264</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -266,7 +266,7 @@ template&lt;typename Archive &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A valid loader to continue restoring data. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00265">265</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00247">247</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
@@ -331,7 +331,7 @@ template&lt;typename Entity &gt; </div>
This functions helps to identify and destroy those entities.</p>
<dl class="section return"><dt>Returns</dt><dd>A valid loader to continue restoring data. </dd></dl>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00317">317</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="snapshot_8hpp_source.html#l00299">299</a> of file <a class="el" href="snapshot_8hpp_source.html">snapshot.hpp</a>.</p>
</div>
</div>
+44 -43
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -70,48 +70,49 @@ $(function() {
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ad00076491350dff51f9a057da5c88dc0">batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a07b5afc213e7421b5031e30b4f2b6bf0">batch</a>(It first, It last, const object_type &amp;value)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5">begin</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869">const_iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e">construct</a>(const entity_type entt, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">entt::sparse_set::construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41">destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9">end</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9">get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d">get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2">index</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065">raw</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a652e7df5db4b2ba32b58068eea6ef100">swap</a>(const size_type lhs, const size_type rhs) ENTT_NOEXCEPT override</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa">try_get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35">try_get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">arrange</a>(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668">batch</a>(It first, It last, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">entt::sparse_set::batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aecc4b13b67a7664c5c36596f2b927bed">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab963b76ebe297a1ad4a2c433aa55f2b5">begin</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aa5499c18eea80f3c903afef5031abf1b">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a5fb9f5fd4996f424ab94b70f79b15205">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aaa02d4db8defee92683bbc47b3eaa869">const_iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e">construct</a>(const entity_type entt, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">entt::sparse_set::construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41">destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a43640288a074495b549779ad271d7010">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a9922f88c0ed8f587ff4ae09745f67ae9">end</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab49ab5a065759dcd17f6c0b6a0b8fcba">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ab9f40b67e8a21a0aa2071ea127a1e4b9">get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a629a39bfc6a29036671dea9d9b42f70d">get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2">index</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a9a1c32a0adebc8c3dc279064742c858f">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8e38d136d24bb38ef96c02135549c5d8">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ae7757471c65eca305d2b83b570571065">raw</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8f2a2a968a241832acc338b8dca2f744">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a1ed587372f7bcf15ab0d17397c2dad81">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a208fc8c4400c12e41229345badd0bc99">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#afffeca2fda54eebf889c2e4f447ab37b">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b">swap</a>(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT override</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#aab7da23b603d6cc78e67b3509ad979fa">try_get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage.html#a8ff9d6ef48840c8ad88f8c0b8b5dcd35">try_get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
+34 -94
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -180,20 +180,16 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memitem:a4cf7d707b57b6dd63c4d7852a23b6f5e"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53">object_type</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#a4cf7d707b57b6dd63c4d7852a23b6f5e">construct</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a4cf7d707b57b6dd63c4d7852a23b6f5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns an entity to a storage and constructs its object. <a href="#a4cf7d707b57b6dd63c4d7852a23b6f5e">More...</a><br /></td></tr>
<tr class="separator:a4cf7d707b57b6dd63c4d7852a23b6f5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad00076491350dff51f9a057da5c88dc0"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:ad00076491350dff51f9a057da5c88dc0"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#ad00076491350dff51f9a057da5c88dc0">batch</a> (It first, It last)</td></tr>
<tr class="memdesc:ad00076491350dff51f9a057da5c88dc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage and default constructs their objects. <a href="#ad00076491350dff51f9a057da5c88dc0">More...</a><br /></td></tr>
<tr class="separator:ad00076491350dff51f9a057da5c88dc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07b5afc213e7421b5031e30b4f2b6bf0"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:a07b5afc213e7421b5031e30b4f2b6bf0"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#a07b5afc213e7421b5031e30b4f2b6bf0">batch</a> (It first, It last, const <a class="el" href="classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53">object_type</a> &amp;value)</td></tr>
<tr class="memdesc:a07b5afc213e7421b5031e30b4f2b6bf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage and copy constructs their objects. <a href="#a07b5afc213e7421b5031e30b4f2b6bf0">More...</a><br /></td></tr>
<tr class="separator:a07b5afc213e7421b5031e30b4f2b6bf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ef85c69a23deffd46b2dcfafcc4a668"><td class="memTemplParams" colspan="2">template&lt;typename It , typename... Args&gt; </td></tr>
<tr class="memitem:a5ef85c69a23deffd46b2dcfafcc4a668"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#a5ef85c69a23deffd46b2dcfafcc4a668">batch</a> (It first, It last, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a5ef85c69a23deffd46b2dcfafcc4a668"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage and default constructs or copy constructs their objects. <a href="#a5ef85c69a23deffd46b2dcfafcc4a668">More...</a><br /></td></tr>
<tr class="separator:a5ef85c69a23deffd46b2dcfafcc4a668"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab59f0a70b5d25e66062e5ae5b501ab41"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#ab59f0a70b5d25e66062e5ae5b501ab41">destroy</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt)</td></tr>
<tr class="memdesc:ab59f0a70b5d25e66062e5ae5b501ab41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes an entity from a storage and destroys its object. <a href="#ab59f0a70b5d25e66062e5ae5b501ab41">More...</a><br /></td></tr>
<tr class="separator:ab59f0a70b5d25e66062e5ae5b501ab41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a652e7df5db4b2ba32b58068eea6ef100"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#a652e7df5db4b2ba32b58068eea6ef100">swap</a> (const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> lhs, const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> rhs) ENTT_NOEXCEPT override</td></tr>
<tr class="memdesc:a652e7df5db4b2ba32b58068eea6ef100"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps entities and objects in the internal packed arrays. <a href="#a652e7df5db4b2ba32b58068eea6ef100">More...</a><br /></td></tr>
<tr class="separator:a652e7df5db4b2ba32b58068eea6ef100"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35f98e0151152bbf10fd1666f4bcf00b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#a35f98e0151152bbf10fd1666f4bcf00b">swap</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> lhs, const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> rhs) ENTT_NOEXCEPT override</td></tr>
<tr class="memdesc:a35f98e0151152bbf10fd1666f4bcf00b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps entities and objects in the internal packed arrays. <a href="#a35f98e0151152bbf10fd1666f4bcf00b">More...</a><br /></td></tr>
<tr class="separator:a35f98e0151152bbf10fd1666f4bcf00b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9b5e700778b280a69bb13faff484756"><td class="memTemplParams" colspan="2">template&lt;typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:ac9b5e700778b280a69bb13faff484756"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage.html#ac9b5e700778b280a69bb13faff484756">sort</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:ac9b5e700778b280a69bb13faff484756"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="#ac9b5e700778b280a69bb13faff484756">More...</a><br /></td></tr>
@@ -275,6 +271,10 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memitem:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">More...</a><br /></td></tr>
<tr class="separator:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplParams" colspan="2">template&lt;typename Apply , typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">arrange</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Apply apply, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">More...</a><br /></td></tr>
<tr class="separator:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a> (const <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;other) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort entities according to their order in another sparse set. <a href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">More...</a><br /></td></tr>
<tr class="separator:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -304,76 +304,15 @@ Internal data structures arrange elements to maximize performance. Because of th
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00051">51</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ad00076491350dff51f9a057da5c88dc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad00076491350dff51f9a057da5c88dc0">&#9670;&nbsp;</a></span>batch() <span class="overload">[1/2]</span></h2>
<a id="a5ef85c69a23deffd46b2dcfafcc4a668"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ef85c69a23deffd46b2dcfafcc4a668">&#9670;&nbsp;</a></span>batch()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename Type, typename = std::void_t&lt;&gt;&gt; </div>
<div class="memtemplate">
template&lt;typename It &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, typename &gt;::batch </td>
<td>(</td>
<td class="paramtype">It&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">It&#160;</td>
<td class="paramname"><em>last</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Assigns one or more entities to a storage and default constructs their objects. </p>
<p>The object type must be at least move and default insertable.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to assign an entity that already belongs to the storage results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">It</td><td>Type of forward iterator. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">first</td><td>An iterator to the first element of the range of entities. </td></tr>
<tr><td class="paramname">last</td><td>An iterator past the last element of the range of entities. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the list of instances just created and sorted the same of the entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00353">353</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="a07b5afc213e7421b5031e30b4f2b6bf0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07b5afc213e7421b5031e30b4f2b6bf0">&#9670;&nbsp;</a></span>batch() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename Type, typename = std::void_t&lt;&gt;&gt; </div>
<div class="memtemplate">
template&lt;typename It &gt; </div>
template&lt;typename It , typename... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -393,8 +332,8 @@ template&lt;typename It &gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__storage.html#aa4e4358d25212b71d9629e470b845c53">object_type</a> &amp;&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -409,12 +348,14 @@ template&lt;typename It &gt; </div>
</table>
</div><div class="memdoc">
<p>Assigns one or more entities to a storage and copy constructs their objects. </p>
<p>The object type must be at least move and copy insertable.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__storage.html#ad00076491350dff51f9a057da5c88dc0" title="Assigns one or more entities to a storage and default constructs their objects. ">batch</a></dd></dl>
<p>Assigns one or more entities to a storage and default constructs or copy constructs their objects. </p>
<p>The object type must be at least move and default insertable if no arguments are provided, move and copy insertable otherwise.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to assign an entity that already belongs to the storage results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">It</td><td>Type of forward iterator. </td></tr>
<tr><td class="paramname">Args</td><td>Types of arguments to use to construct the object. </td></tr>
</table>
</dd>
</dl>
@@ -422,13 +363,13 @@ template&lt;typename It &gt; </div>
<table class="params">
<tr><td class="paramname">first</td><td>An iterator to the first element of the range of entities. </td></tr>
<tr><td class="paramname">last</td><td>An iterator past the last element of the range of entities. </td></tr>
<tr><td class="paramname">value</td><td>The value to initialize the new objects with. </td></tr>
<tr><td class="paramname">args</td><td>Parameters to use to construct an object for the entities. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the list of instances just created and sorted the same of the entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00376">376</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00356">356</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
@@ -665,7 +606,7 @@ template&lt;typename Entity, typename Type, typename = std::void_t&lt;&gt;&gt;
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00394">394</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00379">379</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
@@ -992,7 +933,6 @@ template&lt;typename Compare , typename Sort = std_sort, typename... Args&gt; <
<li>An iterator past the last element of the range to sort.</li>
<li>A comparison function to use to compare the elements.</li>
</ul>
<p>The comparison function object received by the sort function object hasn't necessarily the type of the one passed along with the other parameters to this member function.</p>
<dl class="section note"><dt>Note</dt><dd>Attempting to iterate elements using a raw pointer returned by a call to either <code>data</code> or <code>raw</code> gives no guarantees on the order, even though <code>sort</code> has been invoked.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
@@ -1013,12 +953,12 @@ template&lt;typename Compare , typename Sort = std_sort, typename... Args&gt; <
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00465">465</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00444">444</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="a652e7df5db4b2ba32b58068eea6ef100"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a652e7df5db4b2ba32b58068eea6ef100">&#9670;&nbsp;</a></span>swap()</h2>
<a id="a35f98e0151152bbf10fd1666f4bcf00b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a35f98e0151152bbf10fd1666f4bcf00b">&#9670;&nbsp;</a></span>swap()</h2>
<div class="memitem">
<div class="memproto">
@@ -1031,13 +971,13 @@ template&lt;typename Entity, typename Type, typename = std::void_t&lt;&gt;&gt;
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, typename &gt;::swap </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a>&#160;</td>
<td class="paramname"><em>lhs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a>&#160;</td>
<td class="paramname"><em>rhs</em>&#160;</td>
</tr>
<tr>
@@ -1058,15 +998,15 @@ template&lt;typename Entity, typename Type, typename = std::void_t&lt;&gt;&gt;
An assertion will abort the execution at runtime in debug mode if the sparse set doesn't contain the given entities.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lhs</td><td>A valid position within the sparse set. </td></tr>
<tr><td class="paramname">rhs</td><td>A valid position within the sparse set. </td></tr>
<tr><td class="paramname">lhs</td><td>A valid entity identifier. </td></tr>
<tr><td class="paramname">rhs</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<p>Reimplemented from <a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">entt::sparse_set&lt; Entity &gt;</a>.</p>
<p>Reimplemented from <a class="el" href="classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762">entt::sparse_set&lt; Entity &gt;</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00413">413</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00398">398</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
@@ -0,0 +1,3 @@
<map id="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;" name="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="18,5,193,32"/>
</map>
@@ -0,0 +1,115 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">arrange</a>(iterator_type first, iterator_type last, Apply apply, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3">batch</a>(It first, It last, const object_type &amp;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">entt::sparse_set::batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170">destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2">index</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762">swap</a>(const entity_type lhs, const entity_type rhs) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Class Template Reference</title>
<title>EnTT: entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt; Class Template Reference</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -59,7 +59,7 @@ $(function() {
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></li> </ul>
<li class="navelem"><a class="el" href="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html">basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
@@ -67,51 +67,51 @@ $(function() {
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty_55389e5d919856c74679502c484f479d.html">List of all members</a> </div>
<a href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Class Template Reference</div> </div>
<div class="title">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Basic storage implementation.
<a href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#details">More...</a></p>
<a href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="storage_8hpp_source.html">storage.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;:</div>
Inheritance diagram for entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty_03c43bf21b9ff29af7916eca6f32bd45.png" border="0" usemap="#entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map" alt="Inheritance graph"/></div>
<map name="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map" id="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="5,5,180,32"/>
<div class="center"><img src="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO46f42ccdf26de3578eb8ad448af3bf58.png" border="0" usemap="#entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_inherit__map" alt="Inheritance graph"/></div>
<map name="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_inherit__map" id="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_inherit__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="18,5,193,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;:</div>
Collaboration diagram for entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty_ac9255c8c588438ee2413ba78575c478.png" border="0" usemap="#entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map" alt="Collaboration graph"/></div>
<map name="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map" id="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="5,5,180,32"/>
<div class="center"><img src="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4__coll__graph.png" border="0" usemap="#entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_coll__map" alt="Collaboration graph"/></div>
<map name="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_coll__map" id="entt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4_coll__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="18,5,193,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:af67063212a566afa51deede112b70d2a"><td class="memItemLeft" align="right" valign="top"><a id="af67063212a566afa51deede112b70d2a"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a> = Type</td></tr>
<tr class="memdesc:af67063212a566afa51deede112b70d2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the objects associated with the entities. <br /></td></tr>
<tr class="separator:af67063212a566afa51deede112b70d2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f21a71d6e4a2aea789f668d6739e450"><td class="memItemLeft" align="right" valign="top"><a id="a3f21a71d6e4a2aea789f668d6739e450"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a3f21a71d6e4a2aea789f668d6739e450">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a3f21a71d6e4a2aea789f668d6739e450"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a3f21a71d6e4a2aea789f668d6739e450"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace05b6c2a6490285dc232b17edea2899"><td class="memItemLeft" align="right" valign="top"><a id="ace05b6c2a6490285dc232b17edea2899"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#ace05b6c2a6490285dc232b17edea2899">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:ace05b6c2a6490285dc232b17edea2899"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:ace05b6c2a6490285dc232b17edea2899"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2136db82a122b336298bd909c07c629b"><td class="memItemLeft" align="right" valign="top"><a id="a2136db82a122b336298bd909c07c629b"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a2136db82a122b336298bd909c07c629b">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:a2136db82a122b336298bd909c07c629b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random access iterator type. <br /></td></tr>
<tr class="separator:a2136db82a122b336298bd909c07c629b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8d68c5302c6f7b8f6ad6663d95eea25"><td class="memItemLeft" align="right" valign="top"><a id="ac8d68c5302c6f7b8f6ad6663d95eea25"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a> = Type</td></tr>
<tr class="memdesc:ac8d68c5302c6f7b8f6ad6663d95eea25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the objects associated with the entities. <br /></td></tr>
<tr class="separator:ac8d68c5302c6f7b8f6ad6663d95eea25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5fde5ec382c377b2d2fff3b8bacb6cd"><td class="memItemLeft" align="right" valign="top"><a id="ae5fde5ec382c377b2d2fff3b8bacb6cd"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ae5fde5ec382c377b2d2fff3b8bacb6cd">entity_type</a> = Entity</td></tr>
<tr class="memdesc:ae5fde5ec382c377b2d2fff3b8bacb6cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:ae5fde5ec382c377b2d2fff3b8bacb6cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c6a84ddddca748a2de04c448179b9e5"><td class="memItemLeft" align="right" valign="top"><a id="a1c6a84ddddca748a2de04c448179b9e5"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a1c6a84ddddca748a2de04c448179b9e5">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:a1c6a84ddddca748a2de04c448179b9e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a1c6a84ddddca748a2de04c448179b9e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3104937f03f1cf10c5804e8928107d80"><td class="memItemLeft" align="right" valign="top"><a id="a3104937f03f1cf10c5804e8928107d80"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a3104937f03f1cf10c5804e8928107d80">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:a3104937f03f1cf10c5804e8928107d80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random access iterator type. <br /></td></tr>
<tr class="separator:a3104937f03f1cf10c5804e8928107d80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classentt_1_1sparse__set"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classentt_1_1sparse__set')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td></tr>
<tr class="memitem:a9a1dbe5ab2dbb098beae0bff56bbf780 inherit pub_types_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a9a1dbe5ab2dbb098beae0bff56bbf780"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> = Entity</td></tr>
@@ -128,25 +128,25 @@ using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="cla
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:af1ea909d6d6a710a98b0e9c0673e5ca2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af1ea909d6d6a710a98b0e9c0673e5ca2">cbegin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af1ea909d6d6a710a98b0e9c0673e5ca2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#af1ea909d6d6a710a98b0e9c0673e5ca2">More...</a><br /></td></tr>
<tr class="separator:af1ea909d6d6a710a98b0e9c0673e5ca2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4a66c77a01df615cbdf02c07e184bd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa4a66c77a01df615cbdf02c07e184bd1">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa4a66c77a01df615cbdf02c07e184bd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#aa4a66c77a01df615cbdf02c07e184bd1">More...</a><br /></td></tr>
<tr class="separator:aa4a66c77a01df615cbdf02c07e184bd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99eb437d4d9d2a2c316787e6073da32f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a99eb437d4d9d2a2c316787e6073da32f">cend</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a99eb437d4d9d2a2c316787e6073da32f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#a99eb437d4d9d2a2c316787e6073da32f">More...</a><br /></td></tr>
<tr class="separator:a99eb437d4d9d2a2c316787e6073da32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa56ba13f8c81dd153417fd0054e23a0b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa56ba13f8c81dd153417fd0054e23a0b">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa56ba13f8c81dd153417fd0054e23a0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#aa56ba13f8c81dd153417fd0054e23a0b">More...</a><br /></td></tr>
<tr class="separator:aa56ba13f8c81dd153417fd0054e23a0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd4baaae6a45b994ff2890034e423954"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#acd4baaae6a45b994ff2890034e423954">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:acd4baaae6a45b994ff2890034e423954"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the object associated with an entity. <a href="#acd4baaae6a45b994ff2890034e423954">More...</a><br /></td></tr>
<tr class="separator:acd4baaae6a45b994ff2890034e423954"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97fe579a005cb4b53e30ab988a0d05cf"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:a97fe579a005cb4b53e30ab988a0d05cf"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a97fe579a005cb4b53e30ab988a0d05cf">batch</a> (It first, It last, const <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a> &amp;={})</td></tr>
<tr class="memdesc:a97fe579a005cb4b53e30ab988a0d05cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage. <a href="#a97fe579a005cb4b53e30ab988a0d05cf">More...</a><br /></td></tr>
<tr class="separator:a97fe579a005cb4b53e30ab988a0d05cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a1f9fe415478f42e27b51ae56a87fcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a4a1f9fe415478f42e27b51ae56a87fcf">cbegin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a4a1f9fe415478f42e27b51ae56a87fcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#a4a1f9fe415478f42e27b51ae56a87fcf">More...</a><br /></td></tr>
<tr class="separator:a4a1f9fe415478f42e27b51ae56a87fcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9676a3940e684f720bd2fc06128a4e2e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a9676a3940e684f720bd2fc06128a4e2e">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a9676a3940e684f720bd2fc06128a4e2e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#a9676a3940e684f720bd2fc06128a4e2e">More...</a><br /></td></tr>
<tr class="separator:a9676a3940e684f720bd2fc06128a4e2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f935bdaca5c82f9d433d349bf28ee89"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a0f935bdaca5c82f9d433d349bf28ee89">cend</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a0f935bdaca5c82f9d433d349bf28ee89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#a0f935bdaca5c82f9d433d349bf28ee89">More...</a><br /></td></tr>
<tr class="separator:a0f935bdaca5c82f9d433d349bf28ee89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ae4c428b741e0ebd29b45e5a872a8ac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a8ae4c428b741e0ebd29b45e5a872a8ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#a8ae4c428b741e0ebd29b45e5a872a8ac">More...</a><br /></td></tr>
<tr class="separator:a8ae4c428b741e0ebd29b45e5a872a8ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23b589f4d08e6c18071c95b310004bd9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a23b589f4d08e6c18071c95b310004bd9">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a23b589f4d08e6c18071c95b310004bd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the object associated with an entity. <a href="#a23b589f4d08e6c18071c95b310004bd9">More...</a><br /></td></tr>
<tr class="separator:a23b589f4d08e6c18071c95b310004bd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66175004c693a405d57722c67b1ceda3"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:a66175004c693a405d57722c67b1ceda3"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a66175004c693a405d57722c67b1ceda3">batch</a> (It first, It last, const <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a> &amp;={})</td></tr>
<tr class="memdesc:a66175004c693a405d57722c67b1ceda3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage. <a href="#a66175004c693a405d57722c67b1ceda3">More...</a><br /></td></tr>
<tr class="separator:a66175004c693a405d57722c67b1ceda3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classentt_1_1sparse__set"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classentt_1_1sparse__set')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td></tr>
<tr class="memitem:a8ef544aaed30126797f6f0b9a9f8b9e8 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a8ef544aaed30126797f6f0b9a9f8b9e8"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a> ()=default</td></tr>
@@ -216,13 +216,17 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memitem:ab69719626bee1add76096046db86a170 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170">destroy</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt)</td></tr>
<tr class="memdesc:ab69719626bee1add76096046db86a170 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes an entity from a sparse set. <a href="classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170">More...</a><br /></td></tr>
<tr class="separator:ab69719626bee1add76096046db86a170 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">swap</a> (const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> lhs, const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> rhs) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps two entities in the internal packed array. <a href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">More...</a><br /></td></tr>
<tr class="separator:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ef14da059528647a5d72f2e2ce0d762 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762">swap</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> lhs, const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> rhs) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a5ef14da059528647a5d72f2e2ce0d762 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps two entities in the internal packed array. <a href="classentt_1_1sparse__set.html#a5ef14da059528647a5d72f2e2ce0d762">More...</a><br /></td></tr>
<tr class="separator:a5ef14da059528647a5d72f2e2ce0d762 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplParams" colspan="2">template&lt;typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">More...</a><br /></td></tr>
<tr class="separator:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplParams" colspan="2">template&lt;typename Apply , typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">arrange</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Apply apply, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="classentt_1_1sparse__set.html#a28b36afb6ae6f91d995ff259184d6515">More...</a><br /></td></tr>
<tr class="separator:a28b36afb6ae6f91d995ff259184d6515 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a> (const <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;other) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort entities according to their order in another sparse set. <a href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">More...</a><br /></td></tr>
<tr class="separator:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -233,7 +237,7 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename Type&gt;<br />
class entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</h3>
class entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;</h3>
<p>Basic storage implementation. </p>
<p>This class is a refinement of a sparse set that associates an object to an entity. The main purpose of this class is to extend sparse sets to store components in a registry. It guarantees fast access both to the elements and to the entities.</p>
@@ -250,10 +254,10 @@ Internal data structures arrange elements to maximize performance. Because of th
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00495">495</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00477">477</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a97fe579a005cb4b53e30ab988a0d05cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97fe579a005cb4b53e30ab988a0d05cf">&#9670;&nbsp;</a></span>batch()</h2>
<a id="a66175004c693a405d57722c67b1ceda3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a66175004c693a405d57722c67b1ceda3">&#9670;&nbsp;</a></span>batch()</h2>
<div class="memitem">
<div class="memproto">
@@ -266,7 +270,7 @@ template&lt;typename It &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::batch </td>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::batch </td>
<td>(</td>
<td class="paramtype">It&#160;</td>
<td class="paramname"><em>first</em>, </td>
@@ -280,7 +284,7 @@ template&lt;typename It &gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a> &amp;&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a> &amp;&#160;</td>
<td class="paramname"> = <code>{}</code>&#160;</td>
</tr>
<tr>
@@ -315,12 +319,12 @@ template&lt;typename It &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the list of instances just created and sorted the same of the entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00690">690</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00672">672</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="aa4a66c77a01df615cbdf02c07e184bd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4a66c77a01df615cbdf02c07e184bd1">&#9670;&nbsp;</a></span>begin()</h2>
<a id="a9676a3940e684f720bd2fc06128a4e2e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9676a3940e684f720bd2fc06128a4e2e">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
@@ -331,7 +335,7 @@ template&lt;typename Entity , typename Type &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::begin </td>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -345,16 +349,84 @@ template&lt;typename Entity , typename Type &gt; </div>
</div><div class="memdoc">
<p>Returns an iterator to the beginning. </p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa56ba13f8c81dd153417fd0054e23a0b" title="Returns an iterator to the end. ">end()</a></code>.</p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac" title="Returns an iterator to the end. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00606">606</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="a4a1f9fe415478f42e27b51ae56a87fcf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a1f9fe415478f42e27b51ae56a87fcf">&#9670;&nbsp;</a></span>cbegin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::cbegin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the beginning. </p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#a8ae4c428b741e0ebd29b45e5a872a8ac" title="Returns an iterator to the end. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00600">600</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="a0f935bdaca5c82f9d433d349bf28ee89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f935bdaca5c82f9d433d349bf28ee89">&#9670;&nbsp;</a></span>cend()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::cend </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the end. </p>
<p>The returned iterator points to the element following the last instance of the given type. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the element following the last instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00624">624</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="af1ea909d6d6a710a98b0e9c0673e5ca2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1ea909d6d6a710a98b0e9c0673e5ca2">&#9670;&nbsp;</a></span>cbegin()</h2>
<a id="a8ae4c428b741e0ebd29b45e5a872a8ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ae4c428b741e0ebd29b45e5a872a8ac">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
@@ -365,41 +437,7 @@ template&lt;typename Entity , typename Type &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::cbegin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the beginning. </p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa56ba13f8c81dd153417fd0054e23a0b" title="Returns an iterator to the end. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00618">618</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="a99eb437d4d9d2a2c316787e6073da32f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99eb437d4d9d2a2c316787e6073da32f">&#9670;&nbsp;</a></span>cend()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::cend </td>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -417,12 +455,12 @@ template&lt;typename Entity , typename Type &gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the element following the last instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00642">642</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00629">629</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="aa56ba13f8c81dd153417fd0054e23a0b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa56ba13f8c81dd153417fd0054e23a0b">&#9670;&nbsp;</a></span>end()</h2>
<a id="a23b589f4d08e6c18071c95b310004bd9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23b589f4d08e6c18071c95b310004bd9">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
@@ -433,41 +471,7 @@ template&lt;typename Entity , typename Type &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the end. </p>
<p>The returned iterator points to the element following the last instance of the given type. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the element following the last instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00647">647</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
<a id="acd4baaae6a45b994ff2890034e423954"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd4baaae6a45b994ff2890034e423954">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::get </td>
<td class="memname"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01ENTT__ENABLE__ETO_07Type_08_4_01_4.html#ac8d68c5302c6f7b8f6ad6663d95eea25">object_type</a> <a class="el" href="classentt_1_1basic__storage.html">entt::basic_storage</a>&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
@@ -493,7 +497,7 @@ template&lt;typename Entity , typename Type &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The object associated with the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00667">667</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="storage_8hpp_source.html#l00649">649</a> of file <a class="el" href="storage_8hpp_source.html">storage.hpp</a>.</p>
</div>
</div>
@@ -0,0 +1,3 @@
<map id="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;" name="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; ENTT_ENABLE_ETO(Type)&gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="18,5,193,32"/>
</map>
@@ -1,3 +0,0 @@
<map id="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;" name="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="5,5,180,32"/>
</map>
@@ -1,114 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a97fe579a005cb4b53e30ab988a0d05cf">batch</a>(It first, It last, const object_type &amp;={})</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">entt::sparse_set::batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa4a66c77a01df615cbdf02c07e184bd1">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af1ea909d6d6a710a98b0e9c0673e5ca2">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a99eb437d4d9d2a2c316787e6073da32f">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab69719626bee1add76096046db86a170">destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#aa56ba13f8c81dd153417fd0054e23a0b">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a3f21a71d6e4a2aea789f668d6739e450">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#acd4baaae6a45b994ff2890034e423954">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afbdea531952ca6857abdfddf7866b5a2">index</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a2136db82a122b336298bd909c07c629b">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#af67063212a566afa51deede112b70d2a">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8b4b9dd989877bc333fdc455fcd068d7">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#abcf1b927ccc18fba0fef178d168c1fa7">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a75f5d70148a149e4cbc485c7a7b00dda">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#ace05b6c2a6490285dc232b17edea2899">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">swap</a>(const size_type lhs, const size_type rhs) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -1,3 +0,0 @@
<map id="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;" name="entt::basic_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="5,5,180,32"/>
</map>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

-100
View File
@@ -1,100 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view.html">basic_view</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, Component &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a00d2bb01727273bf40acdf1a57588fc7">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a8dc82a3867a4ae26e8e80b5abc2e2118">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#ac2122c6c128744f4617fab34dca651c3">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a1019208022f9a4a35ade26f3f35c097f">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#aa8d3d77cb491ea84ebac40017780c96f">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a9d19f70eda47e20c8c6d97b7f2c05f11">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#af7916ac310c1ec40c3cb5426d74d641d">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#aa8098ec2a26d9386d68c0b664d21d93e">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#aaa4f1d01440c37739502d3d73a28c4ca">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a09f6332a1c27e104d8006dfba2b5b3a3">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a6ec1ea64f16ad1605dccf48d713ac429">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#acb3b8c843b1ded37a8bac4e9d434d048">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#a05e540230bfb537a7574da0f8d4eaaa5">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view.html#acb9ee6ba89ed94297808c4ee04d21f1e">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
+10 -742
View File
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_view&lt; Entity, Component &gt; Class Template Reference</title>
<title>EnTT: entt::basic_view&lt;... &gt; Class Template Reference</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -63,757 +63,25 @@ $(function() {
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__view-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, Component &gt; Class Template Reference</div> </div>
<div class="title">entt::basic_view&lt;... &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Multi component view.
<p>View.
<a href="classentt_1_1basic__view.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="view_8hpp_source.html">view.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a233ceb14c3a9988b57a024b97751ba36"><td class="memItemLeft" align="right" valign="top"><a id="a233ceb14c3a9988b57a024b97751ba36"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a233ceb14c3a9988b57a024b97751ba36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a233ceb14c3a9988b57a024b97751ba36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2e0680b9ee027ee17b4585b19339f39"><td class="memItemLeft" align="right" valign="top"><a id="aa2e0680b9ee027ee17b4585b19339f39"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:aa2e0680b9ee027ee17b4585b19339f39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:aa2e0680b9ee027ee17b4585b19339f39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adad369b0a841ef254549668348fed0c5"><td class="memItemLeft" align="right" valign="top"><a id="adad369b0a841ef254549668348fed0c5"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:adad369b0a841ef254549668348fed0c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:adad369b0a841ef254549668348fed0c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a05e540230bfb537a7574da0f8d4eaaa5"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:a05e540230bfb537a7574da0f8d4eaaa5"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a05e540230bfb537a7574da0f8d4eaaa5">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a05e540230bfb537a7574da0f8d4eaaa5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of existing components of the given type. <a href="#a05e540230bfb537a7574da0f8d4eaaa5">More...</a><br /></td></tr>
<tr class="separator:a05e540230bfb537a7574da0f8d4eaaa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#acb9ee6ba89ed94297808c4ee04d21f1e">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimates the number of entities that have the given components. <a href="#acb9ee6ba89ed94297808c4ee04d21f1e">More...</a><br /></td></tr>
<tr class="separator:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d19f70eda47e20c8c6d97b7f2c05f11"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:a9d19f70eda47e20c8c6d97b7f2c05f11"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a9d19f70eda47e20c8c6d97b7f2c05f11">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a9d19f70eda47e20c8c6d97b7f2c05f11"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the pool of a given component is empty. <a href="#a9d19f70eda47e20c8c6d97b7f2c05f11">More...</a><br /></td></tr>
<tr class="separator:a9d19f70eda47e20c8c6d97b7f2c05f11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7916ac310c1ec40c3cb5426d74d641d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#af7916ac310c1ec40c3cb5426d74d641d">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af7916ac310c1ec40c3cb5426d74d641d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the view is definitely empty. <a href="#af7916ac310c1ec40c3cb5426d74d641d">More...</a><br /></td></tr>
<tr class="separator:af7916ac310c1ec40c3cb5426d74d641d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb3b8c843b1ded37a8bac4e9d434d048"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:acb3b8c843b1ded37a8bac4e9d434d048"><td class="memTemplItemLeft" align="right" valign="top">Comp *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#acb3b8c843b1ded37a8bac4e9d434d048">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:acb3b8c843b1ded37a8bac4e9d434d048"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#acb3b8c843b1ded37a8bac4e9d434d048">More...</a><br /></td></tr>
<tr class="separator:acb3b8c843b1ded37a8bac4e9d434d048"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2122c6c128744f4617fab34dca651c3"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:ac2122c6c128744f4617fab34dca651c3"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#ac2122c6c128744f4617fab34dca651c3">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ac2122c6c128744f4617fab34dca651c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities of a given pool. <a href="#ac2122c6c128744f4617fab34dca651c3">More...</a><br /></td></tr>
<tr class="separator:ac2122c6c128744f4617fab34dca651c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00d2bb01727273bf40acdf1a57588fc7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a00d2bb01727273bf40acdf1a57588fc7">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a00d2bb01727273bf40acdf1a57588fc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given components. <a href="#a00d2bb01727273bf40acdf1a57588fc7">More...</a><br /></td></tr>
<tr class="separator:a00d2bb01727273bf40acdf1a57588fc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given components. <a href="#a1c17f8511d0e12087fbdd3b9b5cc9e4a">More...</a><br /></td></tr>
<tr class="separator:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8098ec2a26d9386d68c0b664d21d93e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#aa8098ec2a26d9386d68c0b664d21d93e">find</a> (const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa8098ec2a26d9386d68c0b664d21d93e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#aa8098ec2a26d9386d68c0b664d21d93e">More...</a><br /></td></tr>
<tr class="separator:aa8098ec2a26d9386d68c0b664d21d93e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a8dc82a3867a4ae26e8e80b5abc2e2118">contains</a> (const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a view contains an entity. <a href="#a8dc82a3867a4ae26e8e80b5abc2e2118">More...</a><br /></td></tr>
<tr class="separator:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa4f1d01440c37739502d3d73a28c4ca"><td class="memTemplParams" colspan="2">template&lt;typename... Comp&gt; </td></tr>
<tr class="memitem:aaa4f1d01440c37739502d3d73a28c4ca"><td class="memTemplItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#aaa4f1d01440c37739502d3d73a28c4ca">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aaa4f1d01440c37739502d3d73a28c4ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the components assigned to the given entity. <a href="#aaa4f1d01440c37739502d3d73a28c4ca">More...</a><br /></td></tr>
<tr class="separator:aaa4f1d01440c37739502d3d73a28c4ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1019208022f9a4a35ade26f3f35c097f"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a1019208022f9a4a35ade26f3f35c097f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a1019208022f9a4a35ade26f3f35c097f">each</a> (Func func) const</td></tr>
<tr class="memdesc:a1019208022f9a4a35ade26f3f35c097f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a1019208022f9a4a35ade26f3f35c097f">More...</a><br /></td></tr>
<tr class="separator:a1019208022f9a4a35ade26f3f35c097f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8d3d77cb491ea84ebac40017780c96f"><td class="memTemplParams" colspan="2">template&lt;typename Comp , typename Func &gt; </td></tr>
<tr class="memitem:aa8d3d77cb491ea84ebac40017780c96f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#aa8d3d77cb491ea84ebac40017780c96f">each</a> (Func func) const</td></tr>
<tr class="memdesc:aa8d3d77cb491ea84ebac40017780c96f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#aa8d3d77cb491ea84ebac40017780c96f">More...</a><br /></td></tr>
<tr class="separator:aa8d3d77cb491ea84ebac40017780c96f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a09f6332a1c27e104d8006dfba2b5b3a3">less</a> (Func func) const</td></tr>
<tr class="memdesc:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a09f6332a1c27e104d8006dfba2b5b3a3">More...</a><br /></td></tr>
<tr class="separator:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ec1ea64f16ad1605dccf48d713ac429"><td class="memTemplParams" colspan="2">template&lt;typename Comp , typename Func &gt; </td></tr>
<tr class="memitem:a6ec1ea64f16ad1605dccf48d713ac429"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a6ec1ea64f16ad1605dccf48d713ac429">less</a> (Func func) const</td></tr>
<tr class="memdesc:a6ec1ea64f16ad1605dccf48d713ac429"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a6ec1ea64f16ad1605dccf48d713ac429">More...</a><br /></td></tr>
<tr class="separator:a6ec1ea64f16ad1605dccf48d713ac429"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create views. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename... Component&gt;<br />
class entt::basic_view&lt; Entity, Component &gt;</h3>
<div class="textblock"><h3>template&lt;typename...&gt;<br />
class entt::basic_view&lt;... &gt;</h3>
<p>Multi component view. </p>
<p>Multi component views iterate over those entities that have at least all the given components in their bags. During initialization, a multi component view looks at the number of entities available for each component and picks up a reference to the smallest set of candidate entities in order to get a performance boost when iterate.<br />
Order of elements during iterations are highly dependent on the order of the underlying data structures. See <a class="el" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. ">sparse_set</a> and its specializations for more details.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
<li>New instances of the given components are created and assigned to entities.</li>
<li>The entity currently pointed is modified (as an example, if one of the given components is removed from the entity to which the iterator points).</li>
<li>The entity currently pointed is destroyed.</li>
</ul>
<p>In all the other cases, modifying the pools of the given components in any way invalidates all the iterators and using them results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Views share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by views.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Lifetime of a view must overcome the one of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits. ">entt_traits</a> for more details). </td></tr>
<tr><td class="paramname">Component</td><td>Types of components iterated by the view. </td></tr>
</table>
</dd>
</dl>
<p>View. </p>
<p>Primary template isn't defined on purpose. All the specializations give a compile-time error, but for a few reasonable cases. </p>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00018">18</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a00d2bb01727273bf40acdf1a57588fc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00d2bb01727273bf40acdf1a57588fc7">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the first entity that has the given components. </p>
<p>The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__view.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a" title="Returns an iterator that is past the last entity that has the given components. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00289">289</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a8dc82a3867a4ae26e8e80b5abc2e2118"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8dc82a3867a4ae26e8e80b5abc2e2118">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if a view contains an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00331">331</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="ac2122c6c128744f4617fab34dca651c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2122c6c128744f4617fab34dca651c3">&#9670;&nbsp;</a></span>data()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities of a given pool. </p>
<p>The returned pointer is such that range <code>[data&lt;Comp&gt;(), data&lt;Comp&gt;() + size&lt;Comp&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00271">271</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a1019208022f9a4a35ade26f3f35c097f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1019208022f9a4a35ade26f3f35c097f">&#9670;&nbsp;</a></span>each() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Component &amp;...);</div><div class="line">void(Component &amp;...);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00387">387</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="aa8d3d77cb491ea84ebac40017780c96f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8d3d77cb491ea84ebac40017780c96f">&#9670;&nbsp;</a></span>each() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp , typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Component &amp;...);</div><div class="line">void(Component &amp;...);</div></div><!-- fragment --><p>The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.<br />
It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.</p>
<dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component to use to enforce the iteration order. </td></tr>
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00423">423</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a9d19f70eda47e20c8c6d97b7f2c05f11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d19f70eda47e20c8c6d97b7f2c05f11">&#9670;&nbsp;</a></span>empty() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the pool of a given component is empty. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the pool of the given component is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00225">225</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="af7916ac310c1ec40c3cb5426d74d641d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7916ac310c1ec40c3cb5426d74d641d">&#9670;&nbsp;</a></span>empty() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if the view is definitely empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the view is definitely empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00233">233</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a1c17f8511d0e12087fbdd3b9b5cc9e4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c17f8511d0e12087fbdd3b9b5cc9e4a">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator that is past the last entity that has the given components. </p>
<p>The returned iterator points to the entity following the last entity that has the given components. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00309">309</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="aa8098ec2a26d9386d68c0b664d21d93e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8098ec2a26d9386d68c0b664d21d93e">&#9670;&nbsp;</a></span>find()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view.html#adad369b0a841ef254549668348fed0c5">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::find </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00320">320</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="aaa4f1d01440c37739502d3d73a28c4ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa4f1d01440c37739502d3d73a28c4ca">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename... Comp&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the components assigned to the given entity. </p>
<p>Prefer this function instead of <code><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df" title="Returns references to the given components for an entity. ">registry::get</a></code> during iterations. It has far better performance than its companion function.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the view results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the view doesn't contain the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Types of components to get. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00353">353</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a09f6332a1c27e104d8006dfba2b5b3a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09f6332a1c27e104d8006dfba2b5b3a3">&#9670;&nbsp;</a></span>less() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view.html#a1019208022f9a4a35ade26f3f35c097f" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00449">449</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a6ec1ea64f16ad1605dccf48d713ac429"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ec1ea64f16ad1605dccf48d713ac429">&#9670;&nbsp;</a></span>less() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp , typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><p>The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.<br />
It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view.html#a1019208022f9a4a35ade26f3f35c097f" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component to use to enforce the iteration order. </td></tr>
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00482">482</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="acb3b8c843b1ded37a8bac4e9d434d048"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb3b8c843b1ded37a8bac4e9d434d048">&#9670;&nbsp;</a></span>raw()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Comp* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::raw </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of components of a given pool. </p>
<p>The returned pointer is such that range <code>[raw&lt;Comp&gt;(), raw&lt;Comp&gt;() + size&lt;Comp&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the components. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00252">252</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a05e540230bfb537a7574da0f8d4eaaa5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05e540230bfb537a7574da0f8d4eaaa5">&#9670;&nbsp;</a></span>size() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of existing components of the given type. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component of which to return the size. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of existing components of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00206">206</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="acb9ee6ba89ed94297808c4ee04d21f1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb9ee6ba89ed94297808c4ee04d21f1e">&#9670;&nbsp;</a></span>size() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Estimates the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Estimated number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00214">214</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00017">17</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a></li>
<li>src/entt/entity/<a class="el" href="view_8hpp_source.html">view.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
@@ -1,98 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">basic_view&lt; Entity, Component &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, Component &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a00d2bb01727273bf40acdf1a57588fc7">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a8dc82a3867a4ae26e8e80b5abc2e2118">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a3a612381efadb0c6d68b43965e6d1149">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1019208022f9a4a35ade26f3f35c097f">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#af7916ac310c1ec40c3cb5426d74d641d">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa8098ec2a26d9386d68c0b664d21d93e">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a55c708083311799867acab1954e530a9">get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a09f6332a1c27e104d8006dfba2b5b3a3">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a08e5f6d88283b8e90ce252fcae447932">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a28da2cdc89a3600cd01ca820e13352f6">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a07488b51f1575b2e5740f3d5f21e0524">raw_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#acb9ee6ba89ed94297808c4ee04d21f1e">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">entt::basic_view&lt; Entity, Component &gt;</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -0,0 +1,99 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -0,0 +1,793 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt; Class Template Reference</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html">basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Multi component view.
<a href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="view_8hpp_source.html">view.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a7305469c7bf603c8d3dd0101d653f63a"><td class="memItemLeft" align="right" valign="top"><a id="a7305469c7bf603c8d3dd0101d653f63a"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a7305469c7bf603c8d3dd0101d653f63a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a7305469c7bf603c8d3dd0101d653f63a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e689febb974e9855dc2b033ae240643"><td class="memItemLeft" align="right" valign="top"><a id="a1e689febb974e9855dc2b033ae240643"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:a1e689febb974e9855dc2b033ae240643"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a1e689febb974e9855dc2b033ae240643"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace82adf125a9cced2acf69d9c80f04e9"><td class="memItemLeft" align="right" valign="top"><a id="ace82adf125a9cced2acf69d9c80f04e9"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:ace82adf125a9cced2acf69d9c80f04e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:ace82adf125a9cced2acf69d9c80f04e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:adfa9d55a6bebf3d6133048160f223506"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:adfa9d55a6bebf3d6133048160f223506"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#adfa9d55a6bebf3d6133048160f223506">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:adfa9d55a6bebf3d6133048160f223506"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of existing components of the given type. <a href="#adfa9d55a6bebf3d6133048160f223506">More...</a><br /></td></tr>
<tr class="separator:adfa9d55a6bebf3d6133048160f223506"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1006310c8f34441de27724157e78e220"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1006310c8f34441de27724157e78e220">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a1006310c8f34441de27724157e78e220"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimates the number of entities iterated by the view. <a href="#a1006310c8f34441de27724157e78e220">More...</a><br /></td></tr>
<tr class="separator:a1006310c8f34441de27724157e78e220"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83a27c7022e24788bb742f3a4ca07475"><td class="memTemplParams" colspan="2">template&lt;typename... Comp&gt; </td></tr>
<tr class="memitem:a83a27c7022e24788bb742f3a4ca07475"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a83a27c7022e24788bb742f3a4ca07475">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a83a27c7022e24788bb742f3a4ca07475"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the view or the pools of the given components are empty. <a href="#a83a27c7022e24788bb742f3a4ca07475">More...</a><br /></td></tr>
<tr class="separator:a83a27c7022e24788bb742f3a4ca07475"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3642beed007b678deb694d92e4a8743d"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:a3642beed007b678deb694d92e4a8743d"><td class="memTemplItemLeft" align="right" valign="top">Comp *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a3642beed007b678deb694d92e4a8743d">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a3642beed007b678deb694d92e4a8743d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components of a given pool. <a href="#a3642beed007b678deb694d92e4a8743d">More...</a><br /></td></tr>
<tr class="separator:a3642beed007b678deb694d92e4a8743d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab976959d36185f41abaa81fe482c1def"><td class="memTemplParams" colspan="2">template&lt;typename Comp &gt; </td></tr>
<tr class="memitem:ab976959d36185f41abaa81fe482c1def"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ab976959d36185f41abaa81fe482c1def">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ab976959d36185f41abaa81fe482c1def"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities of a given pool. <a href="#ab976959d36185f41abaa81fe482c1def">More...</a><br /></td></tr>
<tr class="separator:ab976959d36185f41abaa81fe482c1def"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ec860ee4a88c8ff309b614070b98b15"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a2ec860ee4a88c8ff309b614070b98b15">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a2ec860ee4a88c8ff309b614070b98b15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given components. <a href="#a2ec860ee4a88c8ff309b614070b98b15">More...</a><br /></td></tr>
<tr class="separator:a2ec860ee4a88c8ff309b614070b98b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa843ab06756af9c8246544760ef96c59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa843ab06756af9c8246544760ef96c59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given components. <a href="#aa843ab06756af9c8246544760ef96c59">More...</a><br /></td></tr>
<tr class="separator:aa843ab06756af9c8246544760ef96c59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46c8d4e4e9d4c1bd5c6a7e49116d68b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a46c8d4e4e9d4c1bd5c6a7e49116d68b3">find</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a46c8d4e4e9d4c1bd5c6a7e49116d68b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#a46c8d4e4e9d4c1bd5c6a7e49116d68b3">More...</a><br /></td></tr>
<tr class="separator:a46c8d4e4e9d4c1bd5c6a7e49116d68b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad06b6b506987ebf64d7d8ea017b1e9d7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ad06b6b506987ebf64d7d8ea017b1e9d7">contains</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ad06b6b506987ebf64d7d8ea017b1e9d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a view contains an entity. <a href="#ad06b6b506987ebf64d7d8ea017b1e9d7">More...</a><br /></td></tr>
<tr class="separator:ad06b6b506987ebf64d7d8ea017b1e9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c9adf96ab08975fd9c934ed8f76a091"><td class="memTemplParams" colspan="2">template&lt;typename... Comp&gt; </td></tr>
<tr class="memitem:a7c9adf96ab08975fd9c934ed8f76a091"><td class="memTemplItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7c9adf96ab08975fd9c934ed8f76a091">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a7c9adf96ab08975fd9c934ed8f76a091"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the components assigned to the given entity. <a href="#a7c9adf96ab08975fd9c934ed8f76a091">More...</a><br /></td></tr>
<tr class="separator:a7c9adf96ab08975fd9c934ed8f76a091"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ebf8c6fde33027be282b12707cabd94"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a6ebf8c6fde33027be282b12707cabd94"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94">each</a> (Func func) const</td></tr>
<tr class="memdesc:a6ebf8c6fde33027be282b12707cabd94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a6ebf8c6fde33027be282b12707cabd94">More...</a><br /></td></tr>
<tr class="separator:a6ebf8c6fde33027be282b12707cabd94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae22863700fe1d7fd7c01f5dc0acdf3c2"><td class="memTemplParams" colspan="2">template&lt;typename Comp , typename Func &gt; </td></tr>
<tr class="memitem:ae22863700fe1d7fd7c01f5dc0acdf3c2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ae22863700fe1d7fd7c01f5dc0acdf3c2">each</a> (Func func) const</td></tr>
<tr class="memdesc:ae22863700fe1d7fd7c01f5dc0acdf3c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#ae22863700fe1d7fd7c01f5dc0acdf3c2">More...</a><br /></td></tr>
<tr class="separator:ae22863700fe1d7fd7c01f5dc0acdf3c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe2ed0e4135be7b60038a5e7aa7a7f9b"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:abe2ed0e4135be7b60038a5e7aa7a7f9b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#abe2ed0e4135be7b60038a5e7aa7a7f9b">less</a> (Func func) const</td></tr>
<tr class="memdesc:abe2ed0e4135be7b60038a5e7aa7a7f9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#abe2ed0e4135be7b60038a5e7aa7a7f9b">More...</a><br /></td></tr>
<tr class="separator:abe2ed0e4135be7b60038a5e7aa7a7f9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99f59a63a7e28ec28a509e88e1a0a5f6"><td class="memTemplParams" colspan="2">template&lt;typename Comp , typename Func &gt; </td></tr>
<tr class="memitem:a99f59a63a7e28ec28a509e88e1a0a5f6"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a99f59a63a7e28ec28a509e88e1a0a5f6">less</a> (Func func) const</td></tr>
<tr class="memdesc:a99f59a63a7e28ec28a509e88e1a0a5f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a99f59a63a7e28ec28a509e88e1a0a5f6">More...</a><br /></td></tr>
<tr class="separator:a99f59a63a7e28ec28a509e88e1a0a5f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create views. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename... Exclude, typename... Component&gt;<br />
class entt::basic_view&lt; Entity, exclude_t&lt; Exclude... &gt;, Component... &gt;</h3>
<p>Multi component view. </p>
<p>Multi component views iterate over those entities that have at least all the given components in their bags. During initialization, a multi component view looks at the number of entities available for each component and picks up a reference to the smallest set of candidate entities in order to get a performance boost when iterate.<br />
Order of elements during iterations are highly dependent on the order of the underlying data structures. See <a class="el" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. ">sparse_set</a> for more details.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
<li>New instances of the given components are created and assigned to entities.</li>
<li>The entity currently pointed is modified (as an example, if one of the given components is removed from the entity to which the iterator points).</li>
<li>The entity currently pointed is destroyed.</li>
</ul>
<p>In all the other cases, modifying the pools of the given components in any way invalidates all the iterators and using them results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Views share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by views.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Lifetime of a view must overcome the one of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits. ">entt_traits</a> for more details). </td></tr>
<tr><td class="paramname">Exclude</td><td>Types of components used to filter the view. </td></tr>
<tr><td class="paramname">Component</td><td>Types of components iterated by the view. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00071">71</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a2ec860ee4a88c8ff309b614070b98b15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ec860ee4a88c8ff309b614070b98b15">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the first entity that has the given components. </p>
<p>The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#aa843ab06756af9c8246544760ef96c59" title="Returns an iterator that is past the last entity that has the given components. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00305">305</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="ad06b6b506987ebf64d7d8ea017b1e9d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad06b6b506987ebf64d7d8ea017b1e9d7">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if a view contains an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00350">350</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="ab976959d36185f41abaa81fe482c1def"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab976959d36185f41abaa81fe482c1def">&#9670;&nbsp;</a></span>data()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of entities of a given pool. </p>
<p>The returned pointer is such that range <code>[data&lt;Comp&gt;(), data&lt;Comp&gt;() + size&lt;Comp&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00287">287</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a6ebf8c6fde33027be282b12707cabd94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ebf8c6fde33027be282b12707cabd94">&#9670;&nbsp;</a></span>each() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>, Component &amp;...);</div><div class="line">void(Component &amp;...);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00409">409</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="ae22863700fe1d7fd7c01f5dc0acdf3c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae22863700fe1d7fd7c01f5dc0acdf3c2">&#9670;&nbsp;</a></span>each() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp , typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to all its components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>, Component &amp;...);</div><div class="line">void(Component &amp;...);</div></div><!-- fragment --><p>The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.<br />
It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.</p>
<dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component to use to enforce the iteration order. </td></tr>
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00445">445</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a83a27c7022e24788bb742f3a4ca07475"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a83a27c7022e24788bb742f3a4ca07475">&#9670;&nbsp;</a></span>empty()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename... Comp&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks whether the view or the pools of the given components are empty. </p>
<p>The view is definitely empty if one of the pools of the given components is empty. In all other cases, the view may be empty and not return entities even if this function returns false.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Types of components in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view or the pools of the given components are empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00245">245</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="aa843ab06756af9c8246544760ef96c59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa843ab06756af9c8246544760ef96c59">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator that is past the last entity that has the given components. </p>
<p>The returned iterator points to the entity following the last entity that has the given components. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00326">326</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a46c8d4e4e9d4c1bd5c6a7e49116d68b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46c8d4e4e9d4c1bd5c6a7e49116d68b3">&#9670;&nbsp;</a></span>find()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#ace82adf125a9cced2acf69d9c80f04e9">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::find </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Finds an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00338">338</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a7c9adf96ab08975fd9c934ed8f76a091"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c9adf96ab08975fd9c934ed8f76a091">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename... Comp&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the components assigned to the given entity. </p>
<p>Prefer this function instead of <code><a class="el" href="classentt_1_1basic__registry.html#a3a683bb33971cc5a0bbbf4a9409208df" title="Returns references to the given components for an entity. ">registry::get</a></code> during iterations. It has far better performance than its companion function.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to use an invalid component type results in a compilation error. Attempting to use an entity that doesn't belong to the view results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the view doesn't contain the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Types of components to get. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The components assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00372">372</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="abe2ed0e4135be7b60038a5e7aa7a7f9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe2ed0e4135be7b60038a5e7aa7a7f9b">&#9670;&nbsp;</a></span>less() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00471">471</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a99f59a63a7e28ec28a509e88e1a0a5f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99f59a63a7e28ec28a509e88e1a0a5f6">&#9670;&nbsp;</a></span>less() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp , typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a set of references to non-empty components. The <em>constness</em> of the components is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a7305469c7bf603c8d3dd0101d653f63a">entity_type</a>, Type &amp;...);</div><div class="line">void(Type &amp;...);</div></div><!-- fragment --><p>The pool of the suggested component is used to lead the iterations. The returned entities will therefore respect the order of the pool associated with that type.<br />
It is no longer guaranteed that the performance is the best possible, but there will be greater control over the order of iteration.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a6ebf8c6fde33027be282b12707cabd94" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component to use to enforce the iteration order. </td></tr>
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00504">504</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a3642beed007b678deb694d92e4a8743d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3642beed007b678deb694d92e4a8743d">&#9670;&nbsp;</a></span>raw()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">Comp* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::raw </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Direct access to the list of components of a given pool. </p>
<p>The returned pointer is such that range <code>[raw&lt;Comp&gt;(), raw&lt;Comp&gt;() + size&lt;Comp&gt;()]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the components. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component in which one is interested. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00268">268</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="adfa9d55a6bebf3d6133048160f223506"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adfa9d55a6bebf3d6133048160f223506">&#9670;&nbsp;</a></span>size() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<div class="memtemplate">
template&lt;typename Comp &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the number of existing components of the given type. </p>
<p>This isn't the number of entities iterated by the view.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Comp</td><td>Type of component of which to return the size. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of existing components of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00220">220</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a1006310c8f34441de27724157e78e220"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1006310c8f34441de27724157e78e220">&#9670;&nbsp;</a></span>size() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename... Exclude, typename... Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_01Exclude_8_8_8_01_4_00_01Component_8_8_8_01_4.html#a1e689febb974e9855dc2b033ae240643">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt; Exclude... &gt;, Component... &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Estimates the number of entities iterated by the view. </p>
<dl class="section return"><dt>Returns</dt><dd>Estimated number of entities iterated by the view. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00228">228</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="view_8hpp_source.html">view.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -0,0 +1,98 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a> class</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44">contains</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2">each</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521">get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8">less</a>(Func func) const</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e">operator[]</a>(const size_type pos) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81">raw_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_view&lt; Entity, Component &gt; Class Template Reference</title>
<title>EnTT: entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt; Class Template Reference</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>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -59,7 +59,7 @@ $(function() {
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html">basic_view&lt; Entity, Component &gt;</a></li> </ul>
<li class="navelem"><a class="el" href="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html">basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
@@ -67,91 +67,92 @@ $(function() {
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4-members.html">List of all members</a> </div>
<a href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_view&lt; Entity, Component &gt; Class Template Reference</div> </div>
<div class="title">entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Single component view specialization.
<a href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#details">More...</a></p>
<a href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="view_8hpp_source.html">view.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a07488b51f1575b2e5740f3d5f21e0524"><td class="memItemLeft" align="right" valign="top"><a id="a07488b51f1575b2e5740f3d5f21e0524"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a07488b51f1575b2e5740f3d5f21e0524">raw_type</a> = Component</td></tr>
<tr class="memdesc:a07488b51f1575b2e5740f3d5f21e0524"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of component iterated by the view. <br /></td></tr>
<tr class="separator:a07488b51f1575b2e5740f3d5f21e0524"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a233ceb14c3a9988b57a024b97751ba36"><td class="memItemLeft" align="right" valign="top"><a id="a233ceb14c3a9988b57a024b97751ba36"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a233ceb14c3a9988b57a024b97751ba36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a233ceb14c3a9988b57a024b97751ba36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2e0680b9ee027ee17b4585b19339f39"><td class="memItemLeft" align="right" valign="top"><a id="aa2e0680b9ee027ee17b4585b19339f39"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:aa2e0680b9ee027ee17b4585b19339f39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:aa2e0680b9ee027ee17b4585b19339f39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11420baf6cdbf1a97f3861784bd5fac2"><td class="memItemLeft" align="right" valign="top"><a id="a11420baf6cdbf1a97f3861784bd5fac2"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a></td></tr>
<tr class="memdesc:a11420baf6cdbf1a97f3861784bd5fac2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:a11420baf6cdbf1a97f3861784bd5fac2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8bd979c3e567bccfbc7a598442092d81"><td class="memItemLeft" align="right" valign="top"><a id="a8bd979c3e567bccfbc7a598442092d81"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81">raw_type</a> = Component</td></tr>
<tr class="memdesc:a8bd979c3e567bccfbc7a598442092d81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of component iterated by the view. <br /></td></tr>
<tr class="separator:a8bd979c3e567bccfbc7a598442092d81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0494ae46c922ce0c897aef9d7bd18533"><td class="memItemLeft" align="right" valign="top"><a id="a0494ae46c922ce0c897aef9d7bd18533"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a0494ae46c922ce0c897aef9d7bd18533"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a0494ae46c922ce0c897aef9d7bd18533"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6df04cc90dcce96291a88546aa287ca7"><td class="memItemLeft" align="right" valign="top"><a id="a6df04cc90dcce96291a88546aa287ca7"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:a6df04cc90dcce96291a88546aa287ca7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a6df04cc90dcce96291a88546aa287ca7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79384f28e171b1dc19eea171304d54ab"><td class="memItemLeft" align="right" valign="top"><a id="a79384f28e171b1dc19eea171304d54ab"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a>&lt; Entity &gt;::<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a></td></tr>
<tr class="memdesc:a79384f28e171b1dc19eea171304d54ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:a79384f28e171b1dc19eea171304d54ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#acb9ee6ba89ed94297808c4ee04d21f1e">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of entities that have the given component. <a href="#acb9ee6ba89ed94297808c4ee04d21f1e">More...</a><br /></td></tr>
<tr class="separator:acb9ee6ba89ed94297808c4ee04d21f1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7916ac310c1ec40c3cb5426d74d641d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#af7916ac310c1ec40c3cb5426d74d641d">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af7916ac310c1ec40c3cb5426d74d641d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the view is empty. <a href="#af7916ac310c1ec40c3cb5426d74d641d">More...</a><br /></td></tr>
<tr class="separator:af7916ac310c1ec40c3cb5426d74d641d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28da2cdc89a3600cd01ca820e13352f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a07488b51f1575b2e5740f3d5f21e0524">raw_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a28da2cdc89a3600cd01ca820e13352f6">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a28da2cdc89a3600cd01ca820e13352f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components. <a href="#a28da2cdc89a3600cd01ca820e13352f6">More...</a><br /></td></tr>
<tr class="separator:a28da2cdc89a3600cd01ca820e13352f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a612381efadb0c6d68b43965e6d1149"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a3a612381efadb0c6d68b43965e6d1149">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a3a612381efadb0c6d68b43965e6d1149"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities. <a href="#a3a612381efadb0c6d68b43965e6d1149">More...</a><br /></td></tr>
<tr class="separator:a3a612381efadb0c6d68b43965e6d1149"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00d2bb01727273bf40acdf1a57588fc7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a00d2bb01727273bf40acdf1a57588fc7">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a00d2bb01727273bf40acdf1a57588fc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given component. <a href="#a00d2bb01727273bf40acdf1a57588fc7">More...</a><br /></td></tr>
<tr class="separator:a00d2bb01727273bf40acdf1a57588fc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given component. <a href="#a1c17f8511d0e12087fbdd3b9b5cc9e4a">More...</a><br /></td></tr>
<tr class="separator:a1c17f8511d0e12087fbdd3b9b5cc9e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8098ec2a26d9386d68c0b664d21d93e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa8098ec2a26d9386d68c0b664d21d93e">find</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aa8098ec2a26d9386d68c0b664d21d93e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#aa8098ec2a26d9386d68c0b664d21d93e">More...</a><br /></td></tr>
<tr class="separator:aa8098ec2a26d9386d68c0b664d21d93e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08e5f6d88283b8e90ce252fcae447932"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a08e5f6d88283b8e90ce252fcae447932">operator[]</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> pos) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a08e5f6d88283b8e90ce252fcae447932"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the identifier that occupies the given position. <a href="#a08e5f6d88283b8e90ce252fcae447932">More...</a><br /></td></tr>
<tr class="separator:a08e5f6d88283b8e90ce252fcae447932"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a8dc82a3867a4ae26e8e80b5abc2e2118">contains</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a view contains an entity. <a href="#a8dc82a3867a4ae26e8e80b5abc2e2118">More...</a><br /></td></tr>
<tr class="separator:a8dc82a3867a4ae26e8e80b5abc2e2118"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55c708083311799867acab1954e530a9"><td class="memItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a55c708083311799867acab1954e530a9">get</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a55c708083311799867acab1954e530a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the component assigned to the given entity. <a href="#a55c708083311799867acab1954e530a9">More...</a><br /></td></tr>
<tr class="separator:a55c708083311799867acab1954e530a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1019208022f9a4a35ade26f3f35c097f"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a1019208022f9a4a35ade26f3f35c097f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1019208022f9a4a35ade26f3f35c097f">each</a> (Func func) const</td></tr>
<tr class="memdesc:a1019208022f9a4a35ade26f3f35c097f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a1019208022f9a4a35ade26f3f35c097f">More...</a><br /></td></tr>
<tr class="separator:a1019208022f9a4a35ade26f3f35c097f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a09f6332a1c27e104d8006dfba2b5b3a3">less</a> (Func func) const</td></tr>
<tr class="memdesc:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a09f6332a1c27e104d8006dfba2b5b3a3">More...</a><br /></td></tr>
<tr class="separator:a09f6332a1c27e104d8006dfba2b5b3a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8648cc860a64d9adcfc261679b8a174e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a8648cc860a64d9adcfc261679b8a174e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of entities that have the given component. <a href="#a8648cc860a64d9adcfc261679b8a174e">More...</a><br /></td></tr>
<tr class="separator:a8648cc860a64d9adcfc261679b8a174e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a155822d1b039f427ef7577547ea06783"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a155822d1b039f427ef7577547ea06783">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a155822d1b039f427ef7577547ea06783"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the view is empty. <a href="#a155822d1b039f427ef7577547ea06783">More...</a><br /></td></tr>
<tr class="separator:a155822d1b039f427ef7577547ea06783"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0bd1c0efb41c883001d6fd21c975c0f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81">raw_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f">raw</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af0bd1c0efb41c883001d6fd21c975c0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of components. <a href="#af0bd1c0efb41c883001d6fd21c975c0f">More...</a><br /></td></tr>
<tr class="separator:af0bd1c0efb41c883001d6fd21c975c0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1cb3cdf5882c092430ad0651e6d6094c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a1cb3cdf5882c092430ad0651e6d6094c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the list of entities. <a href="#a1cb3cdf5882c092430ad0651e6d6094c">More...</a><br /></td></tr>
<tr class="separator:a1cb3cdf5882c092430ad0651e6d6094c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b0108681a38c823de6a4ba49baa3957"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a2b0108681a38c823de6a4ba49baa3957">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a2b0108681a38c823de6a4ba49baa3957"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given component. <a href="#a2b0108681a38c823de6a4ba49baa3957">More...</a><br /></td></tr>
<tr class="separator:a2b0108681a38c823de6a4ba49baa3957"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91221211aded079c263eaf8e2031e441"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a91221211aded079c263eaf8e2031e441"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given component. <a href="#a91221211aded079c263eaf8e2031e441">More...</a><br /></td></tr>
<tr class="separator:a91221211aded079c263eaf8e2031e441"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae70c45e7dee534232252f5611df43011"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae70c45e7dee534232252f5611df43011">find</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae70c45e7dee534232252f5611df43011"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="#ae70c45e7dee534232252f5611df43011">More...</a><br /></td></tr>
<tr class="separator:ae70c45e7dee534232252f5611df43011"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e4d4f3d6235b755765e1935d96f307e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a9e4d4f3d6235b755765e1935d96f307e">operator[]</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a> pos) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a9e4d4f3d6235b755765e1935d96f307e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the identifier that occupies the given position. <a href="#a9e4d4f3d6235b755765e1935d96f307e">More...</a><br /></td></tr>
<tr class="separator:a9e4d4f3d6235b755765e1935d96f307e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90aa545d2da9c46ec4c43d74f2a35b44"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a90aa545d2da9c46ec4c43d74f2a35b44">contains</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a90aa545d2da9c46ec4c43d74f2a35b44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a view contains an entity. <a href="#a90aa545d2da9c46ec4c43d74f2a35b44">More...</a><br /></td></tr>
<tr class="separator:a90aa545d2da9c46ec4c43d74f2a35b44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0cd8a539628cc3090183094b07a44521"><td class="memTemplParams" colspan="2">template&lt;typename Comp = Component&gt; </td></tr>
<tr class="memitem:a0cd8a539628cc3090183094b07a44521"><td class="memTemplItemLeft" align="right" valign="top">decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0cd8a539628cc3090183094b07a44521">get</a> (const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a0cd8a539628cc3090183094b07a44521"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the component assigned to the given entity. <a href="#a0cd8a539628cc3090183094b07a44521">More...</a><br /></td></tr>
<tr class="separator:a0cd8a539628cc3090183094b07a44521"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0e899f8d7e4a58bba6abc9c5b9b83c2"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:ae0e899f8d7e4a58bba6abc9c5b9b83c2"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2">each</a> (Func func) const</td></tr>
<tr class="memdesc:ae0e899f8d7e4a58bba6abc9c5b9b83c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#ae0e899f8d7e4a58bba6abc9c5b9b83c2">More...</a><br /></td></tr>
<tr class="separator:ae0e899f8d7e4a58bba6abc9c5b9b83c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84b4522b3905af57fc30063f706553a8"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:a84b4522b3905af57fc30063f706553a8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a84b4522b3905af57fc30063f706553a8">less</a> (Func func) const</td></tr>
<tr class="memdesc:a84b4522b3905af57fc30063f706553a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and components and applies the given function object to them. <a href="#a84b4522b3905af57fc30063f706553a8">More...</a><br /></td></tr>
<tr class="separator:a84b4522b3905af57fc30063f706553a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create views. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename Component&gt;<br />
class entt::basic_view&lt; Entity, Component &gt;</h3>
class entt::basic_view&lt; Entity, exclude_t&lt;&gt;, Component &gt;</h3>
<p>Single component view specialization. </p>
<p>Single component views are specialized in order to get a boost in terms of performance. This kind of views can access the underlying data structure directly and avoid superfluous checks.<br />
Order of elements during iterations are highly dependent on the order of the underlying data structure. See <a class="el" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. ">sparse_set</a> and its specializations for more details.</p>
Order of elements during iterations are highly dependent on the order of the underlying data structure. See <a class="el" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. ">sparse_set</a> for more details.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
@@ -170,10 +171,10 @@ class entt::basic_view&lt; Entity, Component &gt;</h3>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00528">528</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00550">550</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a00d2bb01727273bf40acdf1a57588fc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00d2bb01727273bf40acdf1a57588fc7">&#9670;&nbsp;</a></span>begin()</h2>
<a id="a2b0108681a38c823de6a4ba49baa3957"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b0108681a38c823de6a4ba49baa3957">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
@@ -184,7 +185,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::begin </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -198,16 +199,16 @@ template&lt;typename Entity , typename Component &gt; </div>
</div><div class="memdoc">
<p>Returns an iterator to the first entity that has the given component. </p>
<p>The returned iterator points to the first entity that has the given component. If the view is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1c17f8511d0e12087fbdd3b9b5cc9e4a" title="Returns an iterator that is past the last entity that has the given component. ">end()</a></code>.</p>
<p>The returned iterator points to the first entity that has the given component. If the view is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a91221211aded079c263eaf8e2031e441" title="Returns an iterator that is past the last entity that has the given component. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given component. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00610">610</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00632">632</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a8dc82a3867a4ae26e8e80b5abc2e2118"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8dc82a3867a4ae26e8e80b5abc2e2118">&#9670;&nbsp;</a></span>contains()</h2>
<a id="a90aa545d2da9c46ec4c43d74f2a35b44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90aa545d2da9c46ec4c43d74f2a35b44">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
@@ -218,9 +219,9 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::contains </td>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
@@ -241,12 +242,12 @@ template&lt;typename Entity , typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00658">658</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00680">680</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a3a612381efadb0c6d68b43965e6d1149"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a612381efadb0c6d68b43965e6d1149">&#9670;&nbsp;</a></span>data()</h2>
<a id="a1cb3cdf5882c092430ad0651e6d6094c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1cb3cdf5882c092430ad0651e6d6094c">&#9670;&nbsp;</a></span>data()</h2>
<div class="memitem">
<div class="memproto">
@@ -257,7 +258,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::data </td>
<td class="memname">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -271,16 +272,16 @@ template&lt;typename Entity , typename Component &gt; </div>
</div><div class="memdoc">
<p>Direct access to the list of entities. </p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a3a612381efadb0c6d68b43965e6d1149" title="Direct access to the list of entities. ">data()</a>, <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a3a612381efadb0c6d68b43965e6d1149" title="Direct access to the list of entities. ">data()</a> + <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#acb9ee6ba89ed94297808c4ee04d21f1e" title="Returns the number of entities that have the given component. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c" title="Direct access to the list of entities. ">data()</a>, <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a1cb3cdf5882c092430ad0651e6d6094c" title="Direct access to the list of entities. ">data()</a> + <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e" title="Returns the number of entities that have the given component. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the entities. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00592">592</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00614">614</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a1019208022f9a4a35ade26f3f35c097f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1019208022f9a4a35ade26f3f35c097f">&#9670;&nbsp;</a></span>each()</h2>
<a id="ae0e899f8d7e4a58bba6abc9c5b9b83c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0e899f8d7e4a58bba6abc9c5b9b83c2">&#9670;&nbsp;</a></span>each()</h2>
<div class="memitem">
<div class="memproto">
@@ -293,7 +294,7 @@ template&lt;typename Func &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::each </td>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
@@ -310,7 +311,7 @@ template&lt;typename Func &gt; </div>
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a reference to its component. The <em>constness</em> of the component is as requested.<br />
The signature of the function must be equivalent to one of the following forms:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Component &amp;);</div><div class="line">void(Component &amp;);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>, Component &amp;);</div><div class="line">void(Component &amp;);</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, temporary objects are returned during iterations. They can be caught only by copy or with const references.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
@@ -324,12 +325,12 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00706">706</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00730">730</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="af7916ac310c1ec40c3cb5426d74d641d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7916ac310c1ec40c3cb5426d74d641d">&#9670;&nbsp;</a></span>empty()</h2>
<a id="a155822d1b039f427ef7577547ea06783"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a155822d1b039f427ef7577547ea06783">&#9670;&nbsp;</a></span>empty()</h2>
<div class="memitem">
<div class="memproto">
@@ -340,7 +341,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::empty </td>
<td class="memname">bool <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::empty </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -356,12 +357,12 @@ template&lt;typename Entity , typename Component &gt; </div>
<p>Checks whether the view is empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the view is empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00560">560</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00582">582</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a1c17f8511d0e12087fbdd3b9b5cc9e4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c17f8511d0e12087fbdd3b9b5cc9e4a">&#9670;&nbsp;</a></span>end()</h2>
<a id="a91221211aded079c263eaf8e2031e441"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91221211aded079c263eaf8e2031e441">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
@@ -372,7 +373,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::end </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -390,12 +391,12 @@ template&lt;typename Entity , typename Component &gt; </div>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given component. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00629">629</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00651">651</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="aa8098ec2a26d9386d68c0b664d21d93e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8098ec2a26d9386d68c0b664d21d93e">&#9670;&nbsp;</a></span>find()</h2>
<a id="ae70c45e7dee534232252f5611df43011"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae70c45e7dee534232252f5611df43011">&#9670;&nbsp;</a></span>find()</h2>
<div class="memitem">
<div class="memproto">
@@ -406,9 +407,9 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a11420baf6cdbf1a97f3861784bd5fac2">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::find </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a79384f28e171b1dc19eea171304d54ab">iterator_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::find </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
@@ -429,25 +430,27 @@ template&lt;typename Entity , typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the given entity if it's found, past the end iterator otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00639">639</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00661">661</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a55c708083311799867acab1954e530a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55c708083311799867acab1954e530a9">&#9670;&nbsp;</a></span>get()</h2>
<a id="a0cd8a539628cc3090183094b07a44521"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0cd8a539628cc3090183094b07a44521">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Component &gt; </div>
<div class="memtemplate">
template&lt;typename Comp = Component&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::get </td>
<td class="memname">decltype(auto) <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::get </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
@@ -471,12 +474,12 @@ template&lt;typename Entity , typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The component assigned to the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00677">677</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00700">700</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a09f6332a1c27e104d8006dfba2b5b3a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09f6332a1c27e104d8006dfba2b5b3a3">&#9670;&nbsp;</a></span>less()</h2>
<a id="a84b4522b3905af57fc30063f706553a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84b4522b3905af57fc30063f706553a8">&#9670;&nbsp;</a></span>less()</h2>
<div class="memitem">
<div class="memproto">
@@ -489,7 +492,7 @@ template&lt;typename Func &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::less </td>
<td class="memname">void <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::less </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></td><td>)</td>
@@ -506,8 +509,8 @@ template&lt;typename Func &gt; </div>
<p>Iterates entities and components and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided with the entity itself and a reference to its component if it's a non-empty one. The <em>constness</em> of the component is as requested.<br />
The signature of the function must be equivalent to one of the following forms in case the component isn't an empty one:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>, Component &amp;);</div><div class="line">void(Component &amp;);</div></div><!-- fragment --><p>In case the component is an empty one instead, the following forms are accepted:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a>);</div><div class="line">void();</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a1019208022f9a4a35ade26f3f35c097f" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>, Component &amp;);</div><div class="line">void(Component &amp;);</div></div><!-- fragment --><p>In case the component is an empty one instead, the following forms are accepted:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a>);</div><div class="line">void();</div></div><!-- fragment --><dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#ae0e899f8d7e4a58bba6abc9c5b9b83c2" title="Iterates entities and components and applies the given function object to them. ">each</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
@@ -521,12 +524,12 @@ template&lt;typename Func &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00745">745</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00769">769</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a08e5f6d88283b8e90ce252fcae447932"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08e5f6d88283b8e90ce252fcae447932">&#9670;&nbsp;</a></span>operator[]()</h2>
<a id="a9e4d4f3d6235b755765e1935d96f307e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e4d4f3d6235b755765e1935d96f307e">&#9670;&nbsp;</a></span>operator[]()</h2>
<div class="memitem">
<div class="memproto">
@@ -537,9 +540,9 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a233ceb14c3a9988b57a024b97751ba36">entity_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::operator[] </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a0494ae46c922ce0c897aef9d7bd18533">entity_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::operator[] </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a>&#160;</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a>&#160;</td>
<td class="paramname"><em>pos</em></td><td>)</td>
<td> const</td>
</tr>
@@ -560,12 +563,12 @@ template&lt;typename Entity , typename Component &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The identifier that occupies the given position. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00649">649</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00671">671</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="a28da2cdc89a3600cd01ca820e13352f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28da2cdc89a3600cd01ca820e13352f6">&#9670;&nbsp;</a></span>raw()</h2>
<a id="af0bd1c0efb41c883001d6fd21c975c0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0bd1c0efb41c883001d6fd21c975c0f">&#9670;&nbsp;</a></span>raw()</h2>
<div class="memitem">
<div class="memproto">
@@ -576,7 +579,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a07488b51f1575b2e5740f3d5f21e0524">raw_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::raw </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8bd979c3e567bccfbc7a598442092d81">raw_type</a>* <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::raw </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -590,16 +593,16 @@ template&lt;typename Entity , typename Component &gt; </div>
</div><div class="memdoc">
<p>Direct access to the list of components. </p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a28da2cdc89a3600cd01ca820e13352f6" title="Direct access to the list of components. ">raw()</a>, <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#a28da2cdc89a3600cd01ca820e13352f6" title="Direct access to the list of components. ">raw()</a> + <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#acb9ee6ba89ed94297808c4ee04d21f1e" title="Returns the number of entities that have the given component. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<p>The returned pointer is such that range <code>[<a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f" title="Direct access to the list of components. ">raw()</a>, <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#af0bd1c0efb41c883001d6fd21c975c0f" title="Direct access to the list of components. ">raw()</a> + <a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a8648cc860a64d9adcfc261679b8a174e" title="Returns the number of entities that have the given component. ">size()</a>]</code> is always a valid range, even if the container is empty.</p>
<dl class="section note"><dt>Note</dt><dd>There are no guarantees on the order of the components. Use <code>begin</code> and <code>end</code> if you want to iterate the view in the expected order.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>A pointer to the array of components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00576">576</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00598">598</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
<a id="acb9ee6ba89ed94297808c4ee04d21f1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb9ee6ba89ed94297808c4ee04d21f1e">&#9670;&nbsp;</a></span>size()</h2>
<a id="a8648cc860a64d9adcfc261679b8a174e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8648cc860a64d9adcfc261679b8a174e">&#9670;&nbsp;</a></span>size()</h2>
<div class="memitem">
<div class="memproto">
@@ -610,7 +613,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01Component_01_4.html#aa2e0680b9ee027ee17b4585b19339f39">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, Component &gt;::size </td>
<td class="memname"><a class="el" href="classentt_1_1basic__view_3_01Entity_00_01exclude__t_3_4_00_01Component_01_4.html#a6df04cc90dcce96291a88546aa287ca7">size_type</a> <a class="el" href="classentt_1_1basic__view.html">entt::basic_view</a>&lt; Entity, <a class="el" href="structentt_1_1exclude__t.html">exclude_t</a>&lt;&gt;, Component &gt;::size </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -626,7 +629,7 @@ template&lt;typename Entity , typename Component &gt; </div>
<p>Returns the number of entities that have the given component. </p>
<dl class="section return"><dt>Returns</dt><dd>Number of entities that have the given component. </dd></dl>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00552">552</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="view_8hpp_source.html#l00574">574</a> of file <a class="el" href="view_8hpp_source.html">view.hpp</a>.</p>
</div>
</div>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+5 -5
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -124,7 +124,7 @@ template&lt;typename &gt; </td></tr>
<div class="textblock"><p>Connection class. </p>
<p>Opaque object the aim of which is to allow users to release an already estabilished connection without having to keep a reference to the signal or the sink that generated it. </p>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00153">153</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00152">152</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a382faa75cdfc741f36ff433b6c72550d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a382faa75cdfc741f36ff433b6c72550d">&#9670;&nbsp;</a></span>connection()</h2>
@@ -158,7 +158,7 @@ template&lt;typename &gt; </td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00173">173</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00172">172</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
</div>
</div>
@@ -189,7 +189,7 @@ template&lt;typename &gt; </td></tr>
<p>Checks whether a connection is properly initialized. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the connection is properly initialized, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00202">202</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00201">201</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
</div>
</div>
@@ -255,7 +255,7 @@ template&lt;typename &gt; </td></tr>
</dl>
<dl class="section return"><dt>Returns</dt><dd>This connection. </dd></dl>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00188">188</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="sigh_8hpp_source.html#l00187">187</a> of file <a class="el" href="sigh_8hpp_source.html">sigh.hpp</a>.</p>
</div>
</div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

-127
View File
@@ -1,127 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1default__storage.html">default_storage</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::default_storage&lt; Entity, Type, typename &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a98fafc49edc4fc42c0d1ba961a382b01">batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a8f733430bd73c5c498f1a64fc75be114">batch</a>(It first, It last, const object_type &amp;value)</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a71bb41582069c0d7e3bc65f1cade91f8">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a70e5e8c13abcc93f6bafcfb77477236b">begin</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#ada741ea78c35b3d580df57ef8c33a5e2">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a4803512a33cbeccd9aaabf9d56ddbb22">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a452694d348f341a019d7121d12907939">const_iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a89e5fbdc2c93467042b6996744892425">construct</a>(const entity_type entt, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">entt::sparse_set::construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a349f0273ab8efc42c059664edf3b47ac">destroy</a>(const entity_type entt) override</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#aedf563d410f1288b175b2d67522b5bb5">entt::sparse_set::destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a1976a4a5aaf1c0a7b9a56ec06da24fed">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a02d6db1a606d4c3f2d0fe8167b8fd2e0">end</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a83a08d373a2ca9e2cf558de34ee3ae9d">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a61656fb5c67cb9d1c8686bda75f1c63a">get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a1f39875bd9f247b17b6bbe72f4acf85c">get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae5fdeb500ab138905118a4ebb018895a">entt::sparse_set::get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a771c558246411b577d420425040c0ed8">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a057a98613022bfc4a95b93fa49a951b1">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#af486735ea8b6009ebd785497c6705f73">raw</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a7cff2ab3a6eaa29ab59ad868bb6c808b">raw</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a50ecc470d39c9f40f12f1164eb448f6e">reserve</a>(const size_type cap) override</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#aabfddf33cb086063a471ee06d1778690">entt::sparse_set::reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a4989da26f220b19e5f380449cc2b5298">reset</a>() override</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a815dc60f963706ec43aeaba1e9108923">shrink_to_fit</a>() override</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#ac9134701c111fd54faeab56f77113c8e">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#adad11ef61ee1953d963c5036c6972613">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">entt::sparse_set::sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a58a3f827c19c4e63550e601a2b3dcd65">swap</a>(const size_type lhs, const size_type rhs) ENTT_NOEXCEPT override</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">entt::sparse_set::swap</a>(const size_type lhs, const size_type rhs) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage.html#ae22b0e9504cea4081a24168dd41bb958">try_get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage.html#a38c22c59b8df432be8ac8edee9fc6d8f">try_get</a>(const entity_type entt) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage.html">entt::default_storage&lt; Entity, Type, typename &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -1,3 +0,0 @@
<map id="entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;" name="entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="6,5,181,32"/>
</map>
@@ -1,114 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a15651e5a1fd629714b279b90c680b7e9">batch</a>(It first, It last, const object_type &amp;={})</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">entt::sparse_set::batch</a>(It first, It last)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a1e2ea918b12f8be96b09c9bc11e31098">begin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a407834674d9010a910b84a5a7bce53d1">cbegin</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a9c4a7c733317610193d537ace20de9ae">cend</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">construct</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#aedf563d410f1288b175b2d67522b5bb5">destroy</a>(const entity_type entt)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a08220253d8c3058314e875da3718545f">end</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a5900eeb999c9066ea163121e001588a0">entity_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a9b6c15c42f98bbc411b0f3aa09de7a4a">get</a>([[maybe_unused]] const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ae5fdeb500ab138905118a4ebb018895a">entt::sparse_set::get</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a>(const entity_type entt) const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#aabfddf33cb086063a471ee06d1778690">reserve</a>(const size_type cap)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a46d1553f6837b467f1ddf8ae3dece3d2">reset</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a>(const sparse_set &amp;other) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#ad410641d1403e3b0c38c119511c6a54c">shrink_to_fit</a>()</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a1d6d474e8b1703c42144cda3a865eeb5">size_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a>(iterator_type first, iterator_type last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a>()=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a>(const sparse_set &amp;other)</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a>(sparse_set &amp;&amp;)=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">swap</a>(const size_type lhs, const size_type rhs) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a>() ENTT_NOEXCEPT=default</td><td class="entry"><a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -1,3 +0,0 @@
<map id="entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;" name="entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="6,5,181,32"/>
</map>
@@ -1,511 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Class Template Reference</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.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html">default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__emptc8f1012d1b55fc8f6a716a0092de110f.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Default storage implementation.
<a href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empt4dc96ab5410a272f95b104e8656e9c34.png" border="0" usemap="#entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map" alt="Inheritance graph"/></div>
<map name="entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map" id="entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_inherit__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="6,5,181,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__emptd5cc8eda4b0752e289f5df62c03872a0.png" border="0" usemap="#entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map" alt="Collaboration graph"/></div>
<map name="entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map" id="entt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4_coll__map">
<area shape="rect" id="node2" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="6,5,181,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a520dce16d31a7bf8aecbc891254458dc"><td class="memItemLeft" align="right" valign="top"><a id="a520dce16d31a7bf8aecbc891254458dc"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a> = Type</td></tr>
<tr class="memdesc:a520dce16d31a7bf8aecbc891254458dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the objects associated with the entities. <br /></td></tr>
<tr class="separator:a520dce16d31a7bf8aecbc891254458dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5900eeb999c9066ea163121e001588a0"><td class="memItemLeft" align="right" valign="top"><a id="a5900eeb999c9066ea163121e001588a0"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a5900eeb999c9066ea163121e001588a0">entity_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">underlying_type::entity_type</a></td></tr>
<tr class="memdesc:a5900eeb999c9066ea163121e001588a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a5900eeb999c9066ea163121e001588a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d6d474e8b1703c42144cda3a865eeb5"><td class="memItemLeft" align="right" valign="top"><a id="a1d6d474e8b1703c42144cda3a865eeb5"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a1d6d474e8b1703c42144cda3a865eeb5">size_type</a> = typename <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">underlying_type::size_type</a></td></tr>
<tr class="memdesc:a1d6d474e8b1703c42144cda3a865eeb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a1d6d474e8b1703c42144cda3a865eeb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8866eb6823b8ddf03a49f601b4e04623"><td class="memItemLeft" align="right" valign="top"><a id="a8866eb6823b8ddf03a49f601b4e04623"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:a8866eb6823b8ddf03a49f601b4e04623"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random access iterator type. <br /></td></tr>
<tr class="separator:a8866eb6823b8ddf03a49f601b4e04623"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classentt_1_1sparse__set"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classentt_1_1sparse__set')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td></tr>
<tr class="memitem:a9a1dbe5ab2dbb098beae0bff56bbf780 inherit pub_types_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a9a1dbe5ab2dbb098beae0bff56bbf780"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a9a1dbe5ab2dbb098beae0bff56bbf780 inherit pub_types_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a9a1dbe5ab2dbb098beae0bff56bbf780 inherit pub_types_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d2138b0eb8c7ac968e9e38a9e981ec1 inherit pub_types_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a3d2138b0eb8c7ac968e9e38a9e981ec1"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:a3d2138b0eb8c7ac968e9e38a9e981ec1 inherit pub_types_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a3d2138b0eb8c7ac968e9e38a9e981ec1 inherit pub_types_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a580b210d5a24c49ca8c255646f3bb469 inherit pub_types_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a580b210d5a24c49ca8c255646f3bb469"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> = iterator</td></tr>
<tr class="memdesc:a580b210d5a24c49ca8c255646f3bb469 inherit pub_types_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random access iterator type. <br /></td></tr>
<tr class="separator:a580b210d5a24c49ca8c255646f3bb469 inherit pub_types_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a407834674d9010a910b84a5a7bce53d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a407834674d9010a910b84a5a7bce53d1">cbegin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a407834674d9010a910b84a5a7bce53d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#a407834674d9010a910b84a5a7bce53d1">More...</a><br /></td></tr>
<tr class="separator:a407834674d9010a910b84a5a7bce53d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e2ea918b12f8be96b09c9bc11e31098"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a1e2ea918b12f8be96b09c9bc11e31098">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a1e2ea918b12f8be96b09c9bc11e31098"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="#a1e2ea918b12f8be96b09c9bc11e31098">More...</a><br /></td></tr>
<tr class="separator:a1e2ea918b12f8be96b09c9bc11e31098"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c4a7c733317610193d537ace20de9ae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a9c4a7c733317610193d537ace20de9ae">cend</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a9c4a7c733317610193d537ace20de9ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#a9c4a7c733317610193d537ace20de9ae">More...</a><br /></td></tr>
<tr class="separator:a9c4a7c733317610193d537ace20de9ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08220253d8c3058314e875da3718545f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a08220253d8c3058314e875da3718545f">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a08220253d8c3058314e875da3718545f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="#a08220253d8c3058314e875da3718545f">More...</a><br /></td></tr>
<tr class="separator:a08220253d8c3058314e875da3718545f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b6c15c42f98bbc411b0f3aa09de7a4a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a9b6c15c42f98bbc411b0f3aa09de7a4a">get</a> ([[maybe_unused]] const <a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a5900eeb999c9066ea163121e001588a0">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a9b6c15c42f98bbc411b0f3aa09de7a4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the object associated with an entity. <a href="#a9b6c15c42f98bbc411b0f3aa09de7a4a">More...</a><br /></td></tr>
<tr class="separator:a9b6c15c42f98bbc411b0f3aa09de7a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15651e5a1fd629714b279b90c680b7e9"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:a15651e5a1fd629714b279b90c680b7e9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a15651e5a1fd629714b279b90c680b7e9">batch</a> (It first, It last, const <a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a> &amp;={})</td></tr>
<tr class="memdesc:a15651e5a1fd629714b279b90c680b7e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a storage. <a href="#a15651e5a1fd629714b279b90c680b7e9">More...</a><br /></td></tr>
<tr class="separator:a15651e5a1fd629714b279b90c680b7e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classentt_1_1sparse__set"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classentt_1_1sparse__set')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classentt_1_1sparse__set.html">entt::sparse_set&lt; Entity &gt;</a></td></tr>
<tr class="memitem:a8ef544aaed30126797f6f0b9a9f8b9e8 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a8ef544aaed30126797f6f0b9a9f8b9e8"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8">sparse_set</a> ()=default</td></tr>
<tr class="memdesc:a8ef544aaed30126797f6f0b9a9f8b9e8 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:a8ef544aaed30126797f6f0b9a9f8b9e8 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af684a44e129f3aafd311814b5972378f inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">sparse_set</a> (const <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;other)</td></tr>
<tr class="memdesc:af684a44e129f3aafd311814b5972378f inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <a href="classentt_1_1sparse__set.html#af684a44e129f3aafd311814b5972378f">More...</a><br /></td></tr>
<tr class="separator:af684a44e129f3aafd311814b5972378f inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8f4f137b5ac0984599067d5408db5bf inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="af8f4f137b5ac0984599067d5408db5bf"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#af8f4f137b5ac0984599067d5408db5bf">sparse_set</a> (<a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;&amp;)=default</td></tr>
<tr class="memdesc:af8f4f137b5ac0984599067d5408db5bf inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default move constructor. <br /></td></tr>
<tr class="separator:af8f4f137b5ac0984599067d5408db5bf inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74c49e0d205b6240bf14ac3003cfcbd1 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a74c49e0d205b6240bf14ac3003cfcbd1"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a74c49e0d205b6240bf14ac3003cfcbd1">~sparse_set</a> () ENTT_NOEXCEPT=default</td></tr>
<tr class="memdesc:a74c49e0d205b6240bf14ac3003cfcbd1 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default destructor. <br /></td></tr>
<tr class="separator:a74c49e0d205b6240bf14ac3003cfcbd1 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32a00ca96cc7e78089fb7120d144de34 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">operator=</a> (const <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;other)</td></tr>
<tr class="memdesc:a32a00ca96cc7e78089fb7120d144de34 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy assignment operator. <a href="classentt_1_1sparse__set.html#a32a00ca96cc7e78089fb7120d144de34">More...</a><br /></td></tr>
<tr class="separator:a32a00ca96cc7e78089fb7120d144de34 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cb1c0bffe341b847537956075b398fa inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">operator=</a> (<a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;&amp;)=default</td></tr>
<tr class="memdesc:a7cb1c0bffe341b847537956075b398fa inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default move assignment operator. <a href="classentt_1_1sparse__set.html#a7cb1c0bffe341b847537956075b398fa">More...</a><br /></td></tr>
<tr class="separator:a7cb1c0bffe341b847537956075b398fa inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabfddf33cb086063a471ee06d1778690 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#aabfddf33cb086063a471ee06d1778690">reserve</a> (const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> cap)</td></tr>
<tr class="memdesc:aabfddf33cb086063a471ee06d1778690 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Increases the capacity of a sparse set. <a href="classentt_1_1sparse__set.html#aabfddf33cb086063a471ee06d1778690">More...</a><br /></td></tr>
<tr class="separator:aabfddf33cb086063a471ee06d1778690 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30267005e552fce0d2a9b4e4d70d6656 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">capacity</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a30267005e552fce0d2a9b4e4d70d6656 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of elements that a sparse set has currently allocated space for. <a href="classentt_1_1sparse__set.html#a30267005e552fce0d2a9b4e4d70d6656">More...</a><br /></td></tr>
<tr class="separator:a30267005e552fce0d2a9b4e4d70d6656 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad410641d1403e3b0c38c119511c6a54c inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="ad410641d1403e3b0c38c119511c6a54c"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ad410641d1403e3b0c38c119511c6a54c">shrink_to_fit</a> ()</td></tr>
<tr class="memdesc:ad410641d1403e3b0c38c119511c6a54c inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Requests the removal of unused capacity. <br /></td></tr>
<tr class="separator:ad410641d1403e3b0c38c119511c6a54c inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af79345df59154e5ea9e58b7efa7ff8f0 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">extent</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af79345df59154e5ea9e58b7efa7ff8f0 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the extent of a sparse set. <a href="classentt_1_1sparse__set.html#af79345df59154e5ea9e58b7efa7ff8f0">More...</a><br /></td></tr>
<tr class="separator:af79345df59154e5ea9e58b7efa7ff8f0 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a340dff7484f1e58feff58a5f0627e190 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">size</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a340dff7484f1e58feff58a5f0627e190 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of elements in a sparse set. <a href="classentt_1_1sparse__set.html#a340dff7484f1e58feff58a5f0627e190">More...</a><br /></td></tr>
<tr class="separator:a340dff7484f1e58feff58a5f0627e190 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1a16cb354a9ed5ded92b6edcddce15e inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">empty</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae1a16cb354a9ed5ded92b6edcddce15e inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether a sparse set is empty. <a href="classentt_1_1sparse__set.html#ae1a16cb354a9ed5ded92b6edcddce15e">More...</a><br /></td></tr>
<tr class="separator:ae1a16cb354a9ed5ded92b6edcddce15e inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2eafe4975271769b08fe7f7d4924992f inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">data</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a2eafe4975271769b08fe7f7d4924992f inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Direct access to the internal packed array. <a href="classentt_1_1sparse__set.html#a2eafe4975271769b08fe7f7d4924992f">More...</a><br /></td></tr>
<tr class="separator:a2eafe4975271769b08fe7f7d4924992f inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06743336f265989b48e106a3d3bd1562 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562">begin</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a06743336f265989b48e106a3d3bd1562 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the beginning. <a href="classentt_1_1sparse__set.html#a06743336f265989b48e106a3d3bd1562">More...</a><br /></td></tr>
<tr class="separator:a06743336f265989b48e106a3d3bd1562 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69d6c1288f673c6f92d2b1b028d6aa75 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75">end</a> () const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a69d6c1288f673c6f92d2b1b028d6aa75 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the end. <a href="classentt_1_1sparse__set.html#a69d6c1288f673c6f92d2b1b028d6aa75">More...</a><br /></td></tr>
<tr class="separator:a69d6c1288f673c6f92d2b1b028d6aa75 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ed57521bb3279b5ed3cd397b65abf01 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">find</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a0ed57521bb3279b5ed3cd397b65abf01 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds an entity. <a href="classentt_1_1sparse__set.html#a0ed57521bb3279b5ed3cd397b65abf01">More...</a><br /></td></tr>
<tr class="separator:a0ed57521bb3279b5ed3cd397b65abf01 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4eb4faf1aa28d20717716bea7981f5b inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">has</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:af4eb4faf1aa28d20717716bea7981f5b inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a sparse set contains an entity. <a href="classentt_1_1sparse__set.html#af4eb4faf1aa28d20717716bea7981f5b">More...</a><br /></td></tr>
<tr class="separator:af4eb4faf1aa28d20717716bea7981f5b inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5fdeb500ab138905118a4ebb018895a inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ae5fdeb500ab138905118a4ebb018895a">get</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt) const ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ae5fdeb500ab138905118a4ebb018895a inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the position of an entity in a sparse set. <a href="classentt_1_1sparse__set.html#ae5fdeb500ab138905118a4ebb018895a">More...</a><br /></td></tr>
<tr class="separator:ae5fdeb500ab138905118a4ebb018895a inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f6d293b9bc7227de22c86722881083f inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">construct</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt)</td></tr>
<tr class="memdesc:a4f6d293b9bc7227de22c86722881083f inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns an entity to a sparse set. <a href="classentt_1_1sparse__set.html#a4f6d293b9bc7227de22c86722881083f">More...</a><br /></td></tr>
<tr class="separator:a4f6d293b9bc7227de22c86722881083f inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a642460f7f0ca8e42220c43c785467063 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplParams" colspan="2">template&lt;typename It &gt; </td></tr>
<tr class="memitem:a642460f7f0ca8e42220c43c785467063 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">batch</a> (It first, It last)</td></tr>
<tr class="memdesc:a642460f7f0ca8e42220c43c785467063 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns one or more entities to a sparse set. <a href="classentt_1_1sparse__set.html#a642460f7f0ca8e42220c43c785467063">More...</a><br /></td></tr>
<tr class="separator:a642460f7f0ca8e42220c43c785467063 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aedf563d410f1288b175b2d67522b5bb5 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#aedf563d410f1288b175b2d67522b5bb5">destroy</a> (const <a class="el" href="classentt_1_1sparse__set.html#a9a1dbe5ab2dbb098beae0bff56bbf780">entity_type</a> entt)</td></tr>
<tr class="memdesc:aedf563d410f1288b175b2d67522b5bb5 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes an entity from a sparse set. <a href="classentt_1_1sparse__set.html#aedf563d410f1288b175b2d67522b5bb5">More...</a><br /></td></tr>
<tr class="separator:aedf563d410f1288b175b2d67522b5bb5 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">swap</a> (const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> lhs, const <a class="el" href="classentt_1_1sparse__set.html#a3d2138b0eb8c7ac968e9e38a9e981ec1">size_type</a> rhs) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps two entities in the internal packed array. <a href="classentt_1_1sparse__set.html#afb754f7b178b591042cae2389365a37e">More...</a><br /></td></tr>
<tr class="separator:afb754f7b178b591042cae2389365a37e inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplParams" colspan="2">template&lt;typename Compare , typename Sort = std_sort, typename... Args&gt; </td></tr>
<tr class="memitem:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">sort</a> (<a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> first, <a class="el" href="classentt_1_1sparse__set.html#a580b210d5a24c49ca8c255646f3bb469">iterator_type</a> last, Compare compare, Sort algo=Sort{}, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort elements according to the given comparison function. <a href="classentt_1_1sparse__set.html#afae939a408911c573256cf0299d76828">More...</a><br /></td></tr>
<tr class="separator:afae939a408911c573256cf0299d76828 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">respect</a> (const <a class="el" href="classentt_1_1sparse__set.html">sparse_set</a> &amp;other) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort entities according to their order in another sparse set. <a href="classentt_1_1sparse__set.html#ab0481dde89f07e9ca50d79777de898b6">More...</a><br /></td></tr>
<tr class="separator:ab0481dde89f07e9ca50d79777de898b6 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46d1553f6837b467f1ddf8ae3dece3d2 inherit pub_methods_classentt_1_1sparse__set"><td class="memItemLeft" align="right" valign="top"><a id="a46d1553f6837b467f1ddf8ae3dece3d2"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1sparse__set.html#a46d1553f6837b467f1ddf8ae3dece3d2">reset</a> ()</td></tr>
<tr class="memdesc:a46d1553f6837b467f1ddf8ae3dece3d2 inherit pub_methods_classentt_1_1sparse__set"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets a sparse set. <br /></td></tr>
<tr class="separator:a46d1553f6837b467f1ddf8ae3dece3d2 inherit pub_methods_classentt_1_1sparse__set"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Entity, typename Type&gt;<br />
class entt::default_storage&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;</h3>
<p>Default storage implementation. </p>
<p>This class is a refinement of a sparse set that associates an object to an entity. The main purpose of this class is to extend sparse sets to store components in a registry. It guarantees fast access both to the elements and to the entities.</p>
<dl class="section note"><dt>Note</dt><dd>Entities and objects have the same order. It's guaranteed both in case of raw access (either to entities or objects) and when using random or input access iterators.</dd>
<dd>
Internal data structures arrange elements to maximize performance. Because of that, there are no guarantees that elements have the expected order when iterate directly the internal packed array (see <code>raw</code> and <code>size</code> member functions for that). Use <code>begin</code> and <code>end</code> instead.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Empty types aren't explicitly instantiated. Temporary objects are returned in place of the instances of the components and raw access isn't available for them.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classentt_1_1sparse__set.html#a8ef544aaed30126797f6f0b9a9f8b9e8" title="Default constructor. ">sparse_set&lt;Entity&gt;</a></dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits. ">entt_traits</a> for more details). </td></tr>
<tr><td class="paramname">Type</td><td>Type of objects assigned to the entities. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00495">495</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a15651e5a1fd629714b279b90c680b7e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15651e5a1fd629714b279b90c680b7e9">&#9670;&nbsp;</a></span>batch()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<div class="memtemplate">
template&lt;typename It &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::batch </td>
<td>(</td>
<td class="paramtype">It&#160;</td>
<td class="paramname"><em>first</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">It&#160;</td>
<td class="paramname"><em>last</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a> &amp;&#160;</td>
<td class="paramname"> = <code>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Assigns one or more entities to a storage. </p>
<p>The object type must be at least default constructible.</p>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to assign an entity that already belongs to the storage results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the storage already contains the given entity.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">It</td><td>Type of forward iterator. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">first</td><td>An iterator to the first element of the range of entities. </td></tr>
<tr><td class="paramname">last</td><td>An iterator past the last element of the range of entities. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the list of instances just created and sorted the same of the entities. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00690">690</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<a id="a1e2ea918b12f8be96b09c9bc11e31098"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e2ea918b12f8be96b09c9bc11e31098">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the beginning. </p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a08220253d8c3058314e875da3718545f" title="Returns an iterator to the end. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00624">624</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<a id="a407834674d9010a910b84a5a7bce53d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a407834674d9010a910b84a5a7bce53d1">&#9670;&nbsp;</a></span>cbegin()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::cbegin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the beginning. </p>
<p>The returned iterator points to the first instance of the given type. If the storage is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a08220253d8c3058314e875da3718545f" title="Returns an iterator to the end. ">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00618">618</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<a id="a9c4a7c733317610193d537ace20de9ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c4a7c733317610193d537ace20de9ae">&#9670;&nbsp;</a></span>cend()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::cend </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the end. </p>
<p>The returned iterator points to the element following the last instance of the given type. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the element following the last instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00642">642</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<a id="a08220253d8c3058314e875da3718545f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08220253d8c3058314e875da3718545f">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a8866eb6823b8ddf03a49f601b4e04623">iterator_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns an iterator to the end. </p>
<p>The returned iterator points to the element following the last instance of the given type. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed by a call to either <code>sort</code> or <code>respect</code>.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the element following the last instance of the given type. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00647">647</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<a id="a9b6c15c42f98bbc411b0f3aa09de7a4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b6c15c42f98bbc411b0f3aa09de7a4a">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Entity , typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a520dce16d31a7bf8aecbc891254458dc">object_type</a> <a class="el" href="classentt_1_1default__storage.html">entt::default_storage</a>&lt; Entity, Type, std::enable_if_t&lt; std::is_empty_v&lt; Type &gt; &gt; &gt;::get </td>
<td>(</td>
<td class="paramtype">[[maybe_unused] ] const <a class="el" href="classentt_1_1default__storage_3_01Entity_00_01Type_00_01std_1_1enable__if__t_3_01std_1_1is__empty__v_3_01Type_01_4_01_4_01_4.html#a5900eeb999c9066ea163121e001588a0">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the object associated with an entity. </p>
<dl class="section note"><dt>Note</dt><dd>Empty types aren't explicitly instantiated. Therefore, this function always returns a temporary object.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Attempting to use an entity that doesn't belong to the storage results in undefined behavior.<br />
An assertion will abort the execution at runtime in debug mode if the storage doesn't contain the given entity.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The object associated with the entity. </dd></dl>
<p class="definition">Definition at line <a class="el" href="default__storage_8hpp_source.html#l00667">667</a> of file <a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>src/entt/entity/<a class="el" href="default__storage_8hpp_source.html">default_storage.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
@@ -1,3 +0,0 @@
<map id="entt::default_storage&lt; Entity, Type, typename &gt;" name="entt::default_storage&lt; Entity, Type, typename &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="9,5,184,32"/>
</map>
@@ -1 +0,0 @@
bda36e92f9c25b68bd13ae38f332b518
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

@@ -1,3 +0,0 @@
<map id="entt::default_storage&lt; Entity, Type, typename &gt;" name="entt::default_storage&lt; Entity, Type, typename &gt;">
<area shape="rect" id="node2" href="$classentt_1_1sparse__set.html" title="Basic sparse set implementation. " alt="" coords="9,5,184,32"/>
</map>
@@ -1 +0,0 @@
53519f1a7a457b92c3090211034acee8
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -72,9 +72,11 @@ $(function() {
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6">connect</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef">connect</a>(Type &amp;value_or_instance) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c">delegate</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215">delegate</a>(connect_arg_t&lt; Function &gt;) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66">delegate</a>(connect_arg_t&lt; Candidate &gt;, Type &amp;value_or_instance) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c">connect</a>(Type *value_or_instance) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a5c4828a5df5ed1e8fd18465ff63eb73c">delegate</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#ad07c76f552619d55edc17a3722958215">delegate</a>(connect_arg_t&lt; Function &gt;) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66">delegate</a>(connect_arg_t&lt; Candidate &gt;, Type &amp;value_or_instance) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326">delegate</a>(connect_arg_t&lt; Candidate &gt;, Type *value_or_instance) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a235927a00f56e4b56dbfdc4e6cf5ddb4">function_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3e0495b7612d458cbc59dc4b657d586f">instance</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a73e1029cbb6359d803a6cc06b82f80d7">operator bool</a>() const ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html">entt::delegate&lt; Ret(Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -98,6 +98,10 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a24fbe634fda0fe5c67ec6deba0deaa66"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a24fbe634fda0fe5c67ec6deba0deaa66">delegate</a> (<a class="el" href="structentt_1_1connect__arg__t.html">connect_arg_t</a>&lt; Candidate &gt;, Type &amp;value_or_instance) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a24fbe634fda0fe5c67ec6deba0deaa66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a delegate and connects a member for a given instance or a free function with payload. <a href="#a24fbe634fda0fe5c67ec6deba0deaa66">More...</a><br /></td></tr>
<tr class="separator:a24fbe634fda0fe5c67ec6deba0deaa66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c3391085b16cba9024b4bbb372f7326"><td class="memTemplParams" colspan="2">template&lt;auto Candidate, typename Type &gt; </td></tr>
<tr class="memitem:a3c3391085b16cba9024b4bbb372f7326"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a3c3391085b16cba9024b4bbb372f7326">delegate</a> (<a class="el" href="structentt_1_1connect__arg__t.html">connect_arg_t</a>&lt; Candidate &gt;, Type *value_or_instance) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a3c3391085b16cba9024b4bbb372f7326"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a delegate and connects a member for a given instance or a free function with payload. <a href="#a3c3391085b16cba9024b4bbb372f7326">More...</a><br /></td></tr>
<tr class="separator:a3c3391085b16cba9024b4bbb372f7326"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e732abcbc4aa9b8899c92d8f21e55a6"><td class="memTemplParams" colspan="2">template&lt;auto Function&gt; </td></tr>
<tr class="memitem:a6e732abcbc4aa9b8899c92d8f21e55a6"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a6e732abcbc4aa9b8899c92d8f21e55a6">connect</a> () ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a6e732abcbc4aa9b8899c92d8f21e55a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Connects a free function to a delegate. <a href="#a6e732abcbc4aa9b8899c92d8f21e55a6">More...</a><br /></td></tr>
@@ -106,6 +110,10 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:aae828d209ffe33590c2bb8e4b37f47ef"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#aae828d209ffe33590c2bb8e4b37f47ef">connect</a> (Type &amp;value_or_instance) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:aae828d209ffe33590c2bb8e4b37f47ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Connects a member function for a given instance or a free function with payload to a delegate. <a href="#aae828d209ffe33590c2bb8e4b37f47ef">More...</a><br /></td></tr>
<tr class="separator:aae828d209ffe33590c2bb8e4b37f47ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afcdce5ab5ae55520cce86f3f79b38e9c"><td class="memTemplParams" colspan="2">template&lt;auto Candidate, typename Type &gt; </td></tr>
<tr class="memitem:afcdce5ab5ae55520cce86f3f79b38e9c"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#afcdce5ab5ae55520cce86f3f79b38e9c">connect</a> (Type *value_or_instance) ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:afcdce5ab5ae55520cce86f3f79b38e9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Connects a member function for a given instance or a free function with payload to a delegate. <a href="#afcdce5ab5ae55520cce86f3f79b38e9c">More...</a><br /></td></tr>
<tr class="separator:afcdce5ab5ae55520cce86f3f79b38e9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d81bb1bde6abd78914cd0a07084bcd7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1delegate_3_01Ret_07Args_8_8_8_08_4.html#a0d81bb1bde6abd78914cd0a07084bcd7">reset</a> () ENTT_NOEXCEPT</td></tr>
<tr class="memdesc:a0d81bb1bde6abd78914cd0a07084bcd7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets a delegate. <a href="#a0d81bb1bde6abd78914cd0a07084bcd7">More...</a><br /></td></tr>
<tr class="separator:a0d81bb1bde6abd78914cd0a07084bcd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -140,7 +148,7 @@ class entt::delegate&lt; Ret(Args...)&gt;</h3>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00103">103</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ad07c76f552619d55edc17a3722958215"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad07c76f552619d55edc17a3722958215">&#9670;&nbsp;</a></span>delegate() <span class="overload">[1/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad07c76f552619d55edc17a3722958215">&#9670;&nbsp;</a></span>delegate() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -175,12 +183,12 @@ template&lt;auto Function&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00150">150</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00155">155</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
<a id="a24fbe634fda0fe5c67ec6deba0deaa66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24fbe634fda0fe5c67ec6deba0deaa66">&#9670;&nbsp;</a></span>delegate() <span class="overload">[2/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a24fbe634fda0fe5c67ec6deba0deaa66">&#9670;&nbsp;</a></span>delegate() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -232,13 +240,70 @@ template&lt;auto Candidate, typename Type &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00164">164</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00169">169</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
<a id="a3c3391085b16cba9024b4bbb372f7326"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c3391085b16cba9024b4bbb372f7326">&#9670;&nbsp;</a></span>delegate() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ret , typename... Args&gt; </div>
<div class="memtemplate">
template&lt;auto Candidate, typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1delegate.html">entt::delegate</a>&lt; Ret(Args...)&gt;::<a class="el" href="classentt_1_1delegate.html">delegate</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structentt_1_1connect__arg__t.html">connect_arg_t</a>&lt; Candidate &gt;&#160;</td>
<td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Type *&#160;</td>
<td class="paramname"><em>value_or_instance</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructs a delegate and connects a member for a given instance or a free function with payload. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Candidate</td><td>Member or free function to connect to the delegate. </td></tr>
<tr><td class="paramname">Type</td><td>Type of class or type of payload. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value_or_instance</td><td>A valid pointer that fits the purpose. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00183">183</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a6e732abcbc4aa9b8899c92d8f21e55a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e732abcbc4aa9b8899c92d8f21e55a6">&#9670;&nbsp;</a></span>connect() <span class="overload">[1/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6e732abcbc4aa9b8899c92d8f21e55a6">&#9670;&nbsp;</a></span>connect() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -272,12 +337,12 @@ template&lt;auto Function&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00175">175</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00194">194</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
<a id="aae828d209ffe33590c2bb8e4b37f47ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae828d209ffe33590c2bb8e4b37f47ef">&#9670;&nbsp;</a></span>connect() <span class="overload">[2/2]</span></h2>
<h2 class="memtitle"><span class="permalink"><a href="#aae828d209ffe33590c2bb8e4b37f47ef">&#9670;&nbsp;</a></span>connect() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -321,7 +386,56 @@ template&lt;auto Candidate, typename Type &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00196">196</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00214">214</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
<a id="afcdce5ab5ae55520cce86f3f79b38e9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afcdce5ab5ae55520cce86f3f79b38e9c">&#9670;&nbsp;</a></span>connect() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ret , typename... Args&gt; </div>
<div class="memtemplate">
template&lt;auto Candidate, typename Type &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classentt_1_1delegate.html">entt::delegate</a>&lt; Ret(Args...)&gt;::connect </td>
<td>(</td>
<td class="paramtype">Type *&#160;</td>
<td class="paramname"><em>value_or_instance</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Connects a member function for a given instance or a free function with payload to a delegate. </p>
<p>The delegate isn't responsible for the connected object or the payload. Users must always guarantee that the lifetime of the instance overcomes the one of the delegate.<br />
When used to connect a free function with payload, its signature must be such that the instance is the first argument before the ones used to define the delegate itself.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Candidate</td><td>Member or free function to connect to the delegate. </td></tr>
<tr><td class="paramname">Type</td><td>Type of class or type of payload. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">value_or_instance</td><td>A valid pointer that fits the purpose. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00234">234</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
@@ -353,7 +467,7 @@ template&lt;typename Ret , typename... Args&gt; </div>
<p>Returns the instance or the payload linked to a delegate, if any. </p>
<dl class="section return"><dt>Returns</dt><dd>An opaque pointer to the underlying data. </dd></dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00215">215</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00252">252</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
@@ -385,7 +499,7 @@ template&lt;typename Ret , typename... Args&gt; </div>
<p>Checks whether a delegate actually stores a listener. </p>
<dl class="section return"><dt>Returns</dt><dd>False if the delegate is empty, true otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00242">242</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00279">279</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
@@ -427,7 +541,7 @@ template&lt;typename Ret , typename... Args&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The value returned by the underlying function. </dd></dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00233">233</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00270">270</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
@@ -466,7 +580,7 @@ template&lt;typename Ret , typename... Args&gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>False if the two contents differ, true otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00252">252</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00289">289</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
@@ -498,7 +612,7 @@ template&lt;typename Ret , typename... Args&gt; </div>
<p>Resets a delegate. </p>
<p>After a reset, a delegate cannot be invoked anymore. </p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00206">206</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="delegate_8hpp_source.html#l00243">243</a> of file <a class="el" href="delegate_8hpp_source.html">delegate.hpp</a>.</p>
</div>
</div>
+10 -9
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -70,14 +70,15 @@ $(function() {
<p>This is the complete list of members for <a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701">enqueue</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e">enqueue</a>(Event &amp;&amp;event)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878">sink</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273">sink_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd">trigger</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e">trigger</a>(Event &amp;&amp;event)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784">update</a>()</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c">update</a>() const</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822">discard</a>()</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ab41d56a73b6bdc64f0862abd333ea701">enqueue</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e">enqueue</a>(Event &amp;&amp;event)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#afedd59083875621a11510b00c84c8878">sink</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a9ab3b084146a292b2dd2411cea452273">sink_type</a> typedef</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ac3d3eae7004c63f0232b09f2770c4ebd">trigger</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#a1d14234071d22c9fe09c453ebd818d2e">trigger</a>(Event &amp;&amp;event)</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784">update</a>()</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1dispatcher.html#ae15c11634047d7718db5e2e30675c80c">update</a>() const</td><td class="entry"><a class="el" href="classentt_1_1dispatcher.html">entt::dispatcher</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
+51 -9
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -108,6 +108,10 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1e0a488354698cbf3cba82396ac4b76e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1dispatcher.html#a1e0a488354698cbf3cba82396ac4b76e">enqueue</a> (Event &amp;&amp;event)</td></tr>
<tr class="memdesc:a1e0a488354698cbf3cba82396ac4b76e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enqueues an event of the given type. <a href="#a1e0a488354698cbf3cba82396ac4b76e">More...</a><br /></td></tr>
<tr class="separator:a1e0a488354698cbf3cba82396ac4b76e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a83958d3ca4b5ec11eca0c3b8eb591822"><td class="memTemplParams" colspan="2">template&lt;typename... Event&gt; </td></tr>
<tr class="memitem:a83958d3ca4b5ec11eca0c3b8eb591822"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1dispatcher.html#a83958d3ca4b5ec11eca0c3b8eb591822">discard</a> ()</td></tr>
<tr class="memdesc:a83958d3ca4b5ec11eca0c3b8eb591822"><td class="mdescLeft">&#160;</td><td class="mdescRight">Discards all the events queued so far. <a href="#a83958d3ca4b5ec11eca0c3b8eb591822">More...</a><br /></td></tr>
<tr class="separator:a83958d3ca4b5ec11eca0c3b8eb591822"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabed6fd7fa4027dcfa3afc7bc20f2784"><td class="memTemplParams" colspan="2">template&lt;typename Event &gt; </td></tr>
<tr class="memitem:aabed6fd7fa4027dcfa3afc7bc20f2784"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1dispatcher.html#aabed6fd7fa4027dcfa3afc7bc20f2784">update</a> ()</td></tr>
<tr class="memdesc:aabed6fd7fa4027dcfa3afc7bc20f2784"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delivers all the pending events of the given type. <a href="#aabed6fd7fa4027dcfa3afc7bc20f2784">More...</a><br /></td></tr>
@@ -122,8 +126,46 @@ Public Member Functions</h2></td></tr>
Listeners are provided in the form of member functions. For each event of type <code>Event</code>, listeners are such that they can be invoked with an argument of type <code>const Event &amp;</code>, no matter what the return type is.</p>
<p>The types of the instances are <code>Class &amp;</code>. Users must guarantee that the lifetimes of the objects overcome the one of the dispatcher itself to avoid crashes. </p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00031">31</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00033">33</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a83958d3ca4b5ec11eca0c3b8eb591822"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a83958d3ca4b5ec11eca0c3b8eb591822">&#9670;&nbsp;</a></span>discard()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename... Event&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void entt::dispatcher::discard </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Discards all the events queued so far. </p>
<p>If no types are provided, the dispatcher will clear all the existing pools.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Event</td><td>Type of events to discard. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00224">224</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
<a id="ab41d56a73b6bdc64f0862abd333ea701"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab41d56a73b6bdc64f0862abd333ea701">&#9670;&nbsp;</a></span>enqueue() <span class="overload">[1/2]</span></h2>
@@ -166,7 +208,7 @@ template&lt;typename Event , typename... Args&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00190">190</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00197">197</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -211,7 +253,7 @@ template&lt;typename Event &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00204">204</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00211">211</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -252,7 +294,7 @@ template&lt;typename Event &gt; </div>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A temporary sink object. </dd></dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00146">146</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00153">153</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -298,7 +340,7 @@ template&lt;typename Event , typename... Args&gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00161">161</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00168">168</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -343,7 +385,7 @@ template&lt;typename Event &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00175">175</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00182">182</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -381,7 +423,7 @@ template&lt;typename Event &gt; </div>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00218">218</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00246">246</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
@@ -411,7 +453,7 @@ template&lt;typename Event &gt; </div>
<p>Delivers all the pending events. </p>
<p>This method is blocking and it doesn't return until all the events are delivered to the registered listeners. It's responsibility of the users to reduce at a minimum the time spent in the bodies of the listeners. </p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00229">229</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
<p class="definition">Definition at line <a class="el" href="dispatcher_8hpp_source.html#l00257">257</a> of file <a class="el" href="dispatcher_8hpp_source.html">dispatcher.hpp</a>.</p>
</div>
</div>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
+1 -1
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.1.1</span>
&#160;<span id="projectnumber">3.2.0</span>
</div>
</td>
</tr>
@@ -0,0 +1,96 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: Member List</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.2.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1extended__meta__factory.html">extended_meta_factory</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">entt::extended_meta_factory&lt; Type, Spec &gt; Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classentt_1_1extended__meta__factory.html">entt::extended_meta_factory&lt; Type, Spec &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a2387e5bc85a87e3c936d82a956805bfb">base</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b">conv</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#ad4245f8f4aa5209fbd8f48fbba195c7b">conv</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a29514cae07fc5df16b6c73ffb5ffa73b">ctor</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#ab9206cfe67bec72e6bfce975fbf5b955">ctor</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a66b918efd96f694b3f22d2aa5bd76584">data</a>(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a0e7f9e39eb31bff6e16f432488ec046a">data</a>(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a754b47db9b2432042d7ac23e480fdc4b">dtor</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html#aa87f603531373ae59cdcc36e34ff6300">extended_meta_factory</a>(entt::internal::meta_prop_node **target)</td><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html">entt::extended_meta_factory&lt; Type, Spec &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#ae40d97f4685edbf04a240eec58883b18">func</a>(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html#a67b4797a58215f0bff993a708be56c3d">prop</a>(PropertyOrKey &amp;&amp;property_or_key, Value &amp;&amp;... value) &amp;&amp;</td><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html">entt::extended_meta_factory&lt; Type, Spec &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html#ad96aa7f041b17895a66b36e338d1451e">props</a>(Property... property) &amp;&amp;</td><td class="entry"><a class="el" href="classentt_1_1extended__meta__factory.html">entt::extended_meta_factory&lt; Type, Spec &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a795ae5cd4fd7772256442e598421649f">reset</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a6f49abe1b22384def9bc19871a4c5eb2">type</a>(const ENTT_ID_TYPE identifier) ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classentt_1_1meta__factory.html#a0426faf1bcf4ad72d541023837a127e0">type</a>() ENTT_NOEXCEPT</td><td class="entry"><a class="el" href="classentt_1_1meta__factory.html">entt::meta_factory&lt; Type &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More