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